【深度学习理论】炼丹术——聊聊Optimization

1. 前言

机器学习的本质是在一个function set中选择最优的function: f ∗ f^* f(又被称为model)。其中,挑选最优function的过程被转换为求损失函数的最小值问题,损失函数可能的图像如下图所示(在实际问题中损失函数的图像会复杂的多的多的多的多)。

在这里插入图片描述
寻找最优function的过程如下图所示,其中黑线表示可能存在的寻找路径。
在这里插入图片描述

2. 问题

假设当前问题的损失函数(loss function)图像如下图所示,因loss function是通过梯度进行参数更新,故当损失函数在更新过程中遇到梯度0的点的时候会停止更新。
在这里插入图片描述
在一个函数中,有三类点的梯度可能为0

  1. Global Minima:全局最小值点;
  2. Local Minima:局部最小值点;
  3. Saddle Point:鞍点;

其中Global Minima是我们要找的最优解,Local Minima是次优解,Saddle Point是错误解。

备注:在实际应用中遇到Saddle Point的概率要远远大于遇到Local Minima的概率;

3. Optimizer

3.1 SGD

Stochastic Gradient Descent,又被称为随机梯度下降,运算过程如下图所示:
在这里插入图片描述
假设当前点为 θ 0 \theta^0 θ0,其中 η \eta η为学习率,则参数更新过程如下:

  1. 计算 θ 0 \theta^0 θ0处的梯度 ∇ L ( θ 0 ) \nabla L(\theta^0) L(θ0)
  2. 沿 θ 0 \theta^0 θ0梯度相反的方向更新参数到 θ 1 \theta^1 θ1 θ 1 = θ 0 − η ∇ L ( θ 0 ) \theta^1=\theta^0-\eta \nabla L(\theta^0) θ1=θ0ηL(θ0)
  3. 重复步骤1和步骤2,直到 ∇ L ( θ t ) ≈ 0 \nabla L(\theta^t)\approx0 L(θt)0

SGD的缺点:

  1. 会“卡”在local minimasaddle point
  2. 在实践中当梯度很小的时候(如:0.0000001)时会停止更新参数(如下图中的点A),如果此时停止更新参数,则模型的效果会很差(欠拟合状态)。此外,在A点附近(梯度比较平缓的区域)参数更新速度很慢;
  3. 不稳定,容易受到噪音点的影响;
    在这里插入图片描述

3.2 Momentum

又称为动量法,该算法是将物理学中的“动量”概念引入到算法中。常用的算法是:SGDM(Stochastic Gradient Descent with Momentum),其运算过程如下:
在这里插入图片描述
假设当前点为: θ 0 \theta^0 θ0,动量 v 0 = 0 v^0=0 v0=0,则参数更新过程如下;

  1. 计算 θ 0 \theta^0 θ0当前的梯度为 ∇ L ( θ 0 ) \nabla L(\theta^0) L(θ0)
  2. 动量 v 1 = λ v 0 − η ∇ L ( θ 0 ) v^1=\lambda v^0-\eta \nabla L(\theta^0) v1=λv0ηL(θ0) λ \lambda λ是动量超参数0 ≤ λ \lambda λ < 1,如果 λ = 0 \lambda=0 λ=0则算法为SGD
  3. 更新参数到 θ 1 \theta^1 θ1 θ 1 = θ 0 + v 1 \theta^1=\theta ^0 + v^1 θ1=θ0+v1
  4. 重复步骤1~3

备注: v i v^i vi其实是所有历史梯度的加权和

  • v 0 = 0 v^0=0 v0=0
  • v 1 = − η ∇ L ( θ 0 ) v^1=-\eta \nabla L(\theta^0) v1=ηL(θ0)
  • v 2 = − λ η ∇ L ( θ 0 ) − η ∇ L ( θ 1 ) v^2=-\lambda \eta \nabla L(\theta^0)-\eta \nabla L(\theta^1) v2=ληL(θ0)ηL(θ1)

SGDM的效果图如下所示:
在这里插入图片描述
SGDM相较于SGD的优点:

  1. 可以解决saddle point问题;
  2. 有一定几率可以跨过local minima
  3. 在梯度平缓的区域更新速度相较于SGD速度更快,可以帮助参数快速朝着极小值方向探索;
  4. 在一定程度上使参数的更新方向更加一致,避免了发散;

3.3 AdaGrad

在以上算法中,所有的参数更新都使用相同的学习率。但是不同的参数在各个维度上的“平缓”程度是有差异的。如下图所示,梯度在 w 1 w_1 w1方向上比较平缓(变化比较慢),在 w 2 w_2 w2方向上比较陡峭(变化比较快)。如果使用相同的学习率:

  1. 当学习率比较大时,因 w 2 w_2 w2方向上的变化比较大,故很容易跳过该方向上的最优解;
  2. 当学习率比较小时,因 w 1 w_1 w1方向上的变化比较平缓,故该方向上的更新速度比较慢,需要比较多的次数才能找到最优解;
    在这里插入图片描述

