在神经网络中,权重和偏置的矩阵维度取决于相邻两层的神经元数量。以下是详细说明:
1. 正向传播时的维度
权重矩阵:
若当前层有 n 个神经元,前一层有 m 个神经元,则权重矩阵 W 的维度为 n×m。
公式:z=W⋅a prev +b,其中 a prev 是前一层输出(维度 m×1),W 将 m×1 映射到 n×1。
偏置向量:
偏置 b 的维度为 n×1,与当前层神经元数量一致。每个神经元对应一个独立的偏置值。
批量输入情况:
当输入为 m×b 的矩阵(b 为批量大小)时,W⋅a prev结果为 n×b,偏置 b 通过广播机制加到每一列。
2. 反向传播时的梯度维度
权重梯度:
梯度 的维度与权重矩阵 W 相同,即 n×m。
计算方式:
其中 的维度为 n×b,
的维度为 b×m,相乘后得到 n×m。
偏置梯度:
梯度
的维度为 n×1。
计算方式:
对批量数据中每个样本的梯度求和,最终得到 n×1。
3. 关键总结
4、示例
假设网络结构为:输入层 3 个神经元,隐藏层 2 个神经元,则:
5、关键总结
参数维度固定:权重 W 和偏置 b 的维度仅由网络结构决定,与训练集大小 m 无关。
6、常见误区
7、代码示例:
import numpy as np
# 网络结构:前一层 3 个神经元,当前层 2 个神经元,批量大小 m=100
m_prev, n, m = 3, 2, 100
# 初始化参数(维度固定)
W = np.random.randn(n, m_prev) # 2x3
b = np.random.randn(n, 1) # 2x1
# 正向传播
A_prev = np.random.randn(m_prev, m) # 3x100
Z = W.dot(A_prev) + b # 2x100
# 反向传播
dZ = np.random.randn(n, m) # 2x100
dW = (1/m) * dZ.dot(A_prev.T) # 2x3
db = (1/m) * np.sum(dZ, axis=1, keepdims=True) # 2x1
print("dW shape:", dW.shape) # (2, 3)
print("db shape:", db.shape) # (2, 1)