第22题:BERT、GPT、LLaMA 和位置编码有什么差异?
1. 核心回答
这三类模型都建立在 Transformer 上,但主要差异集中在四个维度:
| 模型 | 主体结构 | Attention 可见范围 | 典型预训练目标 | 经典位置表示 |
|---|---|---|---|---|
| BERT | Encoder-only | 每个 Token 可同时看左、右上下文 | Masked Language Modeling,原始 BERT 还包含 NSP | Learned Absolute Position Embedding |
| 原始 GPT | Decoder-only | 只能看当前位置及其左侧 Token | Causal Language Modeling | Learned Absolute Position Embedding |
| LLaMA | Causal Transformer | 只能看当前位置及其左侧 Token | Causal Language Modeling | RoPE |
最核心的理解是:
- BERT强调双向上下文表示,主要服务于文本理解和表征任务;
- GPT强调按照从左到右的条件概率生成文本;
- LLaMA延续因果语言模型路线,同时在 Transformer 细节上采用 RoPE、RMSNorm、SwiGLU 等现代设计;
- 位置编码负责告诉 Transformer Token 的顺序。BERT、早期 GPT 和 LLaMA 使用的位置机制并不相同。
2. BERT 的结构是什么?
BERT 的全称是:
Bidirectional Encoder Representations from Transformers
它主要使用 Transformer Encoder。
对于一个序列:
x1,x2,…,xn x_1,x_2,\ldots,x_nx1,x2,…,xn
BERT 中第iii个 Token 的 Self-Attention 可以访问整个输入序列:
x1,…,xi−1,xi,xi+1,…,xn x_1,\ldots,x_{i-1},x_i,x_{i+1},\ldots,x_nx1,…,xi−1,xi,xi+1,…,xn
因此同一个词的表示能够同时利用左侧和右侧语境。
例如:
I went to the bank to deposit money.
这里的bank可以同时观察:
- 左边的
went to the; - 右边的
deposit money。
模型因此更容易判断这里的bank表示金融机构。
2.1 BERT 怎么训练?
原始 BERT 最核心的训练方式是 Masked Language Modeling,简称 MLM。
例如:
The cat is sitting on the [MASK].模型需要利用两侧上下文预测:
mat可以抽象为:
P(xi∣x1,…,xi−1,xi+1,…,xn) P(x_i\mid x_1,\ldots,x_{i-1},x_{i+1},\ldots,x_n)P(xi∣x1,…,xi−1,xi+1,…,xn)
原始 BERT 还使用 Next Sentence Prediction,简称 NSP,用于判断两个文本片段是否具有连续关系。
因此,BERT 学习的重点是:
给定完整上下文,形成高质量上下文表示。
这类表示天然适合:
- 文本分类;
- 情感分析;
- 命名实体识别;
- 信息抽取;
- 阅读理解;
- 句子匹配。
3. GPT 的结构是什么?
这里用原始 GPT 的经典设计说明。
原始 GPT 使用Decoder-only Transformer,并使用 masked self-attention。
假设输入为:
x1,x2,…,xn x_1,x_2,\ldots,x_nx1,x2,…,xn
第iii个位置只能访问:
x1,x2,…,xi x_1,x_2,\ldots,x_ix1,x2,…,xi
未来 Token:
xi+1,…,xn x_{i+1},\ldots,x_nxi+1,…,xn
会被 causal mask 屏蔽。
Attention mask 可以理解为:
$$
M_{ij}
\begin{cases}
0,&j\leq i\
-\infty,&j>i
\end{cases}
$$
随后:
$$
\operatorname{Attention}(Q,K,V)
\operatorname{softmax}
\left(
\frac{QK^\top}{\sqrt{d_k}}+M
\right)V
$$
这样可以保证模型生成第i+1i+1i+1个 Token 时,只依赖已经出现的 Token。
3.1 GPT 怎么训练?
经典 GPT 采用从左到右的语言模型目标:
$$
P(x_1,\ldots,x_n)
\prod_{t=1}^{n}
P(x_t\mid x_1,\ldots,x_{t-1})
$$
训练过程可以理解成不断完成:
输入: The malware connects to 预测: a然后:
输入: The malware connects to a 预测: remote继续:
The malware connects to a remote预测:
server因此 GPT 的结构与训练目标天然支持逐 Token 生成。
4. LLaMA 和 GPT 有什么关系?
LLaMA 同样属于因果自回归 Transformer 路线。
它和 GPT 在核心语言建模思想上非常接近:
P(xt∣x<t) P(x_t\mid x_{<t})P(xt∣x<t)
也就是根据前面的 Token 预测后面的 Token。
LLaMA 的重要差异主要体现在现代 Transformer 的具体实现。
原始 LLaMA 论文明确列出了三个关键改动:
4.1 Pre-Normalization + RMSNorm
LLaMA 在 Transformer 子层之前执行归一化,并使用 RMSNorm。
可以简化理解为:
x→RMSNorm(x)→Attention x \rightarrow \operatorname{RMSNorm}(x) \rightarrow \operatorname{Attention}x→RMSNorm(x)→Attention
这样设计主要用于改善深层模型训练稳定性。
4.2 SwiGLU
原始 Transformer 的 FFN 使用 ReLU。
LLaMA 使用 SwiGLU 激活结构。
它属于 gated feed-forward 结构,使 FFN 的表达方式更加灵活。
4.3 RoPE
这是本题与位置编码最相关的改动。
LLaMA 删除了传统的绝对位置 Embedding,并在 Transformer 每一层 Attention 中使用 Rotary Position Embedding,即 RoPE。
5. 为什么 Transformer 必须有位置信息?
Self-Attention 本身主要根据 Token 之间的内容关系计算:
QK⊤ QK^\topQK⊤
如果完全不提供顺序信息,那么下面两个序列中的 Token 集合相同:
dog bites manman bites dog模型需要额外知道:
- 谁在第 1 个位置;
- 谁在第 2 个位置;
- 谁在第 3 个位置。
因此 Transformer 通常需要显式或隐式的位置机制。
经典方法主要包括:
- Sinusoidal Positional Encoding;
- Learned Absolute Position Embedding;
- Relative Position Encoding;
- Rotary Position Embedding。
6. 原始 Transformer 的正弦位置编码是什么?
《Attention Is All You Need》使用固定的正弦和余弦函数表示位置。
经典形式是:
$$
PE(pos,2i)
\sin
\left(
\frac{pos}
{10000^{2i/d}}
\right)
$$
$$
PE(pos,2i+1)
\cos
\left(
\frac{pos}
{10000^{2i/d}}
\right)
$$
其中:
- pospospos是 Token 的位置;
- iii是向量维度;
- ddd是模型隐藏维度。
然后直接与 Token Embedding 相加:
$$
h_{pos}
E(x_{pos})+PE(pos)
$$
它的特点包括:
- 参数固定,不需要学习;
- 每个位置具有唯一的连续向量表示;
- 不同维度使用不同频率;
- 原论文选择这一方案时考虑了向更长序列外推的可能性。
原始 Transformer 同时实验过 learned positional embeddings,并报告两种方式在当时机器翻译实验中的结果非常接近。
7. BERT 的位置编码是什么?
原始 BERT 使用可学习的绝对位置嵌入。
BERT 的输入实际上由三部分相加:
$$
h_i
E_{\text{token}}(x_i)
+
E_{\text{segment}}(s_i)
+
E_{\text{position}}(i)
$$
也就是:
Token Embedding + Segment Embedding + Position Embedding例如:
[CLS] I like AI [SEP]模型会分别学习:
Position 0 Position 1 Position 2 Position 3 Position 4对应的位置向量。
这种设计的特点是位置本身成为模型参数:
P∈RLmax×d P\in\mathbb{R}^{L_{\max}\times d}P∈RLmax×d
训练过程中:
P PP
会通过梯度下降一起更新。
因此 BERT 学到的是每一个绝对位置编号对应的参数表示。
8. 原始 GPT 的位置编码是什么?
原始 GPT 同样采用可学习的位置嵌入。
其输入可以简化表示为:
$$
h_0
UW_e+W_p
$$
其中:
- WeW_eWe是 Token Embedding;
- WpW_pWp是 Position Embedding。
因此经典 GPT 的方式和 BERT 在“位置表示类型”上比较接近:
Token Embedding+Learned Position Embedding \text{Token Embedding} + \text{Learned Position Embedding}Token Embedding+Learned Position Embedding
二者真正明显的结构差异来自 Attention 可见范围。
BERT 使用双向 Self-Attention。
GPT 使用 Causal Self-Attention。
因此:
BERT: 左边 ← 当前Token → 右边GPT: 左边 → 当前Token × 未来Token需要注意,“GPT”现在已经代表一个很大的模型家族。原始 GPT 明确使用 learned absolute position embeddings,其他 GPT 类模型可以采用不同的位置机制,所以回答时最好说明具体模型版本。
9. LLaMA 的 RoPE 是什么?
LLaMA 使用 Rotary Position Embedding。
RoPE 的核心思路是在 Attention 中,根据 Token 的位置对QQQ和KKK做旋转变换。
假设位置为mmm:
$$
q_m
R_m q
$$
位置为nnn:
$$
k_n
R_n k
$$
Attention 中计算:
qm⊤kn q_m^\top k_nqm⊤kn
得到:
(Rmq)⊤(Rnk) (R_mq)^\top(R_nk)(Rmq)⊤(Rnk)
旋转矩阵具有组合性质,因此结果能够显式反映:
n−m n-mn−m
这样的相对位置关系。
这使 RoPE 同时包含:
- Token 所在的绝对位置;
- Attention 中两个 Token 的相对距离信息。
一个直观区别是:
9.1 BERT / 经典 GPT
位置向量直接加入 Token Embedding:
xi+pi x_i+p_ixi+pi
9.2 LLaMA / RoPE
Token Embedding 中不直接加入传统绝对位置向量。
位置作用于 Attention 的:
Q QQ
和:
K KK
即:
Qi→RiQi Q_i\rightarrow R_iQ_iQi→RiQi
Kj→RjKj K_j\rightarrow R_jK_jKj→RjKj
随后再计算 Attention。
因此 RoPE 更直接地把位置信息写入 Token 之间的 Attention 关系。
10. BERT 和 GPT 最关键的差异是什么?
可以从 Attention Mask 直接理解。
10.1 BERT
假设有四个 Token:
A B C D每个位置基本都可以看到:
A B C DAttention Matrix 近似为:
A B C D A ✓ ✓ ✓ ✓ B ✓ ✓ ✓ ✓ C ✓ ✓ ✓ ✓ D ✓ ✓ ✓ ✓因此是双向上下文建模。
10.2 GPT / LLaMA
使用 Causal Mask:
A B C D A ✓ × × × B ✓ ✓ × × C ✓ ✓ ✓ × D ✓ ✓ ✓ ✓所以:
- A 只能看 A;
- B 可以看 A、B;
- C 可以看 A、B、C;
- D 可以看 A、B、C、D。
这样才能保证训练和生成时不存在未来信息泄漏。
11. 三者的任务倾向有什么差异?
可以从训练目标直接推导。
11.1 BERT
核心问题是:
根据完整上下文,这个位置应该是什么?
因此更自然地用于:
- 分类;
- 检索表示;
- NER;
- 信息抽取;
- 文本匹配;
- 阅读理解。
11.2 GPT / LLaMA
核心问题是:
已知前面的 Token,下一个 Token 应该是什么?
因此更自然地用于:
- 文本生成;
- 对话;
- 代码生成;
- 长文本续写;
- 指令跟随;
- Agent 的语言生成模块。
模型最终能做什么还受到预训练数据、后训练、Prompt、工具和任务适配方式影响,因此架构只能解释主要倾向。
12. 最容易混淆的几个点
12.1 Encoder 和 Decoder 与位置编码属于两个维度
下面这些组合在理论上都可以存在:
Encoder + Absolute Position Encoder + Relative Position Decoder + Absolute Position Decoder + RoPE因此不能根据“Decoder-only”直接推出“使用 RoPE”。
12.2 GPT 不对应唯一的位置编码方式
原始 GPT 使用 learned position embeddings。
现代 GPT-style Decoder 模型可能使用:
- learned absolute embedding;
- RoPE;
- ALiBi;
- 其他 relative position 方法。
面试中最好明确:
如果讨论原始 GPT,它使用 learned absolute positional embeddings;如果泛指 GPT-style causal LM,则位置方案需要看具体模型。
12.3 BERT 的双向来自 Attention 结构和 MLM 训练方式
BERT 可以同时使用左右上下文,因为输入中的普通 Token 之间没有 causal mask。
MLM 通过遮挡部分目标 Token,避免模型直接读取需要预测的答案。
13. 面试时可以压缩成下面这段
BERT、GPT 和 LLaMA 都基于 Transformer,但架构和训练目标不同。
BERT 是 Encoder-only 的双向模型,每个 Token 可以同时关注左右上下文,原始预训练主要使用 MLM 和 NSP,因此更适合文本理解、分类、抽取等任务。
经典 GPT 是 Decoder-only 的因果语言模型,通过 causal mask 保证当前位置只能看到左侧 Token,并通过 next-token prediction 学习
P(xt∣x<t) P(x_t\mid x_{<t})P(xt∣x<t)
因此天然适合自回归生成。
LLaMA 也采用 causal language modeling,但在 Transformer 结构上进行了现代化设计,例如 RMSNorm、SwiGLU 和 RoPE。
位置编码方面,原始 Transformer 使用固定正弦/余弦编码;BERT 和原始 GPT 使用 learned absolute positional embedding;LLaMA 使用 RoPE。BERT 和经典 GPT 都是把绝对位置信息加入输入表示,RoPE 则通过旋转QQQ和KKK将位置关系直接引入 Attention。
所以回答这道题时,我会用四个维度比较:
架构、Attention 可见范围、训练目标、位置编码。
14. 来源
- Devlin et al.,BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, NAACL 2019.
- Radford et al.,Improving Language Understanding by Generative Pre-Training, OpenAI, 2018.
- Touvron et al.,LLaMA: Open and Efficient Foundation Language Models, 2023.
- Vaswani et al.,Attention Is All You Need, NeurIPS 2017.
- Su et al.,RoFormer: Enhanced Transformer with Rotary Position Embedding, 2021.