分类选择: 产品分类一 产品分类二 产品分类三 产品分类四 产品分类五
深度学习笔记-14.各种优化器Optimizer的总结与比较
作者:佚名    所属栏目:【产品分类二】    时间:2024-04-15

转载自:机器学习:各种优化器Optimizer的总结与比较,我觉得单纯的看印象可能不太深,所以采用边看边手动记录一遍的方式以加深印象!里面的公式自己又手动敲了一遍。

目录

一、优化器的作用:

二、各种优化器介绍

2.1 梯度下降法(Gradient Descent)

2.1.1?标准梯度下降法(GD)

2.1.2.?批量梯度下降法(BGD)

2.1.3?随机梯度下降法(SGD)

2.2 动量优化法

2.2.1?Momentum

2.2.2 NAG

2.3 自适应学习率优化算法

2.3.1 AdaGrad算法

2.3.2 RMSProp算法

2.3.3? AdaDelta算法

2.3.4? Adam算法

三、各种优化器的比较

3.1?可视化比较

四、优化器的选择

?

用来计算更新影响模型训练模型输出网络参数,使其逼近或达到最优值,从而最小化(或最大化)代价函数。

在深度学习中,可通过优化代价函数J来训练神经网络。代价函数为:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?J(W,b)=\sum_{i=1}^{m}L(y^{'i},y^i)

代价函数J的值是预测值y '与实际值y之间损失L的均值。利用网络的权值W和偏置b,在正向传播过程中得到y '值。通过优化算法更新可训练参数W和b的值,从而使代价函数J的值最小化。

梯度下降法是最基本的一类优化器,目前主要分为三种梯度下降法:

2.1.1?标准梯度下降法(GD)

假设要学习训练的模型参数为W,代价函数为J(W),则代价函数关于模型参数的偏导数即相关梯度为ΔJ(W),学习率为\eta _t,则使用梯度下降法更新参数为:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?W_{t+1}=W_{t}-\eta _{t}\Delta J(W_{t})? ? ? ? ? ? ? (W_{t}表示t时刻的模型参数)
从表达式来看,模型参数的更新调整,与代价函数中关于模型参数的梯度有关,即沿着梯度的方向不断减小模型参数,从而最小化代价函数。基本策略可以理解为”在有限视距内寻找最快路径下山“,因此每走一步,参考当前位置最陡的方向(即梯度)进而迈出下一步。可以形象的表示为:

标准梯度下降法主要有两个缺点:

  1. 训练速度慢:每走一步都要要计算调整下一步的方向,下山的速度变慢。在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本。会使得训练过程极其缓慢,需要花费很长时间才能得到收敛解。
  2. 容易陷入局部最优解:由于是在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。所谓的局部最优解就是鞍点。落入鞍点,梯度为0,使得模型参数不在继续更新。
    ?

2.1.2.?批量梯度下降法(BGD)

假设批量训练样本总数为n,每次输入和输出的样本分别为X^{(i)},Y^{(i)},模型参数为W,代价函数为J(W),每输入一个样本i代价函数关于W的梯度为\Delta J_{i}(W_{t},X^{i},Y^{i}),学习率为\eta _{t},则使用批量梯度下降法更新参数表达式为:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? W_{t+1}=W_{t}-\eta _{t}\sum_{i=1}^{n}\Delta J_{i}(W_{t},X^{(i)},Y^{(i)})? (?W_{t}表示t时刻的模型参数。)
从表达式来看,模型参数的调整更新与全部输入样本的代价函数的和(即批量/全局误差)有关。即每次权值调整发生在批量样本输入之后,而不是每输入一个样本就更新一次模型参数。这样就会大大加快训练速度。基本策略可以理解为“在下山之前掌握了附近的地势情况,选择总体平均梯度最小的方向下山”。
批量梯度下降法优缺点:

批量梯度下降法比标准梯度下降法训练时间短,且每次下降的方向都很正确。

2.1.3?随机梯度下降法(SGD)

对比批量梯度下降法,假设从一批训练样本n中随机选取一个样本i_{s}。模型参数为W,代价函数为J(w),梯度为\Delta J(W),学习率为\eta _{t},则使用随机梯度下降法更新参数表达式为:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?W_{t+1}=W_{t}-\eta _{t}g_{t}
其中,g_{t}=\Delta J_{i_{s}}(W_{t};X^{i_{s}};Y^{i_{s}}),? i_{s}\epsilon \left \{ 1,2,...,n \right \}表示随机选择的一个梯度方向W_{t}表示t时刻的模型参数。E(g_{t})=\Delta J(W_{t}),这里虽然引入了随机性和噪声,但期望仍然等于正确的梯度下降。
基本策略可以理解为随机梯度下降像是一个盲人下山,不用每走一步计算一次梯度,但是他总能下到山底,只不过过程会显得扭扭曲曲。

随机梯度下降法优缺点:

动量优化方法是在梯度下降法的基础上进行的改变,具有加速梯度下降的作用。一般有标准动量优化方法Momentum、NAG(Nesterov accelerated gradient)动量优化方法。

 

2.2.1?Momentum

使用动量(Momentum)的随机梯度下降法(SGD),主要思想是引入一个积攒历史梯度信息动量来加速SGD
从训练集中取一个大小为n的小批量\left \{X ^{(1)},X ^{(2)},...,X ^{(n)} \right \}样本,对应的真实值分别为Y^{(i)},则Momentum优化表达式为:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \left\{\begin{matrix} v_{t}=\alpha v_{t-1}+\eta _{t}\Delta J(W_{t};X^{i_{s}};Y^{i_{s}}) \\\\ W_{t+1}=W_{t}-v_{t} \end{matrix}\right.
其中,v_{t}表示t时刻积攒的加速度。α表示动力的大小,一般取值为0.9(表示最大速度10倍于SGD)。其中,g_{t}=\Delta J_{i_{s}}(W_{t};X^{i_{s}};Y^{i_{s}}),? i_{s}\epsilon \left \{ 1,2,...,n \right \}表示随机选择的一个梯度方向W_{t}表示t时刻模型参数。
动量主要解决SGD的两个问题:

理解策略为:由于当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球向下滚动的速度。

2.2.2 NAG

牛顿加速梯度(NAG, Nesterov accelerated gradient)算法,是Momentum动量算法的变种。更新模型参数表达式如下:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \left\{\begin{matrix} v_{t}=\alpha v_{t-1}+\eta _{t}\Delta J(W_{t}-\alpha v_{t-1}) \\\\ W_{t+1}=W_{t}-v_{t} \end{matrix}\right.

其中,v_{t}表示t时刻积攒的加速度,α表示动力的大小,一般取值为0.9(表示最大速度10倍于SGD),W_{t}表示t时刻模型参数,\Delta J(W_{t}-\alpha v_{t-1})表示代价函数关于W_{t}的梯度

Nesterov动量梯度的计算在模型参数施加当前速度之后,因此可以理解为往标准动量中添加了一个校正因子
理解策略:在Momentun中小球会盲目地跟从下坡的梯度,容易发生错误。所以需要一个更聪明的小球,能提前知道它要去哪里,还要知道走到坡底的时候速度慢下来而不是又冲上另一个坡。计算W_t-\alpha v_{t-1}可以表示小球下一个位置大概在哪里。从而可以提前知道下一个位置的梯度,然后使用到当前位置来更新参数。
在凸批量梯度的情况下,Nesterov动量将额外误差收敛率从O(1/k)(k步后)改进到O(1/k^{2})。然而,在随机梯度情况下,Nesterov动量对收敛率的作用却不是很大。

自适应学习率优化算法针对于机器学习模型的学习率,传统的优化算法要么将学习率设置为常数要么根据训练次数调节学习率。极大忽视了学习率其他变化的可能性。然而,学习率对模型的性能有着显著的影响,因此需要采取一些策略来想办法更新学习率,从而提高训练速度。?
目前的自适应学习率优化算法主要有:AdaGrad算法,RMSProp算法,Adam算法以及AdaDelta算法。

2.3.1 AdaGrad算法

AdaGrad算法,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平均值总和的平方根。具有代价函数最大梯度的参数相应地有个快速下降的学习率,而具有小梯度的参数在学习率上有相对较小的下降。

AdaGrad算法优化策略一般可以表示为:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? W_{t+1}=W_{t}-\frac{\eta _{0}}{\sqrt{\sum_{t^{'}=1}^{t}(g_{t^{'}})}+\varepsilon }\bigodot g_{t,i}

假定一个多分类问题,i表示第i个分类,t表示第t次迭代同时也表示分类i累计出现的次数。\eta _{0}表示初始的学习率取值一般为0.01,?是一个取值很小的数(一般为1e-8)为了避免分母为0。W_{t}表示t时刻即第tt迭代模型的参数,g_{t,i}=\Delta J(W_{t,i})表示t时刻,指定分类i,代价函数J(\cdot )关于W的梯度。
从表达式可以看出,对出现比较多的类别数据,AdaGrad给予越来越小的学习率,而对于比较少的类别数据,会给予较大的学习率。因此AdaGrad适用于数据稀疏或者分布不平衡的数据集
AdaGrad 的主要优势在于不需要人为的调节学习率,它可以自动调节;缺点在于,随着迭代次数增多,学习率会越来越小,最终会趋近于0。

2.3.2 RMSProp算法

RMSProp算法修改了AdaGrad的梯度积累为指数加权的移动平均,使得其在非凸设定下效果更好。

RMSProp算法的一般策略可以表示为:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\left\{\begin{matrix} E[g^{2}]_t=\alpha E[g^2]_{t-1}+(1-\alpha )g_{t}^{2} \\ \\W_{t+1}=W_t-\frac{\eta _{0}}{\sqrt{?{E[g^2]}_t+\epsilon }}\bigodot g_t \end{matrix}\right.

其中,W_t表示t时刻即第t次迭代模型的参数,g_{t}=\Delta J(W_t)表示t次迭代代价函数关于W的梯度大小,E[g^2]_t表示前t次的梯度平方的均值。α表示动力(通常设置为0.9),\eta _0表示全局初始学习率。?是一个取值很小的数(一般为1e-8)为了避免分母为0。
RMSProp借鉴了Adagrad的思想,观察表达式,分母为\sqrt{?{E[g^2]}_t+\epsilon}由于取了个加权平均避免了学习率越来越低的的问题而且能自适应地调节学习率。RMSProp算法在经验上已经被证明是一种有效且实用的深度神经网络优化算法。目前它是深度学习从业者经常采用的优化方法之一。

2.3.3? AdaDelta算法

AdaGrad算法和RMSProp算法都需要指定全局学习率,AdaDelta算法结合两种算法每次参数的更新步长即:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \Delta W_{AdaGrad,t}=-\frac{\eta _{0}}{\sqrt{\sum_{t^{'}=1}^{t}(g_{t^{'}})}+\varepsilon }\bigodot g_{t}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\Delta W_{RMSRrop,t}=-\frac{\eta _{0}}{\sqrt{?{E[g^2]}_t+\epsilon }}\bigodot g_t

AdaDelta算法策略可以表示为:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \left\{\begin{matrix} E[g^{2}]_t=\alpha E[g^2]_{t-1}+(1-\alpha )g_{t}^{2} \\\\ \Delta W_t=-\frac{\sqrt{\sum_{i=1}^{t-1}\Delta W_i}}{\sqrt{E[g^2]_t+\epsilon }} \\ \\W_{t+1}=W_t+\Delta W_t \end{matrix}\right.

其中W_t为第t次迭代的模型参数,g_{t}=\Delta J(W_t)为代价函数关于W的梯度。E[g^2]_t表示前t次的梯度平方的均值。\sqrt{\sum_{i=1}^{t-1}\Delta W_i}表示前t?1次模型参数每次的更新步长累加求根
从表达式可以看出,AdaDelta不需要设置一个默认的全局学习率【AdaDelta公式中没有出现\eta _0,但是AdaGrad算法和RMSProp更新步长中有学习率参数】

评价:

2.3.4? Adam算法

首先,Adam中动量直接并入了梯度一阶矩(指数加权)的估计。其次,相比于缺少修正因子导致二阶矩估计可能在训练初期具有很高偏置的RMSProp,Adam包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩估计。

Adam算法策略可以表示为:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \left\{\begin{matrix} m_t=\beta _1m_{t-1}+(1-\beta _1)g_t \\\\ v_t=\beta _2v_{t-1}+(1-\beta _2)g_{t}^{2} \\\\ \hat{m_t}=\frac{m_t}{1-\beta _{1}^{t}},\hat{v_t}=\frac{v_t}{1-\beta _{2}^{t}} \\\\ W_{t+1}=W_t-\frac{\eta }{\sqrt{\hat{v_t}}+\varepsilon }\hat{m_t} \end{matrix}\right.

其中,m_tv_t分别为一阶动量项和二阶动量项\beta _1,\beta _2为动力值大小通常分别取0.9和0.999\hat{m_t},\hat{v_t}分别为各自的修正值。W_t表示t时刻即第t次迭代模型的参数,g_{t}=\Delta J(W_t)为代价函数关于W的梯度;?是一个取值很小的数(一般为1e-8)为了避免分母为0。

评价:Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。

?

终于结束的漫长的理论分析,下面对各种优化器做一些有趣的比较。

(1) 示例一

上图描述了在一个曲面上,6种优化器的表现,从中可以大致看出:

(2) 示例二

上图在一个存在鞍点的曲面,比较6中优化器的性能表现,从图中大致可以看出:

(3) 示例三

上图比较了6种优化器收敛到目标点(五角星)的运行过程,从图中可以大致看出:

① 在运行速度方面

② 在收敛轨迹方面

那种优化器最好?该选择哪种优化算法?目前还没能够达达成共识。Schaul et al (2014)展示了许多优化算法在大量学习任务上极具价值的比较。虽然结果表明,具有自适应学习率的优化器表现的很鲁棒,不分伯仲,但是没有哪种算法能够脱颖而出。
目前,最流行并且使用很高的优化器(算法)包括SGD、具有动量的SGD、RMSprop、具有动量的RMSProp、AdaDelta和Adam。在实际应用中,选择哪种优化器应结合具体问题;同时,也优化器的选择也取决于使用者对优化器的熟悉程度(比如参数的调节等等)。

Tensorflow中封装了一系列的优化器:

 

网站首页 关于我们 耀世动态 耀世注册 耀世登录 联系我们

电话:400-123-4567      手机:13800000000
E-mail:admin@youweb.com      联系人:张生
地址:广东省广州市天河区88号

Copyright © 2012-2018 耀世娱乐-耀世注册登录官方入口 版权所有      琼ICP备xxxxxxxx号

扫一扫  关注微信

平台注册入口