文章

33 深度神经网络中的前向传播(Forward Propagation in a Deep Network)

33 深度神经网络中的前向传播(Forward Propagation in a Deep Network)

一、核心目标

  • 理解如何在 L 层深度神经网络 中执行 前向传播(Forward Propagation)
  • 掌握 单个样本整个训练集(向量化) 两种情况下的计算方式
  • 明确为何在实现中 必须使用 for 循环(无法完全向量化层间计算)

二、符号约定(Notation)

符号含义
$L$神经网络的总层数(不包括输入层)
$x$ 或 $a^{[0]}$输入特征向量(第 0 层激活值)
$a^{[l]}$第 $l$ 层的激活输出(列向量)
$z^{[l]}$第 $l$ 层的线性组合结果(未激活)
$W^{[l]}$第 $l$ 层的权重矩阵
$b^{[l]}$第 $l$ 层的偏置向量
$g^{[l]}(\cdot)$第 $l$ 层的激活函数(如 ReLU、sigmoid 等)

💡 注意:输入 $x = a^{[0]}$,这是统一表达式的关键。


三、单个训练样本的前向传播

  对于一个输入样本 $x = a^{[0]} \in \mathbb{R}^{n^{[0]}}$,逐层计算如下:

  对于每一层 $l = 1, 2, \dots, L$:

\[\begin{aligned} z^{[l]} &= W^{[l]} a^{[l-1]} + b^{[l]} \\ a^{[l]} &= g^{[l]}(z^{[l]}) \end{aligned}\]
  • 最终输出为 $\hat{y} = a^{[L]}$
  • 每一层的计算依赖于前一层的激活值

✅ 示例(4 层网络):

  • $z^{[1]} = W^{[1]} x + b^{[1]},\quad a^{[1]} = g^{[1]}(z^{[1]})$
  • $z^{[2]} = W^{[2]} a^{[1]} + b^{[2]},\quad a^{[2]} = g^{[2]}(z^{[2]})$
  • $z^{[4]} = W^{[4]} a^{[3]} + b^{[4]},\quad \hat{y} = a^{[4]} = g^{[4]}(z^{[4]})$

四、向量化:对整个训练集进行前向传播

  设训练集有 $m$ 个样本,将所有输入按列堆叠成矩阵:

\[X = A^{[0]} = \begin{bmatrix} | & | & & | \\ x^{(1)} & x^{(2)} & \cdots & x^{(m)} \\ | & | & & | \end{bmatrix} \in \mathbb{R}^{n^{[0]} \times m}\]

  同样地,定义:

  • $Z^{[l]} = \begin{bmatrix} z^{[l]!(1)} & z^{[l]!(2)} & \cdots & z^{[l]!(m)} \end{bmatrix}$
  • $A^{[l]} = \begin{bmatrix} a^{[l]!(1)} & a^{[l]!(2)} & \cdots & a^{[l]!(m)} \end{bmatrix}$

  则向量化前向传播公式为:

  对于 $l = 1$ 到 $L$:

\[\begin{aligned} Z^{[l]} &= W^{[l]} A^{[l-1]} + b^{[l]} \\ A^{[l]} &= g^{[l]}(Z^{[l]}) \end{aligned}\]

  其中:

  • $b^{[l]}$ 是一个列向量,但在实际计算中会通过 广播(broadcasting) 自动扩展为与 $Z^{[l]}$ 同维的矩阵
  • 最终预测结果为 $\hat{Y} = A^{[L]} \in \mathbb{R}^{n^{[L]} \times m}$

🔍 关键点:
虽然样本维度 $m$ 被向量化了,但 层与层之间仍需逐层计算,因此 无法避免 for 循环


五、为何必须使用 for 循环?

  • 每一层的计算 依赖前一层的输出($A^{[l]}$ 依赖 $A^{[l-1]}$)
  • 这种 顺序依赖性 决定了无法像样本维度那样一次性向量化所有层
  • 因此,在实现深度网络时,外层 for 循环(遍历层数 $l = 1$ $L$ )是不可避免且合理的

✅ 结论:
“在前向传播中使用 for 循环遍历网络层数,是标准且高效的做法。”


六、调试建议:关注矩阵维度

  为避免 bug,强烈建议在纸上手动验证每一步的矩阵维度:

  • $W^{[l]} \in \mathbb{R}^{n^{[l]} \times n^{[l-1]}}$
  • $b^{[l]} \in \mathbb{R}^{n^{[l]} \times 1}$
  • $A^{[l-1]} \in \mathbb{R}^{n^{[l-1]} \times m}$
  • ⇒ $Z^{[l]} = W^{[l]} A^{[l-1]} + b^{[l]} \in \mathbb{R}^{n^{[l]} \times m}$

  确保维度匹配是实现正确性的关键!


七、总结要点

项目内容
核心思想前向传播 = 逐层线性变换 + 激活函数
单样本公式$z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]},\quad a^{[l]} = g(z^{[l]})$
向量化公式$Z^{[l]} = W^{[l]} A^{[l-1]} + b^{[l]},\quad A^{[l]} = g(Z^{[l]})$
输入表示$x = a^{[0]} = A^{[0]}$
输出表示$\hat{y} = a^{[L]},\quad \hat{Y} = A^{[L]}$
是否可全向量化?❌ 不可;层间依赖需 for 循环
调试技巧手动检查每一步矩阵维度
本文由作者按照 CC BY 4.0 进行授权