【机器学习】深度学习自适应学习率

【机器学习】深度学习自适应学习率

  • SGD
  • momentum动量
  • nesterov动量
  • Adamgrad
  • Rmsprop
  • Adam(adaptive moments)

动量算法旨在加速学习速率。自适应学习率是为了平衡不同参数的学习速率。

SGD

g = − ϵ f ′ ( θ k ) g=-\epsilon f'(\theta_k) g=ϵf(θk)
θ k + 1 ← θ k + g \theta_{k+1} \leftarrow \theta_k+g θk+1θk+g

momentum动量

g = α g − ϵ f ′ ( θ k ) g=\alpha g -\epsilon f'(\theta_k) g=αgϵf(θk)
θ k + 1 ← θ k + g \theta_{k+1} \leftarrow \theta_k+g θk+1θk+g
特点:相比于SGD,考虑了历史累计梯度。
优点:旨在加速学习,特别是高曲率、小但一致的梯度,或是带噪声的梯度。动量算法累积了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。
稳定时更新步长为 ϵ f ′ ( θ k ) 1 − α \frac{\epsilon f'(\theta_k)}{1-\alpha} 1αϵf(θk)

nesterov动量

g ← α g − ϵ f ′ ( θ k + α g ) g \leftarrow \alpha g - \epsilon f'(\theta_k+\alpha g) gαgϵf(θk+αg)
θ k + 1 ← θ k + g \theta_{k+1} \leftarrow \theta_k+g θk+1θk+g
特点:相比于momentum动量,在计算梯度之前先进行一次梯度更新
优点:在凸批量梯度的情况下,额外误差收敛速率从O(1/k)(k步后)改进到O(1/k^2),但是在随机梯度的情况下,没有改进收敛率。所以建议LR等模型在Batch-SGD时优先考虑nesterov动量

Adamgrad

g = − f ′ ( θ k ) g=-f'(\theta_k) g=f(θk)
r = r + g T g r = r+g^Tg r=r+gTg
θ k + 1 ← θ k + ϵ g / r \theta_{k+1} \leftarrow \theta_k+\epsilon g/\sqrt r θk+1θk+ϵg/r
偏导大的参数学习率下降较快,偏导小的参数学习率下降相对较慢
效果:在参数空间中更为平缓的倾斜方向会取地更大的进步

Rmsprop

Adamgrad的累计梯度容易使得学习率较早的趋于0,使得学习停滞。
g = − f ′ ( θ k ) g=-f'(\theta_k) g=f(θk)
r = α r + ( 1 − α ) g T g r = \alpha r+(1-\alpha)g^Tg r=αr+(1α)gTg
θ k + 1 ← θ k + ϵ g / r \theta_{k+1} \leftarrow \theta_k+\epsilon g/\sqrt r θk+1θk+ϵg/r
扩展:AdamDelta和Rmsprop只是自适应学习率修正项 r r r,故可以扩展到momentum动量和nesterov动量上。

Adam(adaptive moments)

移动平均估计一阶矩和二阶矩
修正一阶矩和二阶矩的偏差,还没有理解清楚其作用

你可能感兴趣的:(机器学习,深度学习,机器学习)