深度学习:常用优化器Optimizer简介

深度学习:常用优化器Optimizer简介

随机梯度下降SGD

梯度下降算法是使权重参数沿着整个训练集的梯度方向下降,但往往深度学习的训练集规模很大,计算整个训练集的梯度需要很大的计算量,为了减少计算量加速训练,在此基础上演化出随机梯度下降算法(SGD),沿着随机选取的小批量数据的梯度方向下降。

假设权重记作 w w w,学习率为 α \alpha α,随机选取小批量样本计算梯度 d w dw dw,模型在更新权重的公式如下:
w t + 1 = w t − α × d w t w_{t+1} = w_t - \alpha \times dw_t wt+1=wt−α×dwt

带动量的随机梯度下降SGD-Momentum

虽然随机梯度下降是一种很受欢迎的优化方法,但其学习过程有时比较慢,引入动量momentum旨在提高收敛速度收敛精确度 ,特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。

动量是深度学习训练中,一个用于更新模型参数的超参数,假设记作mu,则引入动量的随机梯度下降算法公式为:
v t = m u × v t − 1 − α t × d w t v_t = mu \times v_{t-1} - \alpha_t \times dw_t vt=mu×vt−1−αt×dwt
w t + 1 = w t + v t w_{t+1} = w_t + v_t wt+1=wt+vt

其中,v初始化为0,mu一般的取值为0.5、0.9、0.99等。

要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。前者能够加速收敛,后者能够减小摆动,提高收敛精确度。

SGDW

weight decay(权值衰减)的使用既不是为了提高收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度防止过拟合,若weight decay很大,则复杂的模型损失函数的值也就大。

SGDW 即 SGD+ Weight decate。SGDW直接将正则项的梯度加入反向传播的公式中,而不是loss函数。

详细算法可参照:

Adam

Adam是一种自适应优化器,对超参数的选择较为鲁棒。SGD-Momentum在SGD基础上增加了一阶动量,AdaGrad和AdaDelta在SGD基础上增加了二阶动量。Adam则是把一阶动量和二阶动量都用起来了。

一阶动量:
m t = β 1 × m t − 1 + ( 1 − β 1 ) × d w t m_t = \beta_1 \times m_{t-1} + (1-\beta_1) \times dw_t mt=β1×mt−1+(1−β1)×dwt

二阶动量:
v t = β 2 × v t − 1 + ( 1 − β 2 ) × d 2 w t v_t = \beta_2 \times v_{t-1} + (1-\beta_2) \times d^2w_t vt=β2×vt−1+(1−β2)×d2wt
β 1 \beta_1 β1和 β 2 \beta_2 β2是Adam的两个超参数。

详细算法可参照Adam原始论文:

AdamW

AdamW在Adam的基础上发展而来的一种自适应优化器。AdamW 即 Adam + Weight decate ,效果与 Adam + L2正则化相同,但是计算效率更高,因为L2正则化需要在loss中加入正则项,之后再算梯度,最后在反向传播,而AdamW直接将正则项的梯度加入反向传播的公式中,省去了手动在loss中加正则项这一步。

详细算法可参照AdamW原始论文:

相关推荐
余生H25 分钟前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer
果冻人工智能44 分钟前
2025 年将颠覆商业的 8 大 AI 应用场景
人工智能·ai员工
代码不行的搬运工1 小时前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
石小石Orz1 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
罗小罗同学1 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤1 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭1 小时前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~1 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
极客代码1 小时前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
zhangfeng11331 小时前
pytorch 的交叉熵函数,多分类,二分类
人工智能·pytorch·分类