1.AdamGrad(自适应梯度方法)
1. 算法过程
步长ϵ
初始权重参数θ
防止分母为0的微小量δ
训练数据x,y
while: 循环条件为真
-
计算梯度g=∇θL(f(x(i));θ),y(i))
-
计算r:=r+g⊙g
-
计算Δθ=−δ+rϵg
-
更新θ:=θ+Δθ
2. 算法解决什么问题
其中的r项,是累加历史梯度的平方来逐步减小学习率,为什么我们需要减小学习率呢?虽然在训练初期较大的学习率有利于解决收敛速度慢,训练时间长的问题,但是在最小值附近可能因为学习率相对较大而导致震荡
3.缺点
累加历史平方梯度而不衰减,有概率在还没到损失最小值点学习率就趋近于0而无法更新
2.RMSProp(均方根反向传播)
1.算法过程
是AdaGrad 算法的改进
也就是更新r的时候,增加衰减系数ρ(全局参数)r:=ρr+(1−ρ)g⊙g
步长ϵ, 衰减参数ρ
初始权重参数θ
防止分母为0的微小量δ
训练数据x,y
while: 循环条件为真
-
计算梯度g=∇θL(f(x(i));θ),y(i))
-
计算r:=ρr+(1−ρ)g⊙g
-
计算Δθ=−δ+rϵg
-
更新θ:=θ+Δθ
2. 算法解决什么问题
一定程度上解决了AdaGrad 算法的震荡问题和学习率趋近0的速度适应问题
3. 算法存在的问题
后期仍然可能存在小范围震荡
3.Adam 算法
在RMSProp 的基础之上引入了动量
1.算法过程
步长ϵ, 衰减参数ρ1,ρ2
初始权重参数θ
防止分母为0的微小量δ
训练数据x,y
while: 循环条件为真
- 计算梯度g=∇θL(f(x(i));θ),y(i))
- 计算累计动量m:=ρ1m+(1−ρ1)g
- 计算累计梯度平方r:=ρ2r+(1−ρ2)g⊙g
- 修正 s^:=1−ρ1s
- 修正r^:=1−ρ2r
- 计算Δθ=−δ+r^ϵs^
- 更新θ=θ+Δθ
2. 算法解决什么问题
一定程度上解决了震荡现象和局部最小值问题。
目标函数的表面呈现非常陡峭和平坦区域交替出现的情况时,梯度下降容易在这些区域之间来回摆动,叫做震荡
局部最小值是在动量充足的时候,遇到局部最小值可以像铁球一样利用剩余动量冲过
3. 存在的问题
暂未实验,暂且不补充