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

从代码学习深度学习 - 优化算法 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 − η
http://www.xdnf.cn/news/420.html

相关文章:

  • Vue 3 中将 ref 创建的响应式对象数据转换为普通(非响应式)的数据
  • JAVA IO、BIO、NIO、AIO及零拷贝
  • Warcraft Logs [Classic] [WCL] Usage Wizard <HTOC>
  • FPGA系列之DDS信号发生器设计(DE2-115开发板)
  • 睡前小故事数据集分享
  • 腾讯wxg企业微信 后端开发一面
  • [Swift]Xcode模拟器无法请求http接口问题
  • 阿里云Clickhouse 冷热数据分层存储 实战记录
  • 【图片识别改名工具】图片文件区域OCR识别并自动重命名,批量识别指定区域根据指定识别文字批量改名,基于WPF和阿里云的技术方式实现
  • 二进制裁剪命令mips-linux-gnu-strip 命令的使用
  • NoSQl注入学习
  • 【Flutter动画深度解析】性能与美学的完美平衡之道
  • 多人五子棋联机对战平台 测试报告
  • 【绘制图像轮廓】图像处理(OpenCV) -part7
  • leetcode哈希表(六)-三数相加
  • P11299 [NOISG 2021 Finals] Fraud 题解
  • PHP异常处理__Exception类
  • 实验4基于神经网络的模式识别实验
  • opencv 图像的旋转
  • linux下C++性能调优常用的工具
  • 真实波幅策略思路
  • 数据驱动增长:大数据与营销自动化的结合之道
  • 芝法酱躺平攻略(21)——kafka安装和使用
  • Chromium 134 编译指南 macOS篇:编译优化技巧(六)
  • Warcraft Logs [Classic] [WCL] BOSS ID query
  • 分析虚幻引擎编辑器中使用 TAA 或 TSR 时角色眨眼导致的眼睛模糊问题
  • 文字的力量
  • 数仓面试内容
  • 【基于Fluent+Python耦合的热管理数字孪生系统开发:新能源产品开发的硬核技术实践】
  • MCP协议用到的Node.js 和 npm npx