23 计算神经网络的输出
23 计算神经网络的输出
1. 神经网络结构回顾
考虑一个 具有一个隐藏层 的神经网络:
- 输入层:3 个特征 → $\mathbf{x} = [x_1, x_2, x_3]^\top \in \mathbb{R}^3$
- 隐藏层:4 个神经元(节点)
- 输出层:1 个神经元(用于二分类,输出 $\hat{y}$)
💡 注:这种网络被称为 “两层神经网络” (因为只计带参数的层:隐藏层 + 输出层)。
2. 单个神经元的计算(类比逻辑回归)
每个神经元执行两步计算:
线性组合:
\[z = \mathbf{w}^\top \mathbf{x} + b\]激活函数(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 进行授权