想象一场特殊的大型开卷考试。传统考试中,Causal LM 是一种“接龙考试”:你必须从第一题连续做到最后一题,做第 t 题时只能看前面已经做过的 t-1 题,绝不能回头看。这种模式擅长写文章、接话头,却很难做“阅读理解”。MLM 则是“完形填空考试”:老师随机涂掉一些词,要求你根据左右上下文猜出答案,因此能双向利用信息,却很难一口气生成完整段落。 Prefix-LM 融合了两者:试卷最前面放一大段“材料区”,允许随意翻看、来回比对;后面是“答题区”,必须按顺序从前到后作答,但做后面的题时,可以随时回看材料和已经写下的答案。这样,模型既拥有双向理解的视野,又保住了自回归生成的能力。本文会用这场“开卷考试”的比喻,拆解 Prefix-LM 的架构、注意力掩码、训练目标和演进影响。
理解 Prefix-LM,等于握住预训练范式从单向到双向、从理解到生成的统一演进逻辑,这将是你看懂 GPT / BERT / T5 / GLM 家族差异的关键钥匙。
目录
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
Prefix-LM\u67B6\u6784: \u524D\u7F00(\u53CC\u5411) + \u751F\u6210(\u5355\u5411) \u6CE8\u610F\u529B\u89C4\u5219\u25A0 \u524D\u7F00\u53CC\u5411\u25A0 \u751F\u6210\u56E0\u679C\u6CE8\u610F\u529B\...\u6CE8\u610F\u529B\u89C4\u5219\u25A0 \u524D\u7F00\u53CC...</sp...
背景动机:为什么需要一张“先看材料再答题”的考卷
想象你参加一场考试。Causal LM 是一场“接龙考试”:试卷只有一页,你必须从第一题一路做到最后一题,做第 t 题时只能参考前面 t-1 题的结果,绝对不能回头。这种方法擅长写文章、做对话,但对“理解”很吃亏:比如判断一句话的情感,你往往需要同时看到前后文。MLM 则是“完形填空考试”:老师随机涂掉一些词,要求你根据左右上下文猜出来,因此能双向利用信息,却很难像写作文一样一口气生成完整段落。
于是研究者想要一张既能“读全材料”又能“顺序作答”的考卷。Prefix-LM 把输入分成两段:开头是一段共享材料(prefix),可以来回翻看;后面是作答区(target),从前往后写。这样,模型既拥有了双向理解的视野,又保留了自回归生成的能力。这个动机可以用自回归语言模型的经典公式来理解:
这个连乘逻辑是单向模型的“铁律”,也是 Prefix-LM 要突破的起点:后半段依然遵守它,但前半段被允许跳出去自由查看材料。打个比方,Prefix-LM 只是把“接龙考试”升级成“开卷考试”:后面的接龙规则没变,前面多了可以反复翻看的资料区。
- 序列表示
x_1, x_2, ... x_T表示长度为 T 的 token 序列,可以想象成考卷上按顺序排好的 T 道题。 - 条件概率
P(x_t | x_1, ..., x_{t-1})表示做到第 t 题时,只能参考已经写完的前 t-1 题答案。 - 连乘符号
\prod把所有条件概率依次乘起来,得到整张试卷按顺序全部完成的联合概率。
架构设计:试卷上的“材料区”和“答题区”
如果沿用开卷考试的比喻,Prefix-LM 的输入不是一整条顺序文本,而是被分割为两个区域。前面 p 个 token 组成“材料区”,负责提供背景、题目和共享上下文;后面的 n-p 个 token 组成“答题区”,是模型需要按顺序生成的内容。放在 Transformer 里,这两段共享同一套参数,而不是像 Encoder-Decoder 那样拆成两个独立的模型。
分段方式可以用一个拼接表达式表示:
这段架构关键在于“共享同一套参数”:前缀区不是单独的小模型,目标区也不是额外解码器。训练时,前缀可以是用户给的提示,也可以是随机截取的一段上下文;推理时,前缀通常来自真实输入,目标区则是模型要生成的回复。所以 Prefix-LM 考场里没有“两套试卷”,只有一张卷子上的两个区域:材料区可以随意勾画,答题区按序书写,二者共用同一支笔、同一套规则。
- 方括号拼接
X代表完整输入序列,方括号表示把两个部分拼接成同一条序列。 - 前缀界限
p是材料区的长度,也是“答题区”的起始位置标记;x_1...x_p共 p 个 token。 - 下括号标注
\underbrace{...}_{\text{答题区}}在数学公式中标出后面 n-p 个 token 的角色,帮助读者一眼看清两段分工。
注意力掩码:把“谁能看谁”画进矩阵
考试规则要落地到 Transformer,靠的是注意力掩码矩阵。想象一个班级座位表:第 i 行是正在作答的学生,第 j 列是被查看的对象。M[i][j]=1 表示学生 i 可以看到位置 j,0 表示被隔板挡住。在 Prefix-LM 中规则是:如果 i 在材料区(i≤p),这个学生拥有全景视野,能看到包括未来答题区在内的所有位置;如果 i 在答题区(i>p),他只能看座位表左侧已经出现的内容(含整个材料区),不能偷看还没做到的题。
用公式表达如下:
这样,掩码矩阵就像考务老师贴在墙上的一张座位表,把每个 token 的视野范围清清楚楚画出来。Target 行的 j <= i 会自动覆盖全部前缀列,因为前缀列 j 一定小于目标行 i,所以答题区天然能看到所有材料——这正是开卷考试中“随时查阅资料”的体现。
- 行列下标
i是当前 query 所在位置,j是被 attend 的 key 所在位置;矩阵第 i 行第 j 列决定 query i 能否看到 key j。 - 前缀条件
i \le p表示 query 位于材料区,这一行所有格子都被置为 1,即“全景视野”。 - 目标区条件
j \le i表示答题区的 query 只能看自己左侧(包括前缀区和已经生成的 target),这也是自回归生成的基本规则。 - 兜底条件
\text{otherwise} \to 0表示所有不在以上两种情况内的位置都被挡住,不能参与 attention。
对比分析:三种考试的信息视野
把三种范式放在同一考场比一比。Causal LM 的掩码是严格下三角:第 i 个 token 只能看到 j≤i 的位置;MLM 是完形填空:被选中的位置看不到自己,但可以看左右上下文;Prefix-LM 则把前 p 行全部放行。三者对“视野利用率”的影响可以用一个指标量化:平均每个 token 能看到多少比例的上下文。
若序列长度为 n、前缀长度为 p,Prefix-LM 的可见率 U 可以写成:
举个例子,当 n=100、p=20 时,可见率约为 0.68,明显高于 Causal LM 的约 0.50。所以 Prefix-LM 是给“接龙考试”增加了一个全景材料区的折中方案:随着 p 变大,视野从约 50% 向 100% 平滑过渡,但又不放弃自回归的顺序感。这也是它能在理解和生成两类任务上通吃的原因。
- 双求和与平均
1/n^2是对 n×n 个注意力位置取平均,相当于统计整张座位表中开放座位的占比。 - 材料区贡献
p n表示前 p 行每行都能看到全部 n 个位置,共贡献 p×n 个可见格子。 - 答题区贡献
\sum_{i=p+1}^{n} i表示第 i 个目标 token 只能看到左侧 i 个位置,所以对可见格子数的贡献是 i。 - 化简合并把等差数列求和代入并整理,得到最终简洁形式,方便直接估算不同 p 下的视野利用率。
预训练目标:只在答题区算分
一场考试要有评分标准。Causal LM 对每个 token 都预测、每个位置都算损失;MLM 对被挖掉的位置算损失;Prefix-LM 则明确规定了:材料区是参考资料,不直接算分,只有答题区按顺序生成的 token 才计入损失。也就是说,模型必须学会“读懂材料,再用自己的话答题”,而不是把材料机械背诵出来。
用交叉熵表示训练目标:
这种“材料不算分、答题才给分”的设计,迫使模型把前缀当作上下文来理解,而不是当作刻板记忆——就像开卷考试真正考的是运用材料的能力。模型不能靠“背下前缀词表”得分,必须学会在前缀中寻找线索,并按顺序组织目标区内容。
- 平均系数
-1/(n-p)对目标区长度取平均,使不同前缀长度下的损失可比。 - 求和范围
\sum_{t=p+1}^{n}只遍历答题区,前缀 token 不参与误差统计。 - 条件概率
P_\theta(x_t | x_1, ..., x_{t-1})表示参数为 θ 的模型在给定前文时预测当前 token 的概率。 - 负对数
-\log让概率越接近 1 时损失越小,引导模型把答案区的每一步都预测准。
影响演进:一张考卷如何影响后来者
Prefix-LM 最大的贡献,是把“理解”和“生成”收编到同一个框架里。后来的 GLM、T5、UniLM 等模型,都在不同程度上采用了这种“前缀共享上下文、目标区自回归”的分工。它可以看作从 Causal LM 到 Encoder-Decoder 之间的一个连续过渡:p 很小时接近 GPT,p 很大时接近 BERT,p 取中间值时则是灵活的统一模型。
从条件生成视角看,Prefix-LM 要学习的目标可以写成:
这种“前缀双向、目标自回归”的范式就像一种被验证有效的考试规则,很快被 GLM、T5 等“学校”采用,成为预训练范式演进史上重要的一站。它告诉我们,生成和理解并不是水火不容:只要把“可回看的材料区”和“必须顺序作答的答题区”结合起来,一张考卷就能同时训练两种关键能力。
- 条件概率左侧
P_\theta(y_1, ..., y_m | x_1, ..., x_p)表示在给定材料区的情况下,生成一段目标文本的概率。 - 目标区连乘
\prod_{t=1}^{m}把目标区 m 个 token 的生成概率连乘,体现“逐字作答”的过程。 - 条件窗口
x_1...x_p, y_1...y_{t-1}表示每次生成新的 target token 时,模型已经看见完整材料区和此前生成的目标 token。
实践选择:调节“材料区”的长短
同一张开卷考卷,材料区给多长才合适?前缀太短,答题缺少上下文;前缀太长,答题区变短,训练出的生成能力有限。这个比例是训练前需要调的超参数,也是理解 Prefix-LM 灵活性的钥匙。实际操作中,提问、摘要、指令等任务通常把提示词(prompt)放在前缀区,把待生成内容放在目标区;纯理解任务则可以把整句话都放进前缀区,让模型用双向视野编码。
评估答题水平时,常用困惑度(PPL):
这就像考务老师在正式考试前先做几次模拟卷:材料给长一点还是短一点,不能拍脑袋,要看困惑度分数。调整到合适长度后,Prefix-LM 才能既读懂材料,又生成流畅答案;在任务选择上,生成类任务偏好保留足够的 target 区,理解类任务则可以加大 prefix 区比例。
- 指数函数
\exp把负对数平均值映射回概率尺度,避免损失值太小不直观。 - 损失平均
-\frac{1}{n-p}\sum_{t=p+1}^{n} \log P_\theta(\cdots)与训练损失几乎一致,代表模型在答题区上的平均“意外程度”。 - 条件与参数
P_\theta中下标 θ 强调这是当前模型参数下的预测概率,调参后会改变 PPL。
AI 应用场景
大规模统一预训练中的任务设计
阶段:预训练与训练数据构建
解决的问题:传统做法把理解和生成拆成两套目标,导致上游模型能力割裂,后续微调成本高。Prefix-LM 可以在同一个模型上用统一目标训练:前缀区做双向理解,目标区做自回归生成。
具体案例:某团队训练中文大模型时,将新闻文章前 30% 作为前缀区,后 70% 作为目标区。模型既在前缀区整合全文信息,又在目标区练习顺序生成,最终在下游摘要任务上无需额外拼接两个模型,效果显著提升。
条件文本生成与智能助手
阶段:推理与微调
解决的问题:普通 Causal LM 在生成回复时,提示词内部的 token 也只能从左往右互相看,导致“读题”不够充分。Prefix-LM 让提示词区域可以双向关注,相当于助手先完整读题,再组织回答。
具体案例:智能客服系统中,把用户历史、商品资料和当前问题都放进前缀区,目标区生成回复。前缀区内不同信息可以互相参照,系统对复杂多轮问题的回答准确率比纯 Causal LM 基线提高约 15%。
长文档摘要与 RAG 管线
阶段:推理服务与架构设计
解决的问题:长文档生成摘要时,Causal LM 对文档后部信息利用不足;Prefix-LM 可以把全文作为前缀双向编码,再顺序生成摘要,兼顾全局理解与局部生成。
具体案例:法律合同摘要系统中,将合同全文放入前缀区,目标区输出关键条款摘要。由于前缀区能互相参照前后条款,模型对“违约责任”等跨章节信息的召回率明显提升,漏点率下降约 20%。
Python 演示
import numpy as np def build_prefix_mask(n, p): # 返回 Prefix-LM 的注意力遮挡矩阵,1 表示可见,0 表示遮挡 mask = np.zeros((n, n), dtype=np.float32) for i in range(n): for j in range(n): if i < p or j <= i: mask[i, j] = 1.0 return mask def masked_attention(q, k, v, mask): # 简化版单头注意力计算,mask 会被加到分数上 d_k = q.shape[-1] scores = q @ k.T / np.sqrt(d_k) # 被遮住的位置加上一个很大的负数,softmax 后权重为 0 scores = scores + (mask - 1.0) * -1e9 weights = np.exp(scores - scores.max(axis=-1, keepdims=True)) weights = weights / weights.sum(axis=-1, keepdims=True) return weights @ v if __name__ == '__main__': n, p, d = 8, 3, 16 rng = np.random.default_rng(42) q = rng.normal(size=(n, d)) k = rng.normal(size=(n, d)) v = rng.normal(size=(n, d)) mask = build_prefix_mask(n, p) out = masked_attention(q, k, v, mask) print('mask:\n', mask) print('output shape:', out.shape) print('第 6 行能看到前缀和左侧内容,所以 attention 权重非零位置数:', int((mask[5] > 0).sum()))
if i < p or j <= i:核心掩码规则:前缀行全可见,目标行只看左侧。scores = scores + (mask - 1.0) * -1e9把 0 位置变成很大的负数,softmax 后权重近似为 0。weights = np.exp(scores - scores.max(axis=-1, keepdims=True))数值稳定的 softmax,保证被遮住的位置权重为 0。rng.normal(size=(n, d))生成随机 Q/K/V,模拟一个小型注意力层的输入数据。
常见误区
误区以为 Prefix-LM 只是给输入前面加几个特殊 token,然后像 BERT 一样让所有 token 互相看,本质还是完形填空。
正解Prefix-LM 的关键不是“加 token”,而是注意力掩码改变:前缀区全可见,目标区只能自回归顺序生成,训练损失也只计算目标区。它不是 BERT 式完形填空,而是“部分双向部分单向”的混合自回归模型。就像开卷考试不是把答案多抄一份在封面,而是改变了作答规则。
为何常见:“Prefix”这个词让人联想到 BERT 的 [CLS] 前缀,而且前缀区确实有双向注意力,容易误以为整体仍是双向模型。
误区看到掩码图中前缀行全 1,就以为整个矩阵都全 1,认为 Prefix-LM 是全局双向模型。
正解只有前缀区的 token 拥有全视野;目标区的 token 仍然只能看左侧(包括整个前缀区和前面的目标区),不能看后面的内容。可以理解为“材料区的人能环顾考场,答题区的人却必须向前看”。
为何常见:很多示意图只画出最上面的 prefix 行全可见,忽略了 target 行仍然是下三角限制,导致以偏概全。
误区既然前缀区是双向的,模型是不是也要像 BERT 一样预测前缀区中被 mask 的词?
正解Prefix-LM 的训练损失通常只对目标区计算;前缀区只是上下文条件,不是预测对象。好比考试不会给材料区判分,材料只是答题依据;目标区才是要得分的答案。
为何常见:混用了 MLM“见到掩码就预测”的心智模型,忽略了预训练目标与注意力掩码是两码事。
误区看到可见率公式随 p 上升,就觉得 prefix 越长模型越强,最好把整句话都放进 prefix。
正解前缀长度增加会提升上下文可见率,但会压缩目标区长度,导致顺序生成训练样本变少、生成能力下降,还可能增加训练开销。实际需要通过困惑度等指标调参,取折中方案。就像材料区太长,答题时间反而会被挤占。
为何常见:只看到可见率公式单调上升,忽略了目标区长度和训练信号也随之变化。
面试题
Q1. 在 Prefix-LM 中,前缀区域中的 token 能够查看哪些位置?
- A.只能查看前一个 token
- B.只能查看左侧全部 token
- C.可以查看序列全部位置← 正确答案
- D.只能查看目标区域内容
答案:C。前缀区对应掩码公式中 i≤p 的行全为 1,即拥有全景视野;目标区才受 j≤i 限制。A、B 把前缀误当成单向模型,D 则把视野限定到目标区,都不符合 Prefix-LM 的规则。
Q2. Prefix-LM 预训练时,通常在哪里计算损失?
- A.只有前缀区域
- B.只有目标区域← 正确答案
- C.所有输入位置
- D.随机抽取的位置
答案:B。Prefix-LM 的目标是让目标区按顺序生成,前缀区作为条件上下文不算分。C 是 Causal LM 的做法,D 是 MLM 的做法,只有 B 符合“材料不算分、答题才给分”的设计。
Q3. 若序列长度 n=6,前缀长度 p=2,第 4 个 token 能关注到哪些 token?
- A.第 1 到第 4 个 token← 正确答案
- B.第 3 到第 6 个 token
- C.第 1 到第 2 个 token
- D.第 4 到第 6 个 token
答案:A。第 4 个 token 在目标区(i>2),规则 j≤i 让它能看第 1 到第 4 个 token,其中包括全部前缀。B、D 包含了未来 token,C 漏掉了已生成的目标 token,因此错误。
Q4. Prefix-LM 相对 Causal LM 的主要优势是?
- A.参数量明显更少
- B.生成速度大幅提升
- C.前缀区可双向编码← 正确答案
- D.完全不需要注意力机制
答案:C。Prefix-LM 的核心优势是前缀区能同时看前后文,帮助理解上下文;它并没有减少参数量,也没有提速,更没有去掉注意力。D 明显错误,A、B 与架构事实不符。
Q5. 当 p 从 0 逐渐增大到 n 时,Prefix-LM 的注意力可见率如何变化?
- A.从 50% 附近升到 100%← 正确答案
- B.从 100% 附近跌到 50%
- C.一直维持在 50% 附近
- D.先明显下降再快速上升
答案:A。p=0 时退化为 Causal LM,可见率约为 50%;p=n 时退化为双向编码,可见率为 100%。中间随 p 增大单调上升,因此只有 A 正确。
Q6. Causal LM 在大序列上的上下文利用率大约是?
- A.约 25%
- B.约 50%← 正确答案
- C.约 75%
- D.约 100%
答案:B。Causal LM 的掩码是下三角,可见格子数约为 n²/2,因此大序列下利用率趋近 50%。Prefix-LM 通过引入前缀区让利用率高于 50%,但 Causal LM 本身仍只有约一半。
Q7. 对于 Prefix-LM 的掩码矩阵,若第 i 行满足 i≤p,则这一行的取值是?
- A.左侧为 1 右侧为 0
- B.所有位置都为 1← 正确答案
- C.所有位置都为 0
- D.对角线下为 1
答案:B。当 query 位置 i 落在前缀区时,掩码公式第一个条件 i≤p 成立,这一行全部为 1,表示能看到包括未来 target 在内的所有位置。A、D 是 Causal 或下三角特征,C 表示完全不可见,均错误。
Q8. 下列哪些是 Prefix-LM 的设计特点?
- A.前缀区使用双向注意力← 正确答案
- B.目标区按顺序自回归← 正确答案
- C.所有位置均随机遮蔽
- D.理解和生成统一训练← 正确答案
答案:ABD。A 和 B 正好对应前缀区与目标区的掩码分工,D 是整体目标。C 是 MLM 的完形填空思路,不符合 Prefix-LM 的目标区自回归设计。
Q9. Prefix-LM 与 MLM 的区别有哪些?
- A.预测被遮蔽的词← 正确答案
- B.完全不需要注意力
- C.目标区顺序生成内容← 正确答案
- D.都不使用 Transformer
答案:AC。MLM 的核心是预测被 mask 的词,Prefix-LM 的核心是目标区按顺序生成。两者都基于 Transformer 注意力,所以 B、D 错误。A 描述 MLM,C 描述 Prefix-LM。
Q10. 关于 Prefix-LM 对后续模型的影响,正确的有哪些?
- A.启发了 GLM 的生成策略← 正确答案
- B.与 T5 前缀编码思想有关← 正确答案
- C.彻底淘汰了 Causal LM
- D.帮助统一理解与生成任务← 正确答案
答案:ABD。Prefix-LM 的“前缀共享上下文 + 目标自回归”思想被 GLM、T5 等继承,并推动了理解与生成的统一。但 Causal LM 在 GPT 等纯生成模型中依然大量使用,并没有被淘汰,因此 C 错误。