AdaGrad, RMSProp, Adam的数学原理

222 阅读2分钟

1.AdamGrad(自适应梯度方法)

1. 算法过程

步长ϵ\epsilon

初始权重参数θ\theta

防止分母为0的微小量δ\delta

训练数据x,yx, y

while: 循环条件为真

  1. 计算梯度g=θL(f(x(i));θ),y(i))g= \nabla_\theta L(f(x^{(i))};\theta),y^{(i)})

  2. 计算r:=r+ggr:=r + g \odot g

  3. 计算Δθ=ϵδ+rg\Delta \theta =- \frac{\epsilon}{\delta + \sqrt r} g

  4. 更新θ:=θ+Δθ\theta := \theta + \Delta\theta

2. 算法解决什么问题

其中的rr项,是累加历史梯度的平方来逐步减小学习率,为什么我们需要减小学习率呢?虽然在训练初期较大的学习率有利于解决收敛速度慢,训练时间长的问题,但是在最小值附近可能因为学习率相对较大而导致震荡

3.缺点

累加历史平方梯度而不衰减,有概率在还没到损失最小值点学习率就趋近于0而无法更新

2.RMSProp(均方根反向传播)

1.算法过程

AdaGradAdaGrad 算法的改进

也就是更新rr的时候,增加衰减系数ρ\rho(全局参数)r:=ρr+(1ρ)ggr := \rho r + (1 - \rho)g \odot g

步长ϵ\epsilon, 衰减参数ρ\rho

初始权重参数θ\theta

防止分母为0的微小量δ\delta

训练数据x,yx, y

while: 循环条件为真

  1. 计算梯度g=θL(f(x(i));θ),y(i))g= \nabla_\theta L(f(x^{(i))};\theta),y^{(i)})

  2. 计算r:=ρr+(1ρ)ggr := \rho r + (1 - \rho)g \odot g

  3. 计算Δθ=ϵδ+rg\Delta \theta =- \frac{\epsilon}{\delta + \sqrt r} g

  4. 更新θ:=θ+Δθ\theta := \theta + \Delta\theta

2. 算法解决什么问题

一定程度上解决了AdaGradAdaGrad 算法的震荡问题和学习率趋近0的速度适应问题

3. 算法存在的问题

后期仍然可能存在小范围震荡

3.Adam 算法

RMSPropRMSProp 的基础之上引入了动量

1.算法过程

步长ϵ,\epsilon, 衰减参数ρ1ρ2 \rho_1, \rho_2

初始权重参数θ\theta

防止分母为0的微小量δ\delta

训练数据x,yx, y

while: 循环条件为真

  1. 计算梯度g=θL(f(x(i));θ),y(i))g= \nabla_\theta L(f(x^{(i))};\theta),y^{(i)})
  2. 计算累计动量m:=ρ1m+(1ρ1)gm:=\rho_1m + (1-\rho_1)g
  3. 计算累计梯度平方r:=ρ2r+(1ρ2)ggr := \rho_2 r + (1 - \rho_2)g \odot g
  4. 修正 s^:=s1ρ1\hat s := \frac{s}{1 - \rho_1}
  5. 修正r^:=r1ρ2\hat r := \frac{r}{1 - \rho_2}
  6. 计算Δθ=ϵs^δ+r^\Delta \theta = -\frac{\epsilon \hat s}{\delta +\sqrt{ \hat r} }
  7. 更新θ=θ+Δθ\theta = \theta + \Delta \theta
2. 算法解决什么问题

一定程度上解决了震荡现象和局部最小值问题。

目标函数的表面呈现非常陡峭和平坦区域交替出现的情况时,梯度下降容易在这些区域之间来回摆动,叫做震荡

局部最小值是在动量充足的时候,遇到局部最小值可以像铁球一样利用剩余动量冲过

3. 存在的问题

暂未实验,暂且不补充