跳转至

自回归模型 · BERT / GPT 架构详解

有哪些序列建模范式、BERT 与 GPT 到底差在哪、为什么机器人 VLA(如 π₀-FAST)用的是两者的混合体 Prefix-LM。是 Action Tokenization 里"自回归 + 交叉熵""prefix 双向 / action 因果掩码"的展开。

一句话先记住

所有差别都归结到一件事每个 token 能"看到"哪些其他 token(注意力掩码)。双向看全部 → 擅长理解(BERT);因果只看左边 → 能自回归生成(GPT)。架构其实是同一套 Transformer block,区别只在掩码和训练目标。


0. 序列模型到底在估计什么

给一串 token \(x_1,x_2,\dots,x_n\),语言模型本质是在估计它们的联合概率 \(p(x_1,\dots,x_n)\)。怎么拆这个联合概率,决定了模型范式:

范式 怎么分解 / 训练目标 能生成吗
自回归 (AR) \(p(x)=\prod_t p(x_t\mid x_{<t})\),预测下一个 token ✅ 天生为生成而设计
自编码 / 掩码 (AE/MLM) 遮住一部分 \(\tilde x\),重建 \(p(x_{\text{masked}}\mid \tilde x)\) ❌ 主要用于理解/表征
序列到序列 (seq2seq) 编码输入,解码输出 \(p(y\mid x)\) ✅ 翻译/摘要类

“自回归”名字的由来

auto-regressive = 用自己已经生成的历史 \(x_{<t}\) 去回归预测下一个 \(x_t\),再把它接回输入,循环往复。和动作生成里"逐 token 采样、把 | 当终止符"是同一件事。


1. 三大架构范式(同一种积木,三种搭法)

Transformer 的积木是「多头自注意力 + 前馈层」。三大范式只是怎么堆叠 + 用什么掩码不同:

Encoder-only(BERT) 双向自注意力 ×N 前馈 输入全部可见 ↑ 输出每个位置的表征 Decoder-only(GPT) 因果自注意力 ×N 前馈 只能看左边 ↑ 预测下一个 token Encoder-Decoder(T5) 编码器(双向) 解码器(因果) 交叉注意力连接
同样的 Transformer block,区别只在「掩码方向」和「堆叠方式」。

2. 核心机制:注意力掩码(亲手切换看区别)

自注意力让每个 token 去"查询"其他 token。掩码决定哪些查询被允许。这是 BERT / GPT / Prefix-LM 唯一的本质差别。下面这张图:行 = 正在计算的 token(query),列 = 被注意的 token(key),亮格 = 允许注意

Demo · 三种注意力掩码对比
点按钮切换。序列假设是 [CLS] 任务 提示 ; A1 A2 A3 |,前 3 个是 prompt 前缀、后 4 个是要生成的 action。
  • 因果掩码(下三角):token \(t\) 只能注意 \(\le t\) 的位置。保证"预测下一个时不偷看未来",是自回归生成的前提。GPT 全程用它。
  • 双向掩码(全亮):每个 token 看到整句。理解任务(分类、抽取)需要全局上下文,但无法直接逐个生成(会偷看答案)。BERT 用它。

3. BERT — 编码器 / 双向 / 掩码语言模型

Bidirectional Encoder Representations from Transformers。只用 Transformer 的编码器栈,全程双向注意力。

训练目标:MLM(Masked Language Modeling,完形填空)

输入:  机器人 [MASK] 可爱        ← 随机遮住 15% 的 token
目标:  预测 [MASK] = "很"        ← 用左右两边的上下文一起猜

因为要"用两边猜中间",所以必须双向。另一个经典目标是 NSP(判断两句是否相邻),后续工作(RoBERTa)发现可去掉。

BERT 不能直接做生成

它擅长把整句"读懂"成向量表征(适合分类、检索、命名实体识别),但因为是双向的,没法逐 token 自回归生成——所以聊天/写作类任务用的是 GPT 那一支。

属性 BERT
结构 Encoder-only
注意力 双向
训练目标 MLM(+NSP)
强项 理解 / 表征(分类、抽取、检索)
能否生成
代表后代 RoBERTa, ALBERT, DeBERTa, ELECTRA

