深度学习核心概念:学习率与梯度深度解析
导读
学习率(Learning Rate)与梯度(Gradient)是深度学习模型训练的核心概念,直接影响模型的收敛速度和效果。本文将通过数学公式、可视化比喻和代码实战,带你彻底理解二者的作用与调优技巧。
一、梯度:模型优化的“指南针”
1.1 数学定义
梯度是损失函数对模型参数的偏导数向量:
∇
θ
J
(
θ
)
=
[
∂
J
∂
θ
1
,
∂
J
∂
θ
2
,
…
]
\nabla_{\theta} J(\theta) = \left[ \frac{\partial J}{\partial \theta_1}, \frac{\partial J}{\partial \theta_2}, \dots \right]
∇θJ(θ)=[∂θ1∂J,∂θ2∂J,…]
- $ J(\theta) $:损失函数(如交叉熵、均方误差)
- $ \theta $:模型参数(权重矩阵、偏置项等)
1.2 直观理解
梯度方向 | 梯度大小 |
---|---|
指向损失函数上升最快的方向 | 反映参数对损失的影响程度 |
示例:简单二次函数
假设损失函数为 $ J(\theta) = \theta^2 $,则梯度计算为:
∇
J
=
2
θ
\nabla J = 2\theta
∇J=2θ
- 当 $ \theta = 3 $ 时,梯度为 $ 6 $,参数应向负方向调整(减小 $ \theta $)。
二、学习率:参数更新的“油门”
2.1 参数更新公式
θ new = θ old − η ⋅ ∇ θ J ( θ ) \theta_{\text{new}} = \theta_{\text{old}} - \eta \cdot \nabla_{\theta} J(\theta) θnew=θold−η⋅∇θJ(θ)
- $ \eta $:学习率,控制参数调整的步长
2.2 学习率的影响
学习率设置 | 影响 | 可视化比喻 |
---|---|---|
太大 | 参数震荡,无法收敛 | 下山时跨过山谷 |
合适 | 快速稳定收敛 | 稳步走向最低点 |
太小 | 收敛慢,卡在局部最优 | 小碎步挪动,耗时极长 |
三、梯度与学习率的联合作用
3.1 动态关系表
场景 | 梯度大 | 梯度小 |
---|---|---|
学习率太大 | 剧烈震荡,发散风险 | 参数缓慢漂移 |
学习率合适 | 快速逼近最优解 | 稳定收敛 |
学习率太小 | 收敛极慢 | 几乎停滞 |
3.2 代码实战:PyTorch 中的参数更新
import torch
# 定义模型与优化器
model = torch.nn.Linear(10, 1) # 10维输入,1维输出
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 学习率=0.01
# 模拟输入数据
inputs = torch.randn(5, 10) # 批量大小=5
labels = torch.randn(5, 1)
# 训练循环
for epoch in range(100):
optimizer.zero_grad() # 清空梯度
outputs = model(inputs) # 前向传播
loss = torch.nn.MSELoss()(outputs, labels)
loss.backward() # 反向传播计算梯度
optimizer.step() # 按学习率更新参数