SGD,Adam,momentum等优化算法比较

本文对比了优化算法SGD、Momentum、Adagrad、RMSprop和Adam。自适应学习率的算法如RMSprop和Adam在实际应用中表现出色,而二阶近似优化算法在训练深层神经网络时可能存在挑战。Momentum通过指数加权平均提高SGD的稳定性,而Adam结合了一阶和二阶矩估计,提供了稳定的学习率调整。
摘要由CSDN通过智能技术生成

SGD,Adam,momentum等优化算法总结

1.选择哪种优化算法并没有达成共识
2.具有自适应学习率(以RMSProp 和AdaDelta 为代表)的算法族表现得相当鲁棒,不分伯仲,但没有哪个算法能脱颖而出。
3.对于当前流行的优化算法包括括SGD、具动量的SGD、RMSProp、具动量的RMSProp、AdaDelta 和Adam而言,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)
4.基本不用二阶近似优化算法

一、最基本的优化算法

1.SGD

Batch Gradient Descent
Θ = Θ − α ⋅ ∇ Θ J ( Θ ) \Theta = \Theta - \alpha\cdot\nabla_\Theta J(\Theta) Θ=ΘαΘJ(Θ)
优点:
cost fuction若为凸函数,能够保证收敛到全局最优值;若为非凸函数,能够收敛到局部最优值

缺点:
由于每轮迭代都需要在整个数据集上计算一次,所以批量梯度下降可能非常慢
训练数较多时,需要较大内存
批量梯度下降不允许在线更新模型,例如新增实例。
Stochastic Gradient Descent
Θ = Θ − α ⋅ ∇ Θ J ( Θ ; x ( i ) , y ( i ) ) \Theta = \Theta - \alpha\cdot\nabla_\Theta J(\Theta;x^{(i)},y^{(i)}) Θ=ΘαΘJ(Θ;x(i),y(i))
优点:

算法收敛速度快(在Batch Gradient Descent算法中, 每轮会计算很多相似样本的梯度, 这部分是冗余的)
可以在线更新
有几率跳出一个比较差的局部最优而收敛到一个更好的局部最优甚至是全局最优

缺点:
容易收敛到局部最优,并且容易被困在鞍点

Mini-batch Gradient Descent
Θ = Θ − α ⋅ ∇ Θ J ( Θ ; x ( i : i + n ) , y ( i : i + n ) ) \Theta = \Theta - \alpha\cdot\nabla_\Theta J(\Theta;x^{(i:i+n)},y^{(i:i+n)}) Θ=ΘαΘJ(Θ;x(i:i+n),y(i:i+n))
上述三个方法面临的主要挑战如下:

选择适当的学习 α \alpha α较为困难。太小的学习率会导致收敛缓慢,而学习速度太块会造成较大波动,妨碍收敛。
目前可采用的方法是在训练过程中调整学习率大小,例如模拟退火算法:预先定义一个迭代次数m,每执行完m次训练便减小学习率,或者当cost function的值低于一个阈值时减小学习率。然而迭代次数和阈值必须事先定义,因此无法适应数据集的特点。
上述方法中, 每个参数的 learning rate 都是相同的,这种做法是不合理的:如果训练数据是稀疏的,并且不同特征的出现频率差异较大,那么比较合理的做法是对于出现频率低的特征设置较大的学习速率,对于出现频率较大的特征数据设置较小的学习速率。
近期的的研究表明,深层神经网络之所以比较难训练,并不是因为容易进入local minimum。相反,由于网络结构非常复杂,在绝大多数情况下即使是 local minimum 也可以得到非常好的结果。而之所以难训练是因为学习过程容易陷入到马鞍面中,即在坡面上,一部分点是上升的,一部分点是下降的。而这种情况比较容易出现在平坦区域,在这种区域中,所有方向的梯度值都几乎是 0。

2.Momentum

SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。
v d W [ l ] = β v d W [ l ] + ( 1 − β ) d W [ l ] W [ l ] = W [ l ] − α v d W [ l ] v_{dW^{[l]}} = \beta v_{dW^{[l]}} + (1-\beta)dW^{[l]}\\ W^{[l]} = W^{[l]} - \alpha v_{dW^{[l]}} vdW[l]=βvdW[l]+(1β)dW[l]W[l]=W[l]αvdW[l] v d b [ l ] = β v d b [ l ] + ( 1 − β ) d b [ l ] b [ l ] = b [ l ] − α v d b [ l ] v_{db^{[l]}} = \beta v_{db^{[l]}} + (1-\beta)db^{[l]}\\ b^{[l]} = b^{[l]} - \alpha v_{db^{[l]}} v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值