深鑫辉网站建设,html5页面模板大全,wordpress调用热门标签,哪些网站做的好看的本文将介绍了最先进的深度学习优化方法#xff0c;帮助神经网络训练得更快#xff0c;表现得更好。有很多个不同形式的优化器#xff0c;这里我们只找最基础、最常用、最有效和最新的来介绍。
优化器
首先#xff0c;让我们定义优化。当我们训练我们的模型以使其表现更好…本文将介绍了最先进的深度学习优化方法帮助神经网络训练得更快表现得更好。有很多个不同形式的优化器这里我们只找最基础、最常用、最有效和最新的来介绍。
优化器
首先让我们定义优化。当我们训练我们的模型以使其表现更好时首先使用损失函数训练时损失的减少表明我们的模型运行良好。而优化是用来描述这种减少损失技术的术语。
“损失函数”是什么意思?
多个变量的值被映射成一个实数该实数直观地表示使用损失函数与事件相关的一些“成本”。
实际值与模型预测值之间的差值被加起来被称作损失而计算这种差值的函数被称作损失函数。
Σ (y_actual — y_predicted)/n (from i1 to n {n Number of samples})
这是一种衡量算法对它所使用的数据建模的好坏的方法。如果你的预测不准确你的损失函数将产生更大的值。数字越低说明模型越好。 实际的Y值由上面例子中的绿色点表示拟合的直线由蓝色线表示(由我们的模型预测的值)。
让我们开始介绍优化技术来增强我们模型并尽可能减少前面提到的损失函数
梯度下降法 Gradient Descent
术语“梯度”指的是当函数的输入发生轻微变化时函数的输出会发生多大的变化。
使用微积分梯度下降迭代调整参数值以在定义初始参数值后最小化所提供的成本函数。这是根据重复直到收敛方法完成的。
1、通过计算函数的一阶导数(y mX c {m 斜率c 截距)来确定函数的梯度或斜率
2、斜率将从当前位置提升一个等于eta(学习率)倍的量到局部最小值这是通过与梯度方向相反的方向移动来进行的 学习率:梯度下降向局部最小值下降所采取的步骤的大小较大的步长是由高学习率产生的但也有超过最小值的风险。低学习率还表明步长较小这降低了操作效率但提供了更高的准确性并且有时无法逃出局部最小值所以学习率是一个很重要的超参数。
随机梯度下降
通过一次加载n点的整个数据集来计算损失函数的导数SGD方法不是在每次迭代中使用整个数据集而是通过随机选择少量样本来计算导数从而降低了计算强度。
SGD的缺点是一旦它接近最小值它就不会稳定下来而是四处反弹给我们一个很好的模型性能值但不是最好的值。这可以通过改变模型参数来解决。
使用SGD是大型数据集的理想选择。但是当数据集较小或中等时最好应用GD来获得更优的解决方案
小批量的梯度下降
小批量梯度将大数据集划分为小批量并分别更新每个批量这样既解决了GD的计算消耗问题也解决了SGD到达最小值的路径问题这也就是我们在训练时设置batch size参数的作用。 也就是说
梯度下降(GD):在整个训练集之后训练的参数会被修改随机梯度下降(SGD):在每一个样本训练之后更新参数小批量的梯度下降 (Mini Batch Gradient Descent): 每批完成后更新参数
带动量的梯度下降 Momentum Stochastic Gradient
为了平滑更新考虑到以前的梯度。它不是更新权重而是计算前几次迭代的梯度平均值。
比传统的梯度下降方法更快。动量通过用指数加权平均去噪梯度来解决这个噪声问题加快了在正确方向上的收敛减缓了在错误方向上的波动。这个动量超参数用符号“γ”表示。 权重由θ θ−γ(t)更新动量项通常设置为0.9或类似的值所有以前的更新计算t时刻的动量给予最近的更改比旧的更新更多的权重。这导致收敛加速并更快地达到最小值。
如果你使用pytorch有一个momentum 参数就是这个了。
Adaptive Gradient Descent (AdaGrad)
AdaGrad消除了手动调整学习率的需要在迭代过程中不断调整学习率,并让目标函数中的每个参数都分别拥有自己的学习率。利用低学习率的参数链接到频繁发生的特征并使用高学习率的参数链接到很少发生的特征。它适合用于稀疏数据。
每个权重以不同的速率(η)学习。 在每次迭代中每个权重的不同学习率用alpha(t)表示η 常数Epsilon 正整数(以避免除0误差) Adagrad的一个优点是不需要手动调优速率大多数将其保持在默认值0.01。随着重复次数的增加alpha(t)会变得相当大结果ηt’会更快地变化。因此以前的权重将几乎等于新的权重这可能导致收敛速度较慢。
Adagrad也一些缺点由于每一个额外的项都是正的梯度的平方的累积和分母中的alpha(t)在训练过程中不断扩大导致学习率下降最终变得无限小会导致梯度消失的问题另外就是它是单调下降的学习速率。必须使用初始全局学习率来设置它。
AdaDelta
Adadelta 是 Adagrad 的更可靠的增强它根据梯度更新的移动窗口来调整学习率而不是通过取指数衰减平均值来累加所有先前的梯度累积和。在时间步 t 影响 E[g2]t 的运行平均值的唯一因素是先前的平均值和当前梯度。 这有助于在迭代次数非常大时防止低收敛率并导致更快的收敛。即使在进行了多次升级之后Adadelta 仍以这种方式学习。与 Adagrad 不同我们不需要为 Adadelta 选择初始学习率。
Adaptive Moment Estimation (ADAM)
Adam 的优化方法结合了偏差校正、RMSprop 和 带动量SGD。
所以我们没有单独介绍RMSprop
1、RMSProp通过使用“指数移动平均值”来提高性能这是平方梯度的平均值。 在 mt vt 计算中添加的表达式 (1-β)[∂L/∂Wt] 和 (1-β)[∂L/∂Wt]² 分别用于偏差校正m 和 v 初始化为 0
用于 mt 和 vt 的超参数 β分别为 β1 和 β2在 mt 的情况下默认为 0.9在 vt 的情况下默认为 0.999。它们的唯一作用是控制这些移动平均线的指数率。因为这里的α 为 0.001ε 为 10⁻⁷。
还记得ADAM的默认值吗就是这俩了对吧。
2、Momentum与上面的带动量的梯度下降一样对梯度进行“指数加权平均”以加速梯度下降算法的收敛到最小值。它是对第一个矩(均值)的估计。 下面的截图是来自研究论文“ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION”的图表显示了实验支持的理由为什么ADAM是训练成本最低的最佳优化技术 在Adam的基础上还出现了NadamAdamWRAdam等变体这里就不详细介绍了
ADAM自从发布以来就变为了我们最常用的默认优化器在没有选择的时候我们直接使用它就可以了当然上面的变体可以试试这里推荐试试RAdam我自测效果不错。
Lookahead
Lookahead是Adam的作者在19年发布的一个方法虽然它不能算做一个优化器但是它可以和任何优化器组合使用所以我们这里要着重的介绍一下。
Lookahead 算法与已有的方法完全不同它迭代地更新两组权重。直观来说Lookahead 算法通过提前观察另一个优化器生成的「fast weights」序列来选择搜索方向。
它可以提高基于梯度的优化方法(如随机梯度下降(SGD)及其变体)的收敛速度和泛化性能。
Lookahead背后的思想是在当前梯度更新的方向上迈出一步然后使用一组额外的权重(称为“慢权重”)在同一方向上迈出一步但时间范围更长。与原始权重相比这些慢权重更新的频率更低有效地创建了对优化过程未来的“展望”。
在训练期间Lookahead计算两个权重更新:快速权重更新它基于当前的梯度并应用于原始权重以及慢速权重更新它基于之前的慢速权重并应用于新的权重集。这两个更新的组合给出了最终的权重更新用于更新原始权重。使用慢权重提供了一种正则化效果有助于防止过拟合并提高泛化性能。此外这种前瞻机制有助于优化器更有效地逃避局部最小值和鞍点从而导致更快的收敛。
Lookahead已被证明在一系列深度学习任务(包括图像分类、语言建模和强化学习)上优于Adam和SGD等其他优化算法。他的使用方式也很简单我们可以将它与任何优化器相结合 base_optimRAdam(model.parameters(),lr0.001) optimizer Lookahead(base_optim, k5, alpha0.5)然后获得的这个optimizer就像以前的优化器一样使用就可以了
LION
最后我们再介绍一个google在2月最新发布的 自动搜索优化器 论文的名字是《Symbolic Discovery of Optimization Algorithms》作者说通过数千 TPU 小时的算力搜索并结合人工干预得到了一个更省显存的优化器 LionEvoLved Sign Momentum能看的出来为了凑LION这个名字作者也是煞费苦心。
所以这里我们不介绍Lion的具体算法因为作者说了数千 TPU 小时的算力搜索 这个我们没法评判这里只介绍一些性能的对比。
作者在论文中与 AdamW进行对比 并且在imagenet上训练了各种模型来获得 从上图看出Lion还是有所提高的。但是从下图可以看到大批次的lion表现得更好 总结
优化器是深度学习训练的基础有很多的优化器可以选择但是我们可以看到最基础的SGD为我们提供了优化器工作的理论基础而Adam的出现使得我们得到了一个在训练时默认的选择或者可以直接试试RAdam。在这之上如果你只想通过设置优化器的方式来进一步提高模型性能的话可以使用Lookahead。如果想试试最新的那么Lion应该还好但是具体的效果还需要实地的测试。
https://avoid.overfit.cn/post/f7ed65f0a24a41ba942df18598f17e5c
还是那句话“没有银弹”先做个baseline再进行测试选择适合项目的优化器来使用才是最佳的方案。
作者Tavleen Bajwa