深度学习优化器

深度学习优化器

标签(空格分隔): 深度学习理论基础


  • 深度学习优化器
    • 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=λvt1+ηθ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 ) ) 为当前迭代的梯度, vt1 v t − 1 为之前的动量(Moment)用来记录之前迭代每个方向的梯度的,为了后面的二阶矩做对应,可以叫做一阶动量。通过添加衰减因子到历史更新向量,并且加上当前更新向量。这样做有两个结果。
1. 当梯度方向保持相同时,一阶加权动量加速参数更新;
2. 当梯度方向改变时,一阶加权动量能降低梯度的更新速度,换句话说,可以记忆历史梯度的更新。

存在的问题:
(1)不具备先知的能力,例如快要到达上坡了,就知道要提前减速,因为,只有历史的梯度。
(2)总的来说,Moment和SGD也好,每个权值学习率都是一样,但是实际上,有些权值比较重要而有的权值不那么重要。

NAG(Nesterov accelerated gradient)

根据SGD-Moment的不足,我们希望能够对未来也有一定的预知能力,换句话说,预知梯度的方向,以至于当它再一次遇到斜坡的时候会减慢速度。我可以通过计算来估计下一个参数的位置

vt=λvt1+ηθJ(θλvt1;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(θλvt1;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]t1+(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=β1mt1+(1β1)gtvt=β2vt1+(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

你可能感兴趣的:(深度学习与计算机视觉)