Momentum动量法
各类梯度下降算法的演化
结论
1.动量方法主要是为了解决Hessian矩阵病态条件问题(直观上讲就是梯度高度敏感于参数空间的某些方向)的。
2.加速学习
3.一般将参数设为0.5,0.9,或者0.99,分别表示最大速度2倍,10倍,100倍于SGD的算法。
4.通过速度v,来积累了之间梯度指数级衰减的平均,并且继续延该方向移动:
v←αv−ϵg
算法
动量算法直观效果解释
如图所示,红色为SGD+Momentum。黑色为SGD。可以看到黑色为典型Hessian矩阵病态的情况,相当于大幅度的徘徊着向最低点前进。
而由于动量积攒了历史的梯度,如点P前一刻的梯度与当前的梯度方向几乎相反。因此原本在P点原本要大幅徘徊的梯度,主要受到前一时刻的影响,而导致在当前时刻的梯度幅度减小。
直观上讲就是,要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。
从另一个角度讲:
要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。
假设每个时刻的梯度g总是类似,那么由v←αv−ϵg我们可以直观的看到每次的步长为:
1−αϵ∣∣g∣∣ 即当设为0.5,0.9,或者0.99,分别表示最大速度2倍,10倍,100倍于SGD的算法(注意,能这样算的前提是,假设g保持不变,多轮后v的值基本不再变化)。
现在证明每轮的梯度g保持不变时,多轮后v的值基本不再变化:
v0←0v1←αv0−ϵg=−ϵgv2←αv1−ϵg=−αϵg−ϵg=−ϵg(α+1)v3←αv2−ϵg=−αϵg(α+1)−ϵg=−ϵg(α2+α+1)v4←αv2−ϵg=−αϵg(α2+α+1)−ϵg=−ϵg(α3+α2+α+1)...vn←αvn−1−ϵg=−ϵg(αn−1+αn−2+...+α+1) 我们现在看下vn/vn−1:
vn−1vn=−ϵg(αn−2+αn−3+...+α+1)−ϵg(αn−1+αn−2+...+α+1)≈1 所以上述假设确实成立。
或者我们直接可以从vn/v1来看最大速度的倍数:
vn=−ϵg(αn−1+αn−2+...+α+1)=−ϵg(1−α1−αn)≈1−α−ϵg=1−αv1 即vn是v1的1/(1−α)倍。
参考资料
本文参考了此博客。