实践中最优
基于(Nesterov的)动量更新的各种随机梯度下降方法更加常用,因为它们更加简单且容易扩展。
Adam is good普通更新
在反向传播得到梯度后,- learning rate * dx 就可以进行权重参数更新了
普通更新使用普通更新方法时,会遇到局部最优解或者鞍点
local minima: 梯度为0,停止梯度下降。Saddle point:一般出现在高维数据中。
Problems with SGDSGD中,在计算梯度时,使用的是mini-batches,所以一般噪音比较大。
Momentum Update
物理学动量概念的引入,这个方法在深度网络上几乎总能得到更好的收敛速度。
想象一个小球在碗中做摆钟运动,mu * v 类似于摩擦力。在小球运动的过程中,随着时间变化,动能越来越小(克服摩擦力做工),就会停在碗底的部分了。mu一般取值:0.5,0.9,0.99
Momentum UpdateNesterov Momentum
在理论上对于凸函数它能得到更好的收敛,在实践中也确实比标准的Momentum表现更好一些。
区别:既然我们知道动量将会把我们带到绿色箭头指向的点,我们就不要在原点(红色点)那里计算梯度了。使用Nesterov动量,我们就在这个“向前看”的地方计算梯度。
Nesterov NesterovAdaGrad Update
根据梯度的大小,对于Learning rate 进行调整。
AdaGrad如下图,水平方向的梯度较小,垂直方向的梯度较大,所以水平方向,我们更新梯度时,给它一个较高的Learning rate,让它快速接近目标,而垂直方向梯度较大,给它一个较小的Learning rate,这是我们对于不同梯度方向的补偿措施。(实际应用中,梯度较大的地方减慢速度,是比较好的策略)
AdaGradQ2: What happens to the step size over long time?
在计算过程中,grad_squared在不断变大(+一个数的平方),对于最后一步的更新而言,更新就会逐渐减小,最后衰减至0,最后完全停止学习。(凸问题中是OK的)
但是在神经网络中,我们希望它可以保持活力,持续变化,从而不断修正参数。所以就有了
RMSProp Update
RMSProp也是基于梯度的大小来对每个权重的学习率进行修改。但是和Adagrad不同,其更新不会让学习率单调变小。
decay_rate是一个超参数,常用的值是[0.9,0.99,0.999]。1e-7 是为了避免分子变为0, 1e-5 等都可以
RMSPropAdam
看起来像是RMSProp的动量版(既有动量的好处,也有更新尺度的自适应变化)。
区别在于:更新时,使用的不是梯度dx,而是平滑版的first_moment。
动量的作用:在使用Mini-batch进行梯度计算和更新时,会有很多噪音,相较于用每一步计算的梯度进行更新,在这里我们是用前面几个梯度的衰减和,稳定了梯度的方向。
first_moment是关于梯度的一阶表达式、second_moment是关于梯度的二阶表达式。推荐的参数值eps=1e-8, beta1=0.9, beta2=0.999
AdamBias Correction:在一开始的时候将first_moment, 和second尽快变大,就不会得到关于梯度一次矩阵和梯度二次矩阵的偏置估计,他们只会在开始的几步中对于first_moment, 和second产生影响。
Adam Full学习率衰减方法
常见的三种方法:按步递减、指数级衰减和1/t衰减
learning rate decay LR Decay参数的二阶优化方法
对比图优点:计算过程没有超参数、没有学习率。
缺点:计算(以及求逆)Hessian矩阵操作非常耗费时间和空间
Hessian has O(N^2) elements、Inverting takes O(N^3)、N = (Tens or Hundreds of) Millions
二阶优化BGFS相对而言比较流行,将空间复杂度控制在O(n^2)。
BGFS L-BFGSL-BFGS的应用劣势:需要对整个训练集进行计算,而整个训练集一般包含几百万的样本。
对于fulll batch,确定模型的训练而言,L-BFGS是可以做的很好的。但是和小批量随机梯度下降(mini-batch SGD)不同,让L-BFGS在小批量上运行起来是很需要技巧的。对于如何将L-BFGS在大规模数据、随机模式进行很好的训练,是一个研究热点。
在深度学习和卷积神经网络中,使用L-BFGS之类的二阶方法并不常见。
网友评论