跳转到主要内容

小白学深度学习:参数优化与优化器原理

demi 提交于

<font color="#9a9a9a">来源:Coggle数据科学</font>

<hr>

<font size="3" style="line-height: 45px;" color="#c200ff"><strong>深度学习的「参数优化」</strong></font>

深度学习模型的优化过程是指调整模型的参数以尽量减小预测误差的过程。

下面是深度学习模型优化的基本流程:

<ul><li>确定损失函数:衡量模型预测输出和实际输出之间误差的函数。</li></ul>

<ul><li>梯度反向传播:用于计算每个参数对损失函数的贡献程度。</li></ul>

<font style="line-height: 40px;"><strong>▎深度学习需要多次尝试</strong></font>

在实际应用中,深度学习的优化过程是一个反复迭代的过程,需要不断地调整超参数和算法以达到最优的效果。

<ul><li>调节学习率:学习率是控制每次参数更新的步长大小的超参数,过大的学习率可能导致模型震荡不收敛,而过小的学习率可能导致模型收敛速度过慢。</li></ul>

<ul><li>正则化:正则化是通过对模型参数添加惩罚项来避免模型过拟合的方法。</li></ul>

<ul><li>验证集和早停法:通过将一部分数据作为验证集来评估模型的性能,当模型在验证集上的性能不再提升时,就停止训练以避免过拟合。</li></ul>

<font style="line-height: 40px;"><strong>▎深度学习不需要凸优化</strong></font>

凸优化是指在约束条件下,寻找一个凸函数的最小值的问题,其最优解是全局最优解。

在深度学习中,模型的参数数量通常非常庞大,很难找到全局最优解。深度学习模型的损失函数通常是非凸的,即存在多个局部最优解。因此,使用凸优化方法来优化深度学习模型并不是最优的选择。

<font style="line-height: 40px;"><strong>▎深度学习不需要最优解</strong></font>

由于深度学习模型的复杂性,通常不存在闭式解来求解最优参数,因此需要使用迭代算法进行优化。这些算法会在每次迭代中更新模型的参数,以逐步接近最优解。即使全局最优解存在,寻找它也可能非常困难,需要花费大量的时间和计算资源进行优化。

<hr>

<font size="3" style="line-height: 45px;" color="#c200ff"><strong>「优化器」原理</strong></font>

<strong>▎随机梯度下降法(Stochastic Gradient Descent,SGD)</strong>
随机梯度下降法是一种更快速的优化算法,它通过每次只使用一个样本来计算梯度,从而加速计算。由于每次只使用一个样本,SGD更新的方向会更加随机,可能会比梯度下降法(Gradient Descent,GD)更容易逃离局部最优解。

<strong>▎动量法(Momentum)</strong>
动量法是一种通过累加之前梯度的指数移动平均来加速梯度下降的算法。动量法可以有效地减少梯度下降的震荡,加速收敛速度,使得更新方向更加平滑。

<strong>▎自适应学习率方法(Adaptive Learning Rate Methods)</strong>
自适应学习率方法是一类根据历史梯度信息来自适应地调整学习率的算法。常见的自适应学习率方法包括Adagrad、Adadelta、RMSprop和Adam等。

<strong>▎权重衰减(Weight Decay)</strong>
权重衰减是一种正则化方法,通过向目标函数添加一个权重的L2范数惩罚项,来减少模型的过拟合问题。

<hr>

<font size="3" style="line-height: 45px;" color="#c200ff"><strong>「优化器」方法</strong></font>

<font style="line-height: 40px;"><strong>▎Adadelta</strong></font>

<a href="https://arxiv.org/abs/1212.5701"><font color="#5675cd">https://arxiv.org/abs/1212.5701</font></a&gt;

Adadelta是一种自适应学习率方法,是对Adagrad算法的改进。Adadelta可以适应变化的学习率,并且相对于Adagrad减少了学习率的快速下降。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

Adadelta的主要思想是不仅仅累积梯度的平方,而是累积一定数量的梯度平方的滑动平均和参数更新量的平方的滑动平均。

