深度学习模型组件之优化器--自适应学习率优化方法(Adadelta、Adam、AdamW)

深度学习模型组件之优化器–自适应学习率优化方法(Adadelta、Adam、AdamW)


在深度学习中,优化器是训练过程中不可或缺的一部分。不同的优化器通过调整学习率和更新规则来帮助模型收敛得更快、更好。本文将详细介绍三种常用的优化器: AdadeltaAdamAdamW,并展示它们的核心公式、工作原理、优缺点以及应用场景。


1. Adadelta

1.1 公式

Adadelta 的核心公式如下:

在这里插入图片描述

其中:

  • Δθt是参数更新;
  • gt是当前时间步的梯度;
  • E^[Δθt−12]是之前梯度的累积平方;
  • E^[gt2] 是当前梯度的平方的累积;
  • ϵ 是一个小常数,用于避免除零错误。
1.2 优点
  • 自适应学习率: Adadelta 不需要预定义学习率,通过梯度的变化动态调整学习率。
  • 避免学习率衰减: 与其他优化器不同,Adadelta 没有显式的学习率衰减机制,这使得优化过程更加稳定。
1.3 缺点
  • 参数更新较慢: 在一些任务中,Adadelta 的更新速度可能较慢,尤其是在复杂的深度神经网络中。
  • 内存消耗较大: Adadelta 存储了梯度的平方和参数的更新历史,因此需要更多的内存资源。
1.4 应用场景
  • 动态调整学习率: 适用于那些无法手动调整学习率的任务,特别是对于一些不容易设定初始学习率的情况。
  • 不需要手动调整学习率: 对于一些快速原型设计的任务,Adadelta 是一个不错的选择。

1.5 代码示例

import torch
import torch.optim as optim

# 假设我们有一个模型和数据
model = torch.nn.Linear(10, 1)
optimizer = optim.Adadelta(model.parameters(), lr=1.0)

# 假设损失函数
criterion = torch.nn.MSELoss()

# 假设输入和目标
input = torch.randn(32, 10)
target = torch.randn(32, 1)

# 训练过程
optimizer.zero_grad()
output = model(input)
loss = criterion(output, target)
loss.backward()
optimizer.step()

2. Adam (Adaptive Moment Estimation)

2.1 公式

Adam 优化器的核心公式如下:

在这里插入图片描述

其中:

  • mt是梯度的一阶矩(均值);
  • vt 是梯度的二阶矩(方差);
  • m^t是对 mtvt 进行偏差修正后的估计;
  • gt是当前时间步的梯度;
  • β1β2 是一阶矩和二阶矩的衰减率;
  • ϵ 是一个小常数,用于避免除零错误;
  • α 是学习率。
2.2 优点
  • 动态调整学习率: Adam 通过一阶矩和二阶矩的自适应调整,使得每个参数的学习率是动态的。
  • 适应稀疏梯度: 对于一些稀疏梯度问题,Adam 展现出较好的性能。
  • 偏差修正: 通过修正一阶和二阶矩的偏差,Adam 在初期训练阶段表现更加稳定。
2.3 缺点
  • 过拟合: 在一些正则化要求较强的模型中,Adam 可能导致过拟合,特别是对于大型模型。
  • 内存消耗: Adam 需要存储一阶和二阶矩的估计,因此需要更多的内存资源。
2.4 应用场景
  • 大多数深度学习任务: Adam 适用于各种深度学习任务,尤其是在处理大规模数据集和深层神经网络时表现优异。
  • 稀疏数据和参数: 在处理稀疏梯度或稀疏参数的任务时,Adam 是非常合适的选择。

2.5 代码示例:

import torch
import torch.optim as optim

# 假设我们有一个模型和数据
model = torch.nn.Linear(10, 1)
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 假设损失函数
criterion = torch.nn.MSELoss()

# 假设输入和目标
input = torch.randn(32, 10)
target = torch.randn(32, 1)

# 训练过程
optimizer.zero_grad()
output = model(input)
loss = criterion(output, target)
loss.backward()
optimizer.step()

3. AdamW

3.1 公式

AdamW 的核心公式与 Adam 非常相似,不同之处在于它将权重衰减与梯度更新过程分开。AdamW 的参数更新公式如下:

在这里插入图片描述

其中:

  • λ 是权重衰减系数;
  • 其他符号与 Adam 中相同。
