【优化器】Optimizer——深度学习中的优化器是什么作用呢?
【优化器】Optimizer——深度学习中的优化器是什么作用呢?
文章目录
- 【优化器】Optimizer——深度学习中的优化器是什么作用呢?
- 1.什么是优化器?
- 梯度下降法
- 3. 常见的优化器
- (1) SGD(随机梯度下降)
- (2) Momentum(动量法)
- (3) Adagrad
- (4) RMSprop
- (5) Adam(自适应矩估计)
- (6) AdamW
- 优化器对比总结
在卷积神经网络(CNN)中,优化器(Optimizer) 是用于更新模型参数(如权重和偏置)的算法。它根据损失函数的导数或梯度,调整模型的参数,以最小化损失函数值,从而提高模型的性能。优化器通常是通过梯度下降法或其变种来进行参数优化。
1.什么是优化器?
优化器的核心目标是调整模型参数,使损失函数逐渐减小,最终找到损失函数的最小值(即全局或局部最小值)。优化器通过迭代方式来更新模型参数,核心思想是:根据损失函数的梯度信息,反向调整参数,直到找到最优解。
梯度下降法
梯度下降法(Gradient Descent) 是一种通过迭代最小化损失函数的方法。在每次迭代中,计算损失函数对每个参数的梯度(即偏导数),并沿着梯度的反方向调整参数,因为梯度的方向是损失函数上升最快的方向,反方向是下降最快的方向。
-
公式:
其中: -
θ θ θ表示模型参数(如权重、偏置)。
-
η η η 是学习率(learning rate),控制每次更新的步长。
-
∇ J ( θ ) ∇J(θ) ∇J(θ)是损失函数 J ( θ ) J(θ) J(θ) 对参数 θ θ θ的梯度。
3. 常见的优化器
以下是一些深度学习中常见的优化器:
(1) SGD(随机梯度下降)
- 定义:随机梯度下降(Stochastic Gradient Descent)是经典的梯度下降法的一种变体,更新时使用随机的单个或少量的训练样本,而不是使用全部训练数据。
- 公式:
其中 x ( i ) x^{(i)} x(i), y ( i ) y^{(i)} y(i)是随机选择的一个样本数据。。 - 优点:由于每次只使用一个或少数样本,计算速度快,适用于大规模数据。
- 缺点:收敛路径较为不稳定,容易跳过局部最优解。
- 代码示例:
import torch
import torch.optim as optim
# 假设一个简单的模型参数
params = [torch.tensor([1.0], requires_grad=True)]
# 定义优化器
optimizer = optim.SGD(params, lr=0.01)
# 计算损失并更新参数
loss = (params[0] - 2) ** 2 # 假设一个简单的损失函数
loss.backward() # 计算梯度
optimizer.step() # 更新参数
optimizer.zero_grad() # 梯度清零
(2) Momentum(动量法)
- 定义:动量法在 SGD 基础上加上了一个动量项,允许优化器在更新时不仅考虑当前的梯度,还保留前面更新的方向,形成一个累积效果,从而加快收敛速度。
- 公式:
其中 v t v_t vt是动量, γ γ γ 是动量系数(通常取 0.9)。 - 优点:加速收敛,尤其是在凹形或平滑区域。
- 缺点:仍然容易陷入局部最优解。
- 代码示例:
# 使用动量法的 SGD 优化器
optimizer = optim.SGD(params, lr=0.01, momentum=0.9)
(3) Adagrad
- 定义:Adagrad 是一种自适应学习率优化器,它为每个参数单独设置学习率,并根据参数的更新历史动态调整学习率。更新次数越多,学习率越小。
- 公式:
其中 G t G_t Gt是梯度平方的累积和, ϵ ϵ ϵ是一个很小的常数,用于防止分母为 0。 - 优点:对稀疏数据和稀疏梯度效果较好。
- 缺点:随着时间的推移,学习率可能会变得过小,导致模型停止学习。
- 代码示例:
# 使用 Adagrad 优化器
optimizer = optim.Adagrad(params, lr=0.01)
(4) RMSprop
- 定义:RMSprop 是 Adagrad 的改进版本,它通过引入指数加权平均来减缓累积梯度的增加速度,从而避免学习率变得过小。
- 公式:
其中 γ γ γ 是衰减因子,通常取 0.9。 - 优点:对非平稳目标函数表现较好,适用于深度神经网络。
- 缺点:仍然需要手动设置初始学习率。
- 代码示例:
# 使用 RMSprop 优化器
optimizer = optim.RMSprop(params, lr=0.01, alpha=0.9)
(5) Adam(自适应矩估计)
- 定义:Adam 结合了 Momentum 和 RMSprop 的优点,使用两个独立的指数加权平均来处理梯度的一阶动量和二阶动量。这种方法对不同参数使用不同的自适应学习率。
- 公式:
其中, β 1 β_1 β1和 β 2 β_2 β2是超参数,通常取 β 1 = 0.9 β_1=0.9 β1=0.9, β 2 = 0.999 β_2=0.999 β2=0.999 - 优点:结合了动量和自适应学习率的优点,收敛速度快,且对超参数较为鲁棒。
- 缺点:在某些情况下可能导致过拟合或模型停止学习。
- 代码示例:
# 使用 Adam 优化器
optimizer = optim.Adam(params, lr=0.001, betas=(0.9, 0.999))
(6) AdamW
- 定义:定义: AdamW 是 Adam 的变体,主要区别在于权重衰减(weight decay)的方式。它通过将权重衰减应用到每次更新的参数上,而不是通过调节学习率来实现。这可以有效地避免过拟合。
- 公式:
其中 λ λ λ 是权重衰减系数。 - 优点:更好的正则化效果,尤其适用于大型深度学习模型。
- 代码示例:
# 使用 AdamW 优化器
optimizer = optim.AdamW(params, lr=0.001, weight_decay=1e-5)
优化器对比总结
- SGD: 基本的梯度下降法,适合小规模数据,收敛速度较慢。
- Momentum: 加快收敛速度,适合梯度方向一致的情况。
- Adagrad: 自适应学习率,适合稀疏数据