三层网络模型梯度求解

构建一个简单的三层神经网络模型,并详细分析每一层的梯度计算过程。

假设这个模型由以下三层构成:

  1. 输入层:大小为 2
  2. 隐藏层:大小为 3,激活函数为 ReLU
  3. 输出层:大小为 1

每一层的权重和偏置参数如下:

  • 第一层:权重 ( W_1 ) 和偏置 ( b_1 )
  • 第二层:权重 ( W_2 ) 和偏置 ( b_2 )
  • 输出层:权重 ( W_3 ) 和偏置 ( b_3 )

1. 先建立模型并计算前向传播

我们将输入数据设为 x,标签设为 y_true。模型的前向传播计算过程如下:

损失函数使用均方误差(MSE):

2. 用 PyTorch 实现这个三层模型

以下是代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import torch
import torch.nn.functional as F

# 初始化输入和标签
x = torch.tensor([[0.5, -1.5]], requires_grad=False) # 输入为 2 维
y_true = torch.tensor([[1.0]], requires_grad=False) # 标签为 1 维

# 初始化模型参数
W1 = torch.randn((2, 3), requires_grad=True) # 第一层的权重 (2x3)
b1 = torch.randn((1, 3), requires_grad=True) # 第一层的偏置 (1x3)

W2 = torch.randn((3, 3), requires_grad=True) # 第二层的权重 (3x3)
b2 = torch.randn((1, 3), requires_grad=True) # 第二层的偏置 (1x3)

W3 = torch.randn((3, 1), requires_grad=True) # 输出层的权重 (3x1)
b3 = torch.randn((1, 1), requires_grad=True) # 输出层的偏置 (1x1)

# 前向传播
z1 = x @ W1 + b1
a1 = F.relu(z1)
z2 = a1 @ W2 + b2
a2 = F.relu(z2)
y_pred = a2 @ W3 + b3

# 计算损失
loss = torch.mean((y_pred - y_true) ** 2)

# 反向传播
loss.backward()

# 输出每一层的梯度
print("W1 的梯度:", W1.grad)
print("b1 的梯度:", b1.grad)
print("W2 的梯度:", W2.grad)
print("b2 的梯度:", b2.grad)
print("W3 的梯度:", W3.grad)
print("b3 的梯度:", b3.grad)

3. 梯度计算分析

现在,我们分析每一层参数梯度的计算过程:

第一层(输入到隐藏层)

  1. 对于第一层的权重
  • PyTorch 自动计算并累积这些链式法则中的每个项的梯度,最终得到 W1.grad
  1. 对于第一层的偏置 ( b_1 ),其梯度为 (\frac{\partial \text{loss}}{\partial b_1}),计算过程与 ( W_1 ) 类似,但没有权重的部分。

第二层(隐藏层到隐藏层)

  1. 对于第二层的权重 ( W_2 ),其梯度为 (\frac{\partial \text{loss}}{\partial W_2})。
  • PyTorch 自动追踪这些操作并计算 W2.grad
  1. 对于第二层的偏置 ( b_2 ),其梯度为 (\frac{\partial \text{loss}}{\partial b_2})。

输出层(隐藏层到输出层)

  1. 对于输出层的权重 ( W_3 ),其梯度为 (\frac{\partial \text{loss}}{\partial W_3})。
  • PyTorch 在反向传播中计算出 W3.grad
  1. 对于输出层的偏置 ( b_3 ),其梯度为 (\frac{\partial \text{loss}}{\partial b_3})。

通过这三层的链式求导法则,PyTorch 能够自动计算每层权重和偏置的梯度并存储在 .grad 中,用于之后的参数更新。


三层网络模型梯度求解
http://example.com/2024/11/04/20241104_三层模型梯度求解/
作者
XuanYa
发布于
2024年11月4日
许可协议