<ul><li>rho:累计梯度系数</li>
<li>weight_decay:权重衰减系数</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.Adadelta.html"><f… color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.Adadelta.html</fo…;

<font style="line-height: 40px;"><strong>▎Adagrad</strong></font>

<a href="http://jmlr.org/papers/v12/duchi11a.html"><font color="#5675cd">http://jmlr.org/papers/v12/duchi11a.html</font></a&gt;

Adagrad是一种自适应学习率方法,主要思想是根据梯度的历史信息,为不同的参数设置不同的学习率。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

Adagrad核心思想是,对于频繁出现的参数,缩小它们的学习率,对于不频繁出现的参数,增加它们的学习率。这样可以使得梯度较大的参数学习率变小,从而使得参数在更新时更加平稳。

<ul><li>lr_decay:学习率衰减稀疏</li>
<li>weight_decay:权重衰减系数</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.Adagrad.html"><fo… color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.Adagrad.html</fon…;

<font style="line-height: 40px;"><strong>▎Adam</strong></font>

<a href="https://arxiv.org/abs/1412.6980"><font color="#5675cd">https://arxiv.org/abs/1412.6980</font></a&gt;

Adam是一种自适应学习率优化算法,结合了Adagrad和RMSProp算法的优点,并加入了一些新的技巧。Adam算法可以有效地解决神经网络训练中的梯度消失和梯度爆炸问题,同时具有快速收敛和高效的计算效率。

Adam算法的主要思想是,对每个参数维护两个变量,分别为梯度的一阶矩估计(即梯度的平均值)和梯度的二阶矩估计(即梯度的平方的平均值),然后利用这些变量来调整学习率。

<ul><li>betas:梯度均值系数</li>
<li>weight_decay:权重衰减系数</li>
<li>amsgrad:是否使用</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.Adam.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.Adam.html</font><…;

<font style="line-height: 40px;"><strong>AdamW</strong></font>

<a href="https://arxiv.org/abs/1711.05101"><font color="#5675cd">https://arxiv.org/abs/1711.05101</font></a&gt;

AdamW是Adam算法的扩展,它通过加入权重衰减(weight decay)的方式来解决Adam算法的一些问题。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

Adam算法在更新参数时不考虑权重衰减,而AdamW算法在更新参数时同时考虑权重衰减和梯度更新,可以更好地控制权重的更新。

<ul><li>betas:梯度均值系数</li>
<li>weight_decay:权重衰减系数</li>
<li>amsgrad:是否使用</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.AdamW.html</font>…;

<font style="line-height: 40px;"><strong>Adamax</strong></font>

Adamax是Adam算法的扩展,主要是为了解决Adam算法在稀疏梯度情况下的精度。Adamax算法的优点是在处理稀疏梯度的情况下表现较好。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

<ul><li>betas:梯度均值系数</li>
<li>weight_decay:权重衰减系数</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.Adamax.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.Adamax.html</font…;

<font style="line-height: 40px;"><strong>ASGD</strong></font>

<a href="https://dl.acm.org/citation.cfm?id=131098"><font color="#5675cd">https://dl.acm.org/citation.cfm?id=131098</font></a&gt;

ASGD(Averaged Stochastic Gradient Descent)算法是一种随机梯度下降(SGD)的优化算法,它的主要思想是使用滑动平均来提高参数更新的稳定性和收敛速度。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

ASGD算法在每次迭代中计算当前时刻的梯度,然后将其与之前时刻到时刻的所有梯度进行平均,得到平均梯度。

<ul><li>lambd:衰减系数</li>
<li>alpha:学习率更新系数</li>
<li>weight_decay:权重衰减系数</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.ASGD.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.ASGD.html</font><…;

<font style="line-height: 40px;"><strong>LBFGS</strong></font>

<a href="https://www.cs.ubc.ca/~schmidtm/Software/minFunc.html"><font color="#5675cd">https://www.cs.ubc.ca/~schmidtm/Software/minFunc.html</font></a&gt;

