【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的?
【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的?
【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的?
文章目录
- 【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的?
- 1. 什么是梯度?
- 2.梯度下降法(Gradient Descent)
- 3. 链式法则(Chain Rule)
- 4. 梯度下降法的变种
- 批量梯度下降(Batch Gradient Descent)
- 随机梯度下降(Stochastic Gradient Descent, SGD)
- 小批量梯度下降(Mini-batch Gradient Descent)
- 总结
1. 什么是梯度?
在深度学习中,梯度是损失函数相对于模型参数的偏导数。梯度表示损失函数在参数空间中的变化率,指示出在参数值上的变化对损失函数值的影响。模型通过计算梯度来更新参数,从而最小化损失函数。
- 梯度的含义: 梯度是损失函数的局部导数,表明某个参数如何影响损失函数。若梯度为正,说明损失函数随着该参数的增大而增大,若为负,则表明损失函数随着该参数的增大而减小。
- 数学公式:对于某个参数
θ
θ
θ,梯度
∇
J
(
θ
)
∇J(θ)
∇J(θ) 是损失函数
J
(
θ
)
J(θ)
J(θ)对
θ
θ
θ的偏导数:
2.梯度下降法(Gradient Descent)
梯度下降法是一种通过迭代优化算法来寻找损失函数最小值的方法。模型通过计算损失函数相对于模型参数的梯度,沿着梯度的反方向更新参数,逐步逼近损失函数的最小值。
梯度下降法公式
梯度下降的核心公式是:
- θ θ θ:模型参数(如权重和偏置)。
- η η η:学习率(learning rate),控制更新步长的大小。
- ∇ J ( θ ) ∇J(θ) ∇J(θ):损失函数 J ( θ ) J(θ) J(θ) 对参数 θ θ θ 的梯度。
学习率控制每次更新的步长。如果学习率太大,可能导致错过最优解;如果学习率太小,训练过程将非常缓慢。
梯度下降的流程
- (1)初始化模型参数。
- (2)计算损失函数对参数的梯度。
- (3)根据梯度的反方向更新参数。
- (4)重复迭代,直到找到损失函数的局部或全局最小值。
代码示例:简单的梯度下降法
import torch
# 定义参数并启用梯度计算
x = torch.tensor([2.0], requires_grad=True) # 模型参数
y_true = torch.tensor([4.0]) # 目标值
# 定义简单的损失函数 (MSE)
loss = (x - y_true) ** 2
# 计算梯度
loss.backward() # 反向传播计算梯度
print(f'梯度: {x.grad.item()}')
# 使用梯度下降法更新参数
learning_rate = 0.1
x.data = x.data - learning_rate * x.grad.data # 更新参数
print(f'更新后的参数: {x.item()}')
3. 链式法则(Chain Rule)
链式法则是微积分中的一种技术,它用于计算复合函数的导数。深度学习中的反向传播算法就是基于链式法则来计算梯度的。
如果一个函数由多个嵌套函数组成,比如:
根据链式法则,函数
f
f
f 对
x
x
x 的导数为:
在神经网络中,链式法则用于从输出层到输入层逐层计算梯度,每一层的梯度依赖于其后层的梯度。
链式法则在神经网络中的应用
在神经网络中,假设有三层网络,损失函数为 L L L,每一层的激活函数为 a ( l ) a (l) a(l),权重为 W ( l ) W (l) W(l),则通过链式法则,我们可以逐层计算损失函数对每一层权重的梯度:
- 从输出层开始:
- 逐层回传:
这种逐层计算梯度的过程就是反向传播(Backpropagation),它有效地使用了链式法则计算每个参数的梯度。
代码示例:链式法则在 PyTorch 中的实现
import torch
# 假设一个简单的神经网络层:y = Wx + b
W = torch.tensor([2.0], requires_grad=True) # 权重
b = torch.tensor([1.0], requires_grad=True) # 偏置
x = torch.tensor([3.0]) # 输入
# 前向传播
y = W * x + b
# 定义损失函数 (比如平方误差)
loss = (y - 10) ** 2
# 反向传播计算梯度
loss.backward()
# 输出梯度
print(f'W 的梯度: {W.grad.item()}')
print(f'b 的梯度: {b.grad.item()}')
在这个例子中,通过链式法则,PyTorch 自动计算了损失函数相对于 W W W 和 b b b 的梯度。
4. 梯度下降法的变种
在实际应用中,梯度下降法有多种变体,适用于不同类型的任务:
批量梯度下降(Batch Gradient Descent)
- 使用全部数据来计算损失函数的梯度,然后更新参数。
- 缺点是当数据量大时,计算开销非常大。
随机梯度下降(Stochastic Gradient Descent, SGD)
- 每次只使用一个样本计算梯度并更新参数。
- 优点是计算速度快,但收敛路径不稳定。
小批量梯度下降(Mini-batch Gradient Descent)
- 每次使用一小部分样本(mini-batch)来计算梯度并更新参数,兼具批量和随机梯度下降的优点。
总结
- 梯度是损失函数对模型参数的偏导数,用于指导模型参数的更新方向。
- 梯度下降法是一种通过沿梯度反方向更新参数来最小化损失函数的优化方法。
- 链式法则是神经网络中反向传播算法的基础,用于逐层计算梯度。
通过梯度下降和链式法则,神经网络能够有效地学习复杂的非线性关系,从而优化模型的表现。