SGD,Adam,momentum等优化算法比较 您所在的位置:网站首页 adam与sgd优化 SGD,Adam,momentum等优化算法比较

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

2023-09-03 01:06| 来源: 网络整理| 查看: 265

文章目录 SGD,Adam,momentum等优化算法总结 一、最基本的优化算法 1.SGD 2.Momentum 二、自适应参数的优化算法 1.Adagrad 2.RMSprop 3.Adam 三、二阶近似的优化算法 5.牛顿法及拟牛顿法

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]}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有