L-BFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)算法是一种用于解决无约束优化问题的迭代算法。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

L-BFGS算法的主要思想是在每次迭代中,利用之前一定数量的历史梯度信息来估计当前梯度的逆矩阵。

<ul><li>max_iter:最大迭代次数</li>
<li>max_eval:最多评价次数</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.LBFGS.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.LBFGS.html</font>…;

<font style="line-height: 40px;"><strong>NAdam</strong></font>

<a href="https://openreview.net/forum?id=OM0jvwB8jIp57ZJjtNEZ"><font color="#5675cd">https://openreview.net/forum?id=OM0jvwB8jIp57ZJjtNEZ</font></a&gt;

NAdam(Nesterov-accelerated Adaptive Moment Estimation)是Adam算法的一个变种,其主要的改进在于使用了Nesterov动量。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

NAdam算法通过使用指数加权移动平均估计梯度的一阶矩和二阶矩,并使用Nesterov动量来加速收敛速度。

<ul><li>betas:梯度均值系数</li>
<li>weight_decay:权重衰减系数</li>
<li>momentum_decay:动量衰减系数</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.NAdam.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.NAdam.html</font>…;

<font style="line-height: 40px;"><strong>RAdam</strong></font>

<a href="https://arxiv.org/abs/1908.03265"><font color="#5675cd">https://arxiv.org/abs/1908.03265</font></a&gt;

RAdam (Rectified Adam) 是一种优化器算法,它是对 Adam 算法的改进。RAdam 通过在 Adam 中引入偏差修正来改善 Adam 的性能,使得它在某些情况下比 Adam 更优秀。

<ul><li>betas:梯度均值系数</li>
<li>weight_decay:权重衰减系数</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.RAdam.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.RAdam.html</font>…;

<font style="line-height: 40px;"><strong>RMSprop</strong></font>

<a href="https://arxiv.org/pdf/1308.0850v5.pdf"><font color="#5675cd">https://arxiv.org/pdf/1308.0850v5.pdf</font></a&gt;

RMSprop(Root Mean Square Propagation)是一种常用的自适应学习率优化算法。RMSprop 算法通过不断调整每个参数的学习率来优化模型,使得参数更新时不同的维度有不同的学习率。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

RMSprop 算法使用了一个衰减系数(decay rate)来控制历史梯度的权重,使得在更新参数时,历史梯度对学习率的影响逐渐降低。

<ul><li>alpha:学习率更新系数</li>
<li>weight_decay:权重衰减系数</li>
<li>momentum:动量系数</li>
<li>centered:是否方差的估计进行归一化</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.RMSprop.html"><fo… color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.RMSprop.html</fon…;

<font style="line-height: 40px;"><strong>Rprop</strong></font>

<a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.1417"><font color="#5675cd">http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.1417</font><…;

Rprop 算法通过动态调整每个参数的学习率来优化模型,使得参数更新时不同的维度有不同的学习率,从而在训练过程中可以更加精细地调整模型参数。

<center><img width="600" src="https://cdn.eetrend.com/files/2023-02/%E5%8D%9A%E5%AE%A2/100568695-2928…; alt="小白学深度学习:参数优化与优化器原理"></center><br>

Rprop 算法根据每个参数的梯度变化情况来调整学习率,如果梯度变化的符号不变,则学习率保持不变;如果梯度变化的符号改变,则学习率减少;如果梯度为零,则学习率不变。

<ul><li>etas:乘法增减因子</li>
<li>step_sizes:允许步长</li></ul>

<a href="https://pytorch.org/docs/stable/generated/torch.optim.Rprop.html"><font color="#5675cd">https://pytorch.org/docs/stable/generated/torch.optim.Rprop.html</font>…;

<hr>
<font color="#9a9a9a">本文转自:<a href="https://mp.weixin.qq.com/s/l0pa6c04msjFiHc9w7-EfA"><font color="#9a9a9a">Coggle数据科学</font></a>,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。</font>
<br>