AdaGrad算法是根据自变量在每个维度的梯度值的大小来自动调整各个维度上的学习率,从而避免使用同一学习率所带来的问题。计算公式如下:
θ t = θ t − 1 − η ∑ i = 0 i = t − 1 ( g i ) 2 + ϵ g t \theta _t=\theta _{t-1}-\frac{\eta}{\sqrt{\sum_{i=0}^{i=t-1}(g_{i})^2+\epsilon}}g_{t} θt=θt1i=0i=t1(gi)2+ϵ ηgt
其中:

  • η \eta η:学习率;
  • g i g_i gi:i 时刻的梯度;
  • θ i \theta_i θi:i 时刻的参数值;
  • ϵ \epsilon ϵ:一个很小的值,防止分母为0;
  • η ∑ i = 0 i = t − 1 ( g i ) 2 + ϵ \frac{\eta}{\sqrt{\sum_{i=0}^{i=t-1}(g_{i})^2+\epsilon}} i=0i=t1(gi)2+ϵ η是一个只会递增的衰减系数;

由上个式子可知,历史所有梯度的元素的算术平方根作为学习率的分母,则:

  1. 如果参数在某个方向上的偏导数一直很大,则学习率会下降的快;
  2. 如果参数在某个方向上的偏导数一直很小,则学习率会下降的慢;

这就达到了各个维度方向上自动调整学习率的目的。

Adagrad的问题:

  1. 学习率一直下降(或者不变,因为衰减系数一直递增),如果在早期学习率比较大的情况下未找到最优解或者到达最优解附近的区域,则后续很难找到最优解;
  2. 无法适应学习率需要时大时小(因为学习率一直在下降,不会动态调整)的情况;

3.4 RMSProp

Adagrad算法的问题在于:衰减系数是历史梯度平方和的暴力累加,导致越训练模型的更新速度越慢。而RMSProp算法和Adagrad的不同就在于衰减系数的计算方式,RMSProp使用指数加权平均的方式计算衰减系数。对于参数 w j w^j wj,其更新过程的数学公式如下:

  1. v t = ρ v t − 1 + ( 1 − ρ ) ∗ g t 2 v_t=\rho v_{t-1}+(1-\rho)*g_{t}^2 vt=ρvt1+(1ρ)gt2
  2. Δ w t = − η v t + ϵ ∗ g t \Delta w_t=-\frac{\eta}{\sqrt{v_t+\epsilon}}*g_t Δwt=vt+ϵ ηgt
  3. w t + 1 = w t + Δ w t w_{t+1}=w_t+\Delta w_t wt+1=wt+Δwt

其中:

  • η \eta η:初始学习率;
  • v t v_t vt:t时刻梯度的指数加权平均值;
  • g t g_t gt:t时刻 w j w^j wj的梯度;

使用指数加权平均的方式计算衰减系数的精髓在于:

  1. 越靠近当前时刻的历史梯度对当前时刻参数更新的影响越大;
  2. 越远离当前时刻的历史梯度对当前时刻参数更新的影响越小;

RMSProp的优点:可以根据历史梯度动态的为每个参数设置不同的学习率;

3.5 Adam

Adam全称Adaptive Moment Optimization,是将SGDMRMSPROP两种算法结合起来。其对于任意一个参数 w j w^j wj,其更新过程的数学公式如下:

  1. v t = β 1 ∗ v t − 1 − ( 1 − β 1 ) ∗ g t v_t=\beta _1*v_{t-1}-(1-\beta _1)*g_t vt=β1vt1(1β1)gt
  2. s t = β 2 ∗ s t − 1 − ( 1 − β 2 ) ∗ g t 2 s_t=\beta _2 * s_{t-1}-(1-\beta _2)*g_t^2 st=β2st1(1β2)gt2
  3. Δ w t = − η v t s t + ϵ ∗ g t \Delta w_t=-\eta \frac{v_t}{\sqrt{s_t+\epsilon}}*g_t Δwt=ηst+ϵ vtgt
  4. w t + 1 = w t + Δ w t w_{t+1}=w_t + \Delta w_t wt+1=wt+Δwt

其中:

  • η \eta η:初始学习率 ;
  • v t v_t vt:t时刻的动量;
  • s t s_t st:t时刻的指数加权平均衰减系数;
  • g t g_t gt:t时刻 w j w^j wj的梯度;
  • β 1 \beta _1 β1 β 2 \beta _2 β2:超参数;

Adam的优点:

  1. SGDM算法的优点;
  2. RMSProp算法的优点;

4. 总结

目前在实践中常用的是AdamSGDM,有实践表明:Adam算法收敛速度更快、但是有较大的泛化误差且不稳定;SGDM算法有比较小的泛化误差、更稳定,但是需要较长的训练时间。此外,SGDMAdam算法有不同的适用领域,具体如下图所示:
在这里插入图片描述

最后,下面是其他的一些建议,haha…

在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值