三层网络模型梯度求解
构建一个简单的三层神经网络模型,并详细分析每一层的梯度计算过程。
假设这个模型由以下三层构成:
- 输入层:大小为 2
- 隐藏层:大小为 3,激活函数为 ReLU
- 输出层:大小为 1
每一层的权重和偏置参数如下:
- 第一层:权重 ( W_1 ) 和偏置 ( b_1 )
- 第二层:权重 ( W_2 ) 和偏置 ( b_2 )
- 输出层:权重 ( W_3 ) 和偏置 ( b_3 )
1. 先建立模型并计算前向传播
我们将输入数据设为 x
,标签设为 y_true
。模型的前向传播计算过程如下:
损失函数使用均方误差(MSE):
2. 用 PyTorch 实现这个三层模型
以下是代码实现:
1 |
|
3. 梯度计算分析
现在,我们分析每一层参数梯度的计算过程:
第一层(输入到隐藏层)
- 对于第一层的权重
- PyTorch 自动计算并累积这些链式法则中的每个项的梯度,最终得到
W1.grad
。
- 对于第一层的偏置 ( b_1 ),其梯度为 (\frac{\partial \text{loss}}{\partial b_1}),计算过程与 ( W_1 ) 类似,但没有权重的部分。
第二层(隐藏层到隐藏层)
- 对于第二层的权重 ( W_2 ),其梯度为 (\frac{\partial \text{loss}}{\partial W_2})。
- PyTorch 自动追踪这些操作并计算
W2.grad
。
- 对于第二层的偏置 ( b_2 ),其梯度为 (\frac{\partial \text{loss}}{\partial b_2})。
输出层(隐藏层到输出层)
- 对于输出层的权重 ( W_3 ),其梯度为 (\frac{\partial \text{loss}}{\partial W_3})。
- PyTorch 在反向传播中计算出
W3.grad
。
- 对于输出层的偏置 ( b_3 ),其梯度为 (\frac{\partial \text{loss}}{\partial b_3})。
通过这三层的链式求导法则,PyTorch 能够自动计算每层权重和偏置的梯度并存储在 .grad
中,用于之后的参数更新。
三层网络模型梯度求解
http://example.com/2024/11/04/20241104_三层模型梯度求解/