当前位置: 首页 > news >正文

从代码学习深度学习 - 优化算法 PyTorch 版

文章目录

  • 前言
  • 一、小批量梯度下降(Mini-batch Gradient Descent)
    • 1.1 公式
    • 1.2 PyTorch 实现
  • 二、动量法(Momentum)
    • 2.1 公式
    • 2.2 PyTorch 实现
  • 三、AdaGrad 算法
    • 3.1 公式
    • 3.2 PyTorch 实现
  • 四、RMSProp 算法
    • 4.1 公式
    • 4.2 PyTorch 实现
  • 五、Adadelta 算法
    • 5.1 公式
    • 5.2 PyTorch 实现
  • 六、Adam 算法
    • 6.1 公式
    • 6.2 PyTorch 实现
  • 七、Yogi 算法
    • 7.1 公式
    • 7.2 PyTorch 实现
  • 总结


前言

优化算法是深度学习的核心,它们决定了模型训练的效率和结果的质量。在这篇博客中,我们将通过 PyTorch 代码实例,深入理解各种优化算法的原理和实现。我们将使用一个简单的线性回归任务,在 airfoil_self_noise.dat 数据集上比较不同优化算法的表现。这个数据集包含了与翼型自噪声相关的特征和目标变量。

该博客中仅仅介绍了不同的优化算法,利用这写算法实现特定任务的流程这里不再介绍,请参考从代码学习深度学习 - 小批量随机梯度下降 PyTorch 版。

通过代码学习,我们能够建立更直观的理解,看到优化算法在实际训练中的差异。让我们开始这段深度学习优化算法的探索之旅!

完整代码:下载链接


一、小批量梯度下降(Mini-batch Gradient Descent)

小批量梯度下降是最基础的优化算法,它在原始梯度下降的基础上,每次只使用一小批样本来计算梯度,从而提高训练效率。

1.1 公式

g t , t − 1 = 1 ∣ B ∗ t ∣ ∑ ∗ i ∈ B ∗ t h ∗ i , t − 1 \mathbf{g}_{t,t-1}=\frac{1}{|\mathcal{B}*t|}\sum*{i\in\mathcal{B}*t}\mathbf{h}*{i,t-1} gt,t1=Bt1iBthi,t1

  • B t \mathcal{B}_t Bt:第 t t t 次迭代中选取的小批量样本集合
  • h i , t − 1 = ∇ w f ( x i , w t − 1 ) \mathbf{h}_{i,t-1} = \nabla_\mathbf{w} f(\mathbf{x}_i, \mathbf{w}_{t-1}) hi,t1=wf(xi,wt1):表示样本 i i i 在参数 w t − 1 \mathbf{w}_{t-1} wt1 下的随机梯度
  • g t , t − 1 \mathbf{g}_{t,t-1} gt,t1:小批量平均梯度估计,用于更新参数

1.2 PyTorch 实现

# 定义优化器-小批量梯度下降
trainer = torch.optim.SGD
# 设置超参数并训练模型
# 'lr': 0.01 表示学习率为0.01
train(trainer, {'lr': 0.01}, data_iter)

二、动量法(Momentum)

动量法通过累积历史梯度来加速训练过程,特别是在梯度方向一致的维度上。它可以减少训练过程中的震荡,帮助模型更快地收敛。

2.1 公式

v ∗ t = β v ∗ t − 1 + g t \mathbf{v}*t=\beta\mathbf{v}*{t-1}+\mathbf{g}_t vt=βvt1+gt w ∗ t = w ∗ t − 1 − η v t \mathbf{w}*t=\mathbf{w}*{t-1}-\eta\mathbf{v}_t wt=wt1ηvt

其中:

  • v t \mathbf{v}_t vt:动量项,表示累积的梯度
  • β ∈ ( 0 , 1 ) \beta \in (0,1) β(0,1):动量衰减系数,控制历史梯度的影响程度
  • g t \mathbf{g}_t gt:当前梯度
  • η \eta η:学习率

2.2 PyTorch 实现

# 定义优化器-带动量的小批量梯度下降
trainer = torch.optim.SGD
# 'lr': 0.005 表示学习率为0.005
# 'momentum': 0.9 表示动量系数为0.9
train(trainer, {'lr': 0.005, 'momentum': 0.9}, data_iter)

三、AdaGrad 算法

AdaGrad 算法根据参数的历史梯度调整学习率,使得频繁更新的参数有较小的学习率,不常更新的参数有较大的学习率。

3.1 公式

  1. 累积梯度平方和 r ∗ t = r ∗ t − 1 + g t 2 \mathbf{r}*t = \mathbf{r}*{t-1} + \mathbf{g}_t^2 rt=rt1+gt2
  2. 参数更新 w ∗ t = w ∗ t − 1 − η

相关文章:

  • MPTCP 的吞吐困局
  • ICS丨Chapter 1 Introduction to Computer System
  • MFC文件-屏幕录像
  • C 语言联合与枚举:自定义类型的核心解析
  • [Swift]Xcode模拟器无法请求http接口问题
  • Qt unknown module(s) in qt:serialport解决方法
  • Oracle Recovery Tools修复ORA-600 6101/kdxlin:psno out of range故障
  • C++11新增语法:列表初始化
  • 实现AWS Lambda函数安全地请求企业内部API返回数据
  • [每周一更]-(第140期):sync.Pool 使用详解:性能优化的利器
  • Python制作简易PDF查看工具PDFViewerV1.0查找功能优化
  • 【文件操作与IO】详细解析文件操作与IO (二)
  • 零、HarmonyOS应用开发者基础学习总览
  • Cursor新版0.49.x发布
  • 开源Midjourney替代方案:企业级AI绘画+PPT生成系统+AI源码
  • YOLO拓展-锚框(anchor box)详解
  • 深入理解C++ 中的vector容器
  • 机器学习核心算法全解析:从基础到进阶的 18 大算法模型
  • 点云数据处理开源C++方案
  • 神经网络的数学之旅:从输入到反向传播
  • 张宝亮履新临沂市委书记表态:不断提升在全省全国经济版图中的发展位势
  • 同比增长4.2%!一季度全国财政支出持续增长
  • 广西吃了自然保护地划得过多的亏?自治区党委书记要求廓清模糊认识
  • 19岁癫痫患者植入脑机接口后,“脑控”玩上了“黑悟空”
  • 商务部:敦促美方立即停止极限施压,停止胁迫讹诈
  • 黄山景区成功搜救一名“野游”游客,当事人受处罚并付救援费