Ch06 神经网络基础修订于 二〇二六年七月二日

6.8 前向传播:从输入到输出

前向传播(Forward Propagation)是神经网络”用”的过程——输入数据一层层往前走,每层做矩阵乘法加激活函数,最终输出一个结果。你每次用 ChatGPT 回答问题,它内部做的就是这件事。

6.8.1 矩阵形式:一个批次一起算

前向传播不是逐个神经元地计算,而是用矩阵乘法一次性处理整层。对于单层:

Z = X · W + b      (线性变换:加权求和)
A = f(Z)           (非线性激活,f 是激活函数)

其中 X 是输入矩阵(形状为 [样本数, 特征数]),W 是权重矩阵(形状为 [输入特征数, 输出神经元数]),b 是偏置向量,f 是 激活函数 (Activation Functions)。

为什么用矩阵而不是逐个算?因为 GPU 是为矩阵乘法而生的——一次矩阵运算能同时处理几百个样本、几千个神经元。这种并行能力正是深度学习能扩展到千亿参数规模的基础。1

6.8.2 逐层传递:信息的三明治加工

一个典型三层网络的前向传播过程,就像做三明治——每一层对数据进行一次加工,层层叠加:

  1. 第一层(底层特征):Z₁ = X·W₁ + b₁,A₁ = ReLU(Z₁) —— 提取最基础的模式
  2. 第二层(中层组合):Z₂ = A₁·W₂ + b₂,A₂ = ReLU(Z₂) —— 将基础模式组合成复杂特征
  3. 输出层(最终决策):Z₃ = A₂·W₃ + b₃,ŷ = Softmax(Z₃) —— 产生最终预测

每一层的输出 A 叫做”激活值”——可以理解为这一层对输入数据的”理解结果”。就像盖房子:底层打地基(边缘和纹理),中层砌墙(形状和部件),顶层封顶(完整的物体语义)。6.3 神经网络为什么有效中讲的层级抽象,正是通过这一层层的加工实现的。

一个关键细节:前向传播过程中,每一层的中间结果(Z 和 A)都必须保存下来。原因很简单——之后的反向传播需要这些中间值来计算梯度。这也是为什么训练比推理更吃显存:训练时必须同时存激活值和梯度,而推理时算完一层就可以丢弃前一层的中间结果。

6.8.3 自回归生成:LLM 的重复前向传播

你每次问 ChatGPT 一个问题,它内部做的是一个循环:

你的问题被编码成向量 -> 经过 96 层 Transformer 做前向传播 -> 输出层产生下一个 token 的概率分布 -> 选一个概率最高的 token -> 把这个 token 拼回到输入末尾 -> 再做一次完整的 96 层前向传播 -> 下一个 token…

这个循环叫”自回归生成”——每次只生成一个 token(AI 处理的最小文本单位,见 Ch01|Ch01),把它加回输入,再生成下一个。生成一段 100 个 token 的回复,就需要做 100 次完整的前向传播。这也是为什么长回复比短回复慢——计算量随输出长度线性增长。

6.8.4 前向传播 vs 反向传播

“推理”(Inference)就是只做前向传播、不做反向传播——模型参数已经固定,你只是在用它。训练时则是前向和反向交替进行:

前向传播反向传播
数据从输入流向输出梯度从输出流回输入
目的是”做题”——产生预测目的是”对答案”——计算每个参数该改多少
需要缓存中间激活值利用缓存的激活值计算梯度

下一节的反向传播会详细讲”对答案”这一半——前向算出预测后,怎么把差距的责任分配回每个参数,让模型下一次做得更好。


← 上一节:6.7 权重初始化 | 下一节:6.9 损失函数:衡量模型多差 →

注释

  1. Goodfellow, Bengio & Courville, “Deep Learning”, MIT Press, 2016, Chapter 6 ↩

关联9

知识图谱

局部图谱 · 点节点跳转