深度学习优化器
标签(空格分隔): 深度学习理论基础
- 深度学习优化器
- Mini-batch-SGD
- SGD-Moment
- NAG(Nesterov accelerated gradient)
- Adagrad
- RMSpro
- Adam
Mini-batch-SGD
深度学习最常见的优化器批量梯度下降法迭代公式如下:
θ=θ−η∇θJ(θ;x(i:i+n),y(i:i+n)) θ = θ − η ∇ θ J ( θ ; x ( i : i + n ) , y ( i : i + n ) )
存在的问题:由于更新比较频繁,会找出损失函数变换严重震荡,最终可能停留的鞍点或者局部最小点
SGD-Moment
其目的是为了加快SGD的收敛速度,同时降低SGD算法收敛时的震荡
vt=λvt−1+η∇θJ(θ;x(i:i+n),y(i:i+n))θ=θ−vt v t = λ v t − 1 + η ∇ θ J ( θ ; x ( i : i + n ) , y ( i : i + n ) ) θ = θ − v t
∇θJ(θ;x(i:i+n),y(i:i+n)) ∇ θ J ( θ ; x ( i : i + n ) , y ( i : i + n ) ) 为当前迭代的梯度, vt−1 v t − 1 为之前的动量(Moment)用来记录之前迭代每个方向的梯度的,为了后面的二阶矩做对应,可以叫做一阶动量。通过添加衰减因子到历史更新向量,并且加上当前更新向量。这样做有两个结果。
1. 当梯度方向保持相同时,一阶加权动量加速参数更新;
2. 当梯度方向改变时,一阶加权动量能降低梯度的更新速度,换句话说,可以记忆历史梯度的更新。
存在的问题:
(1)不具备先知的能力,例如快要到达上坡了,就知道要提前减速,因为,只有历史的梯度。
(2)总的来说,Moment和SGD也好,每个权值学习率都是一样,但是实际上,有些权值比较重要而有的权值不那么重要。
NAG(Nesterov accelerated gradient)
根据SGD-Moment的不足,我们希望能够对未来也有一定的预知能力,换句话说,预知梯度的方向,以至于当它再一次遇到斜坡的时候会减慢速度。我可以通过计算来估计下一个参数的位置
vt=λvt−1+η∇θJ(θ−λvt−1;x(i:i+n),y(i:i+n))θ=θ−vt v t = λ v t − 1 + η ∇ θ J ( θ − λ v t − 1 ; x ( i : i + n ) , y ( i : i + n ) ) θ = θ − v t
∇θJ(θ−λvt−1;x(i:i+n),y(i:i+n)) ∇ θ J ( θ − λ v t − 1 ; x ( i : i + n ) , y ( i : i + n ) ) 预测的是未来的梯度方向,然后结合历史梯度方向
存在的问题,NAG只是解决了预测未来梯度的事情!但是每个权重的重要性并没有体现出来,也就是说,每个权重的学习率是自适应的。
Adagrad
Adagrad优化算法是一种自适应的优化算法,对于高频特征更新的步长较小,而对于低频的特征更新步长较大
gt,i=∇θJ(θt,i;x(i:i+n),y(i:i+n))Gt,i=∑τ=1tg2τ,iθt+1=θt−ηGt+ε√⊙gt g t , i = ∇ θ J ( θ t , i ; x ( i : i + n ) , y ( i : i + n ) ) G t , i = ∑ τ = 1 t g τ , i 2 θ t + 1 = θ t − η G t + ε ⊙ g t
如此以来,每个参量的实际学习率取决于历史梯度和当前梯度!
存在的问题,由于分母梯度平方的累加和,当迭代次数的逐渐增多,学习率将变得无限小。
RMSpro
RMSpro,它主要解决Adagrad算法单调递减的学习率问题。通过约束历史梯度累加来替代累加所有历史梯度平法,这里添加衰减因子,并通过迭代的方式计算当前当前的梯度。也就是说,历史越久的梯度对当前的影响比较小,历史越近的梯度对当前的影响较大。换句话说,RMSpro采用是设置了二阶动量的方式
E[g2]t=λE[g2]t−1+(1−λ)g2tθt+1=θt−ηE[g2]t+ε√⊙gt E [ g 2 ] t = λ E [ g 2 ] t − 1 + ( 1 − λ ) g t 2 θ t + 1 = θ t − η E [ g 2 ] t + ε ⊙ g t
Adam
Adam = Adaptive + Momentum,,即,Adam集成了SGD-Momentum的一阶动量(一阶矩,均值)和RMSpro的二阶动量(二阶矩,方差),同时通过偏差进行校正
mt=β1mt−1+(1−β1)gtvt=β2vt−1+(1−β2)g2tm^t=mt1−βt1v^t=vt1−βt2θt+1=θt−ηv^t+ε√m^t m t = β 1 m t − 1 + ( 1 − β 1 ) g t v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 m ^ t = m t 1 − β 1 t v ^ t = v t 1 − β 2 t θ t + 1 = θ t − η v ^ t + ε m ^ t