从代码学习深度学习 - 优化算法 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 − η
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值