前向传播
前向传播就是一个网络把输入变成输出的过程:一层接一层,每层算加权和再算激活。这就是「推理」这个词的全部含义。
先动手,再深入阅读
沿着层一步步算出结果 · 6 分钟前向传播就是把一个输入跑过网络、拿到输出的动作。数据从第一层进入,依次向前流过每一层,最后出来一个预测。这就是网络在干活——也正是你每次把 prompt 发给 LLM 时发生的事。
一层一层来
从你的特征向量开始。前向传播按严格的顺序把它过完每一层。
每一层做两件你已经见过的事。它为每个神经元算一个加权和——每个输入乘上自己的权重,求和,再加一个偏置。然后对每个和施加一个激活函数。结果是一个新的向量,它成为下一层的输入。
整个循环就是这些:
vector = input
for each layer:
sums = weights · vector + biases # the weighted sums
vector = activation(sums) # the nonlinearity
output = vector没有分支,没有回头,没有任何花招。信息只朝一个方向走——向前——名字就是这么来的。所谓「深度」网络,只是说这个循环在输出出现之前跑了很多遍。
走一遍具体的例子
假设一个小得可怜的网络要根据两个特征判断一封邮件是不是垃圾邮件:链接的数量和全大写单词的数量,记作 [4, 7]。
第一个隐藏层有三个神经元。每个都用自己的权重和偏置,算出 [4, 7] 的加权和,再把它压一下。这一层可能输出 [0.9, 0.1, 0.8]——三个学出来的中间信号。你没有资格给它们的含义命名;也许第一个神经元对「链接很多」有反应,但那是网络自己选的,不是你选的。
这个 [0.9, 0.1, 0.8] 喂给下一层,下一层把三个信号合成到一个最终神经元上,输出 0.94。可以把它理解为「94% 像垃圾邮件」。一个数字,由一串固定的乘法和加法从左到右算出来。改动任何一个权重,输出就会变;权重才是全部的剧情,前向传播只是把它执行一遍。
输出层说的是任务的语言
最后一层的形状由问题决定。预测价格的回归任务,最后是一个不做压缩的神经元,所以它能输出任何数字。二分类器最后是一个被压到 0 到 1 区间的神经元,读作概率。多分类器最后是每个类别一个神经元,它们的分数会被转成一个加起来等于 1 的概率分布——这个机制就是 softmax,而 LLM 正是用同样的办法,把最后一层变成每一个可能的下一个 token 的概率。
所以前向传播的收尾形状绝非可有可无,正是它让输出有了你能用得上的含义。
前向传播就是推理
一个训练好的模型上线答题时,它做的全部事情就是前向传播。这也是为什么跑模型叫推理——网络从输入推断出输出,权重保持不动。
对 LLM 来说,生成文本就是每个 token 跑一次前向传播:把整个序列向前跑一遍,得到词表上的一个概率分布,采样出一个 token,接到后面,再跑一次前向。这个重复过程就是自回归生成。每一步都不过是上面那个循环,所以单次前向传播的成本——它必须读多少个权重——决定了每生成一个 token 的成本。
光靠前向传播做不到的事
前向传播算出输出。但它自己并不知道这个输出好不好,也不会改进任何东西。一个刚初始化、权重还是随机的网络,能跑出完全合法的前向传播,产出完全没用的输出。
要把没用的变成有用的,还需要两样东西:一个损失函数来衡量输出错得有多离谱,以及一个把权重推向更好方向的办法——梯度下降驱动反向传播,后者反向穿过同一批层。训练就是在「用一次前向传播看网络做了什么」和「用一次反向传播修正它」之间交替。但到了部署阶段,只会跑前向这一个方向。
要点回顾
- 前向传播把输入按顺序过完每一层,每层先算加权和再算激活,最后产出一个输出。
- 它严格单向——没有分支,没有回头——而「深度」只是说同一步骤重复了很多遍。
- 输出层的形状编码了任务:回归是一个数字,二分类是一个概率,多分类是一个分布。
- 跑一个训练好的模型——也就是推理——不过是前向传播;LLM 每生成一个 token 就是这样一次前向。
- 光有前向传播无法学习;衡量并修正误差需要损失函数和反向传播。
下一篇: 激活函数——这一步非线性,让深度网络不只是各层的简单相加。