赞
踩
在训练模型的过程中,我们通常需要代价函数(即cost function,为loss function的累加求和)最小,这时候我们需要用到优化算法来进一步找到代价函数的全局最优点,即找到模型的最佳参数。
1、Batch Gadient Descent(批量梯度下降法):
在每次迭代中,需要用到所有的训练样本。即某一参数每次迭代求出代价函数关于此参数的偏导,乘以学习速率,用以更新参数。如果有多个参数,则需要同时更新。
注意事项:
(1)影响较大:当过小时,梯度下降比较缓慢,时间较长;当过大时,在梯度下降的过程中,可能会越过最小值,导致函数不收敛或者发散,也可能因此使得收敛缓慢。
(2)应当应用于凸函数(凸函数没有局部最优解),否则,易收敛至局部最优解。
(3)由于每次迭代用的是所有训练样本,因此会占据较大的内存,另外,此算法仅支持离线计算,不支持在线计算。
2、Mini-Batch Gradient Descent(微型批量梯度下降法):
在每次的迭代中,使用部分训练样本。
当size=m(训练样本全体)时,为批量梯度下降法;当size=1时,为随机梯度下降法。一般而言,当m<2000时,选择用批量梯度下降法,否则,选用微型批量梯度下降法,且总是把size设为64、128、256、512等,为了与CPU/GPU的内存匹配,增加计算速度,便于并行计算。
注意事项:
(1)可加快运行速度:当size=10时,仅需要前10个样本就可以运行算法,然后通过后续的10个样本来更新参数,以此类推,而不是等我们遍历完所有的样本后才能执行算法来更新参数 。且可以进行并行化处理(采用向量的方式)。
3、Stochastic Gradient Descent(随机梯度下降法):
每次迭代选用一个训练样本。若每次迭代考虑全部样本,则不适合大规模数据,且耗费时间较长,因此考虑使用SGD。
注意事项:
(1)不仅支持离线计算,也可支持在线计算。
(2)有助于跳出局部最优点,找到真正的全局最优点,打乱了数据,可以使算法更快收敛。但也可能困在局部最优点或鞍点。
(3)但在直观上,看起来是以某个比较随机而迂回的路径朝着全局最小值逼近,且在最小值点附近动荡。因此,一个改善的方法可以是:使随着时间的推移而降低,如=常数C/(迭代次数+常数D)
4、Momentum:
可消除梯度下降中的摆动。
首先了解下指数平滑法(指数加权移动平均),可理解为当前取值受到历史取值与当前值的两方面影响,也可形象地理解为物理中的惯性,会一定程度保持原来的运动状态。
Momentum的思想与此类似,当前梯度是历史梯度和当前偏导的线性组合,其中会多一个参数,即历史梯度的权重。通常取0.9。由于这一方法考虑到了历史方向,所以具有一定的稳定性,且一定程度上避免陷入局部最优。
5、RMSprop(root mean square prop:加速梯度下降):
会在迭代的过程中,将迭代变化多除以一个变量,(emmm公式编辑麻烦我就省略啦),为保持稳定,在分母上引入变量,通常为10*(-8),这个方法也是为了消除梯度下降中的摆动。
6、Adam optimization algorithm(Adaptive moment estimation):
Adam这个方法结合了momentum和RMSprop,公式省略,目的是为了参数变化较为平稳,稳定地寻找到全局最优点。
7、Adagard:
可以自动地对learning rate进行调节,斜率越大,则迭代变化应该越快,但Adagard强调的是反差的效果,变化的大小是与之前的梯度相比较而言的,并不是独立拎出来看的。
每次迭代最好的step是,与一次微分成正比,与二次微分成反比,(即当前点与最优值之间的距离的倍数),即约等于我们Adagard中每次迭代大小的公式。在Adagard中,为了计算速率的提高,用一阶微分来代替二阶微分。
此外,学习速率衰减(learning rate decay)的方法还有很多,采用不同的公式,比如指数率下降、离散下降等等。
推荐阅读:
https://blog.csdn.net/u010089444/article/details/76725843
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。