在深度学习中,权重 w 和 偏置 b 是神经网络的核心参数,它们的形态(shape)取决于网络结构和数据维度。以下是关于 w 和 b 的详细解析:
1. 数学表示与物理意义
-
权重 w: 连接神经元之间的强度,决定输入信号的重要性。
- 数学上是一个 矩阵,用于线性变换(如 \(y = wx + b\))。
- 训练过程中通过反向传播自动学习得到。
-
偏置 b: 调整神经元激活函数的阈值,增加模型的灵活性。
- 数学上是一个 向量,每个神经元对应一个偏置值。
2. 不同层的 w 和 b 形态
假设:
- 输入特征维度为 \(n_{\text{in}}\)
- 输出特征维度为 \(n_{\text{out}}\)
- 批量大小为 m
全连接层(Dense Layer)
- 权重 w:形状为 \((n_{\text{in}}, n_{\text{out}})\)
- 偏置 b:形状为 \((n_{\text{out}},)\)
- 计算示例: 输入 x 形状为 \((m, n_{\text{in}})\),则输出 \(y = xw + b\),形状为 \((m, n_{\text{out}})\)。
卷积层(Convolutional Layer)
- 权重 w:形状为 \((k, k, c_{\text{in}}, c_{\text{out}})\)
- k:卷积核大小
- \(c_{\text{in}}\):输入通道数
- \(c_{\text{out}}\):输出通道数
- 偏置 b:形状为 \((c_{\text{out}},)\)
- 每个卷积核共享同一组 w 和 b。
循环层(RNN/LSTM)
- 权重 w:通常分为多个矩阵(如输入门、遗忘门等)。
- 偏置 b:每个门对应一个向量。
- 形态示例: LSTM 的隐藏状态维度为 h,则每个门的权重矩阵形状为 \((h, h)\) 或 \((n_{\text{in}}, h)\)。
3. 直观理解:以简单网络为例
假设一个 3 层神经网络:
- 输入层:2 个神经元
- 隐藏层:3 个神经元
- 输出层:1 个神经元
第一层(输入→隐藏)
- 权重 \(w_1\): 形状为 \((2, 3)\),即:
python
运行
w1 = [[w11, w12, w13], # 连接输入层第1个神经元到隐藏层[w21, w22, w23] # 连接输入层第2个神经元到隐藏层 ]
- 偏置 \(b_1\): 形状为 \((3,)\),即:
python
运行
b1 = [b1, b2, b3] # 每个隐藏层神经元对应一个偏置
第二层(隐藏→输出)
- 权重 \(w_2\): 形状为 \((3, 1)\),即:
python
运行
w2 = [[w1], # 连接隐藏层第1个神经元到输出层[w2], # 连接隐藏层第2个神经元到输出层[w3] # 连接隐藏层第3个神经元到输出层 ]
- 偏置 \(b_2\): 形状为 \((1,)\),即:
python
运行
b2 = [b] # 输出层神经元的偏置
4. 在代码中的表示
以 PyTorch 为例,定义一个简单的全连接层:
python
运行
import torch.nn as nn# 输入维度=2,输出维度=3
fc_layer = nn.Linear(in_features=2, out_features=3)# 权重和偏置的形态
print(fc_layer.weight.shape) # 输出: torch.Size([3, 2]) 即 (n_out, n_in)
print(fc_layer.bias.shape) # 输出: torch.Size([3]) 即 (n_out,)
5. 初始化与训练后的状态
-
初始化时:w 和 b 通常随机初始化(如高斯分布、均匀分布)。
python
运行
# PyTorch默认初始化方式示例 nn.init.xavier_uniform_(fc_layer.weight) # Xavier初始化权重 nn.init.zeros_(fc_layer.bias) # 偏置初始化为0
-
训练后:w 和 b 的值通过反向传播更新,最终收敛到能最小化损失函数的值。
6. 为什么需要偏置 b?
-
增加模型灵活性: 若无偏置,线性变换 \(y = wx\) 始终过原点,无法表示偏移。 偏置允许模型学习 \(y = wx + b\) 这样的更一般的线性关系。
-
示例: 若目标函数为 \(y = 2x + 5\),则 \(w = 2\),\(b = 5\)。
总结
-
权重 w:
- 矩阵,形状为 \((n_{\text{in}}, n_{\text{out}})\)
- 控制输入与输出之间的映射关系
-
偏置 b:
- 向量,形状为 \((n_{\text{out}},)\)
- 调整神经元的激活阈值
理解 w 和 b 的形态对设计网络架构和调试训练过程至关重要。在实践中,现代深度学习框架(如 PyTorch、TensorFlow)会自动处理这些维度,开发者只需关注整体架构设计。