4. GPT — 解码器 / 因果 / 自回归

Generative Pre-trained Transformer。只用 Transformer 的解码器栈(去掉了对编码器的交叉注意力),全程因果掩码。

训练目标:next-token prediction(预测下一个 token)

\[ \mathcal{L}=-\sum_t \log p_\theta(x_t\mid x_{<t}) \]

这正是 π₀-FAST 把动作 token 当语言、做 next-token 交叉熵的目标。下面这个 demo 演示自回归是怎么"逐字吐出"的:

Demo · 自回归生成(逐 token 采样)
点"生成下一个 token",模型基于已生成的历史给出下一个 token 的概率分布并采样,再接回输入——这就是 GPT / 动作逐 token 采样的循环。
属性 GPT
结构 Decoder-only
注意力 因果(单向)
训练目标 next-token 预测
强项 生成(对话、写作、代码)
能否生成 ✅(天生)
代表家族 GPT-⅔/4, LLaMA, Mistral, Qwen, Gemma, Claude

5. T5 / BART — 编码-解码(seq2seq)

把两支合起来:编码器双向读入输入(如英文句子),解码器因果地生成输出(如中文句子),中间用交叉注意力让解码器读到编码器的表征。天生适合"输入→输出"的转换任务(翻译、摘要)。

T5 的统一视角

T5 把所有任务都变成"文本→文本":分类 = 生成标签词,翻译 = 生成译文。BART 则用"破坏文本再重建"的去噪目标预训练。两者都是 encoder-decoder。


6. Prefix-LM — 前缀双向 + 后缀因果(π₀-FAST 用的就是它)

这是连接本页和动作 tokenization 的关键。Prefix-LM(前缀语言模型)是 decoder-only 的一个变体:把序列分成前缀后缀两段,用一张混合掩码

  • 前缀(prompt + 图像 + 离散化 state):内部双向注意(像 encoder,充分理解条件)。
  • 后缀(要生成的 action token):因果注意(像 decoder,保证自回归)。后缀能看到全部前缀。

用上面 Demo 的"Prefix-LM"按钮可以直接看到这张掩码的形状:左上是一个全亮方块(前缀双向),右下是一个下三角(后缀因果)。

为什么机器人 VLA 选 Prefix-LM

观测(图像/指令/状态)是已知条件,应当被充分双向理解;而动作是要生成的,必须因果。Prefix-LM 一张掩码同时满足两边——PaliGemma、π₀-FAST 都用它。


7. 模型家族全表(速查)

模型 范式 注意力 训练目标 典型用途
BERT / RoBERTa Encoder-only 双向 MLM 理解、分类、检索
GPT / LLaMA / Gemma / Claude Decoder-only 因果 next-token 生成、对话
T5 / BART Encoder-Decoder 编码双向+解码因果 去噪 / span 重建 翻译、摘要
PaLM / UL2 / PaliGemma Prefix-LM / 混合 前缀双向+后缀因果 (prefix) next-token 多模态、条件生成
π₀-FAST Prefix-LM (VLA) 前缀双向+动作因果 action token 交叉熵 机器人动作生成

为什么现在主流是 Decoder-only

GPT 路线(decoder-only + 因果)用一个目标就能既学表征又能生成,规模化最简单,所以大模型几乎都走这支。BERT 这种 encoder-only 仍在"只需理解、不需生成"的场景(如检索、排序)很强。


8. 回到 action tokenization

串起来(详见 Action Tokenization):

  1. 动作被 tokenizer(FAST/FSQ/Binning)变成离散 token。
  2. π₀-FAST 用 Prefix-LM:前缀(观测+指令+state)双向、后缀(action)因果。
  3. 训练用 GPT 式 next-token 交叉熵,只在 action 段计损失。
  4. 推理用 自回归采样(本页 Demo),靠 temperature 取出多模态的不同解。

现在你应该能回答

为什么 VLA 不用纯 BERT?(不能生成)为什么不用纯因果 GPT 而要 Prefix-LM?(让观测条件被双向充分理解)为什么训练像 GPT?(next-token 交叉熵 + 天然多模态)。


延伸阅读