文章

23 计算神经网络的输出

23 计算神经网络的输出

1. 神经网络结构回顾

  • 考虑一个 具有一个隐藏层 的神经网络:

    • 输入层:3 个特征 → $\mathbf{x} = [x_1, x_2, x_3]^\top \in \mathbb{R}^3$
    • 隐藏层:4 个神经元(节点)
    • 输出层:1 个神经元(用于二分类,输出 $\hat{y}$)

💡 注:这种网络被称为 “两层神经网络” (因为只计带参数的层:隐藏层 + 输出层)。


2. 单个神经元的计算(类比逻辑回归)

  每个神经元执行两步计算:

  1. 线性组合

    \[z = \mathbf{w}^\top \mathbf{x} + b\]
  2. 激活函数(Sigmoid)

    \[a = \sigma(z) = \frac{1}{1 + e^{-z}}\]

  这与逻辑回归完全一致。神经网络就是将这一过程 在多个神经元上重复


3. 隐藏层的逐节点计算(非向量化形式)

  对隐藏层第 $i$ 个神经元($i = 1,2,3,4$):

\[z^{[1]}_i = (\mathbf{w}^{[1]}_i)^\top \mathbf{x} + b^{[1]}_i\] \[a^{[1]}_i = \sigma(z^{[1]}_i)\]

  其中:

  • 上标 $[1]$ 表示 第 1 层(隐藏层)
  • 下标 $i$ 表示该层的第 $i$ 个神经元

4. 向量化:高效计算整个隐藏层

  为了避免 for 循环,我们将所有神经元的计算 向量化

定义参数矩阵和向量:

  • 权重矩阵 $\mathbf{W}^{[1]} \in \mathbb{R}^{4 \times 3}$:

    \[\mathbf{W}^{[1]} = \begin{bmatrix} (\mathbf{w}^{[1]}_1)^\top \\ (\mathbf{w}^{[1]}_2)^\top \\ (\mathbf{w}^{[1]}_3)^\top \\ (\mathbf{w}^{[1]}_4)^\top \end{bmatrix}\]
  • 偏置向量 $\mathbf{b}^{[1]} \in \mathbb{R}^{4 \times 1}$:

    \[\mathbf{b}^{[1]} = \begin{bmatrix} b^{[1]}_1 \\ b^{[1]}_2 \\ b^{[1]}_3 \\ b^{[1]}_4 \end{bmatrix}\]

向量化前向传播(隐藏层):

\[\mathbf{z}^{[1]} = \mathbf{W}^{[1]} \mathbf{x} + \mathbf{b}^{[1]} \quad \in \mathbb{R}^{4 \times 1}\] \[\mathbf{a}^{[1]} = \sigma(\mathbf{z}^{[1]}) \quad \text{(Sigmoid 逐元素作用)}\]

✅ 尺寸验证:

  • $\mathbf{W}^{[1]}$: $4 \times 3$
  • $\mathbf{x}$: $3 \times 1$
  • $\mathbf{b}^{[1]}$: $4 \times 1$
  • $\mathbf{z}^{[1]}, \mathbf{a}^{[1]}$: $4 \times 1$

5. 输出层的计算

  输出层只有一个神经元,其参数为:

  • $\mathbf{w}^{[2]} \in \mathbb{R}^{1 \times 4}$
  • $b^{[2]} \in \mathbb{R}$

  计算:

\[z^{[2]} = \mathbf{w}^{[2]} \mathbf{a}^{[1]} + b^{[2]} \quad \in \mathbb{R}\] \[a^{[2]} = \sigma(z^{[2]}) = \hat{y}\]

🔁 注意:这里 $\mathbf{w}^{[2]}$ 是行向量,因此无需转置。

💡 类比:输出层等价于以 $\mathbf{a}^{[1]}$ 为输入的 逻辑回归模型


6. 整体前向传播流程(单样本)

  给定输入 $\mathbf{x} \in \mathbb{R}^3$,神经网络输出 $\hat{y}$ 的完整计算步骤为:

\[\begin{aligned} \mathbf{z}^{[1]} &= \mathbf{W}^{[1]} \mathbf{x} + \mathbf{b}^{[1]} \\ \mathbf{a}^{[1]} &= \sigma(\mathbf{z}^{[1]}) \\ z^{[2]} &= \mathbf{w}^{[2]} \mathbf{a}^{[1]} + b^{[2]} \\ a^{[2]} &= \sigma(z^{[2]}) = \hat{y} \end{aligned}\]

✅ 这就是 4 行代码 实现整个神经网络的前向传播!


7. 符号约定补充

  • 输入可记作:$\mathbf{a}^{[0]} = \mathbf{x}$
  • 最终输出:$\hat{y} = a^{[2]}$
  • 激活函数 $\sigma(\cdot)$ 在向量上是 逐元素应用

8. 下一步:批量向量化(处理多个样本)

  虽然本视频只讨论 单个训练样本,但实际训练中我们会将 $m$ 个样本堆叠成矩阵:

  • $\mathbf{X} = [\mathbf{x}^{(1)}, \mathbf{x}^{(2)}, \dots, \mathbf{x}^{(m)}] \in \mathbb{R}^{3 \times m}$
  • 相应地,$\mathbf{Z}^{[1]}, \mathbf{A}^{[1]}$ 等也变成 $4 \times m$ 矩阵

  这将在下一节讲解,核心思想是 用矩阵运算一次性计算所有样本,极大提升效率。


✅ 总结要点

概念说明
神经元计算$z = \mathbf{w}^\top \mathbf{x} + b$, $a = \sigma(z)$
向量化动机避免 for 循环,利用矩阵运算加速
隐藏层输出$\mathbf{a}^{[1]} = \sigma(\mathbf{W}^{[1]} \mathbf{x} + \mathbf{b}^{[1]})$
输出层本质是逻辑回归,输入为隐藏层激活值
符号规范上标 $[l]$ 表示层,下标 $i$ 表示神经元
本文由作者按照 CC BY 4.0 进行授权