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

本文深入探讨了机器学习中各种优化器的工作原理,包括SGD、Momentum、AdaGrad、RMSProp和Adam等,详细解释了它们如何帮助模型找到损失函数的最小值,以及各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)\approx0L(θ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,动量v0=0v^0=0v0=0,则参数更新过程如下;

  1. 计算θ0\theta^0θ0当前的梯度为∇L(θ0)\nabla L(\theta^0)L(θ0)
  2. 动量v1=λv0−η∇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+v1\theta^1=\theta ^0 + v^1θ1=θ0+v1
  4. 重复步骤1~3

备注:viv^ivi其实是所有历史梯度的加权和

  • v0=0v^0=0v0=0
  • v1=−η∇L(θ0)v^1=-\eta \nabla L(\theta^0)v1=ηL(θ0)
  • v2=−λη∇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

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

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

AdaGrad算法是根据自变量在每个维度的梯度值的大小来自动调整各个维度上的学习率,从而避免使用同一学习率所带来的问题。计算公式如下:
θt=θt−1−η∑i=0i=t−1(gi)2+ϵgt \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η:学习率;
  • gig_igi:i 时刻的梯度;
  • θi\theta_iθi:i 时刻的参数值;
  • ϵ\epsilonϵ:一个很小的值,防止分母为0;
  • η∑i=0i=t−1(gi)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使用指数加权平均的方式计算衰减系数。对于参数wjw^jwj,其更新过程的数学公式如下:

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

其中:

  • η\etaη:初始学习率;
  • vtv_tvt:t时刻梯度的指数加权平均值;
  • gtg_tgt:t时刻wjw^jwj的梯度;

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

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

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

3.5 Adam

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

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

其中:

  • η\etaη:初始学习率 ;
  • vtv_tvt:t时刻的动量;
  • sts_tst:t时刻的指数加权平均衰减系数;
  • gtg_tgt:t时刻wjw^jwj的梯度;
  • β1\beta _1β1β2\beta _2β2:超参数;

Adam的优点:

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

4. 总结

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

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值