3.2 优点
  • 更好的正则化: 通过将权重衰减项从梯度更新中分离出来,AdamW 在正则化方面比 Adam 更加有效。
  • 更高的泛化能力: 由于权重衰减对模型权重的约束,AdamW 能有效减少过拟合,尤其适用于大规模模型。
3.3 缺点
  • 超参数调整: 相比于 AdamAdamW 需要额外调整权重衰减系数,可能增加调参的复杂度。
  • 计算成本: 虽然与 Adam 相似,但添加了权重衰减项,可能在计算和内存上稍有增加。
3.4 应用场景
  • 大型模型训练: AdamW 在需要正则化的大型模型(如 TransformerBERT)中有显著优势。
  • 需要强正则化的任务: 对于需要避免过拟合的任务,特别是在复杂模型中,AdamW 是更好的选择。

3.5 代码示例:

import torch
import torch.optim as optim

# 假设我们有一个模型和数据
model = torch.nn.Linear(10, 1)
optimizer = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)

# 假设损失函数
criterion = torch.nn.MSELoss()

# 假设输入和目标
input = torch.randn(32, 10)
target = torch.randn(32, 1)

# 训练过程
optimizer.zero_grad()
output = model(input)
loss = criterion(output, target)
loss.backward()
optimizer.step()

4.总结

优化器核心思想公式优缺点适用场景
Adadelta基于 RMSprop 的改进版本,自适应调整学习率在这里插入图片描述优点:动态调整学习率,不需要手动设置;缺点:更新较慢,内存消耗大需要动态调整学习率的任务,快速原型设计
Adam结合动量和 RMSprop 的优点,通过一阶和二阶矩自适应调整在这里插入图片描述优点:动态调整学习率,适应稀疏梯度,偏差修正;缺点:可能导致过拟合,内存消耗大大多数深度学习任务,稀疏数据处理
AdamW在 Adam 基础上添加权重衰减,适合大模型正则化在这里插入图片描述优点:更好的正则化,减少过拟合;缺点:需要额外调整权重衰减系数大型模型训练,需要正则化的任务
### AdamW优化器的使用方法与原理 AdamW 是一种改进版的 Adam 优化算法,它通过权重衰减(weight decay)来改善模型训练过程中的泛化性能。传统的 Adam 优化器虽然能够高效地更新参数并收敛到局部最优解,但在某些情况下可能会因为缺乏正则化的权重衰减而导致过拟合。 #### 原理概述 AdamW 的核心思想是在 Adam 的基础上引入了一种更有效的权重衰减机制。具体来说,在标准的 Adam 中,权重衰减被隐含在梯度计算中,而 AdamW 将其显式分离出来[^1]。这种设计使得权重衰减的效果更加直观,并且不会受到学习率的影响。 公式如下: \[ w_{t+1} = w_t - \eta \cdot m_t / (\sqrt{v_t} + \epsilon) - \lambda \cdot w_t \] 其中: - \(m_t\) 和 \(v_t\) 分别表示一阶矩估计和二阶矩估计; - \(\eta\) 表示学习率- \(\lambda\) 表示权重衰减系数; - \(\epsilon\) 是一个小常数,用于数值稳定性。 这一公式的最后一项即为显式的权重衰减部分,独立于 Adam 的梯度更新逻辑之外[^2]。 #### 使用方法 以下是基于 PyTorch 实现 AdamW 的代码示例: ```python import torch from torch.optim import AdamW # 定义模型 model = torch.nn.Linear(10, 1) # 设置超参数 learning_rate = 0.001 weight_decay = 0.01 # 初始化 AdamW 优化器 optimizer = AdamW(model.parameters(), lr=learning_rate, weight_decay=weight_decay) # 训练循环 (伪代码) for epoch in range(num_epochs): optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, targets) loss.backward() optimizer.step() ``` 在此实现中,`weight_decay` 参数控制着权重衰减的程度。较高的 `weight_decay` 可能会增加正则化效果,但也可能导致欠拟合;因此需要根据实际场景调整该值[^3]。 #### 性能优势 相比传统 AdamAdamW 提供了更好的泛化能力,尤其是在大规模数据集上的表现更为显著。这是因为它的权重衰减策略可以有效减少模型复杂度,从而降低过拟合风险[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值