2017年那个「阉割版」Transformer,后来统治了AI世界

11 阅读5分钟

3句话速读全文:(1)2017年Transformer论文给了个Encoder+Decoder双塔,但GPT把它腰斩成只剩Decoder——当时所有人都觉得这是个「残疾设计」;(2)8年后,这个「残疾设计」统治了整个AI行业,而「完整版」Encoder-Decoder查无此人;(3)这篇文章不是教程,是踩坑实录:我从GPT-1追到GPT-3,用代码手撕因果掩码,再聊到2026年Mamba的挑战——告诉你Decoder-Only为什么赢了,以及它还能嚣张多久。


我押错了方向

2018年6月的一个深夜,我在实验室刷Arxiv看到了GPT论文。

第一反应是震惊——不是惊艳的那种震惊,是「这也能行?」的那种震惊。

Transformer的完整架构是Encoder读完整句子、Decoder逐词生成。OpenAI的Alec Radford团队干了一件事:把Encoder整个砍掉了,只留Decoder。 就像汽车工程师把一辆车的方向盘拆了,说「这样也能开」。

当时我的内心OS:有病吧。2026年回看,真正有病的是当时的我。

金句①:最颠覆性的创新,往往看起来像在破坏。


一、七年前那一刀——他们为什么砍掉Encoder?

1.1 Transformer的「原罪」

2017年的《Attention Is All You Need》给出的Transformer是个对称双塔结构。

Encoder吃完整句子,输出上下文表示;Decoder在这个表示上逐词生成。这个设计在翻译任务上近乎完美——Encoder看到整句法语,Decoder逐词吐出英语。

但到了做语言模型的时候,问题来了:语言模型不需要「理解完整句子再生成」,它需要「根据已经说过的,猜下一个」。

这就像两个人对话:

  • Encoder模式:你先写完整篇演讲稿,我再逐句背诵。
  • Decoder模式:你一边说,我一边接话。

哪个更像真实对话?显然是后者。但2018年几乎没人敢赌这个方向——砍掉Encoder在学术界相当于对Transformer「泼脏水」。

1.2 因果掩码:一个数学上的「小动作」

GPT的核心技术贡献只有一个:因果注意力掩码(Causal Attention Mask)

在标准Self-Attention中,每个token能看到所有token——包括未来的。但在因果掩码下,位置 ii 的token只能看到位置 i\leq i 的token。数学上就是一行的功夫:

Mij={0if jiif j>iM_{ij} = \begin{cases} 0 & \text{if } j \leq i \\ -\infty & \text{if } j > i \end{cases}

这个 -\infty 是关键——softmax后,未来的token被「清零」,当前位置无论如何也看不到后面的词。

听起来很engineering对不对?但它藏着后来席卷一切的种子。

1.3 117M:一个现在看起来像玩具的参数规模

GPT-1的参数量是117M。放在2026年看,比手机上的一个语音唤醒模型还小。

参数GPT-1
层数12层
隐藏维度768
注意力头数12
参数量117M

但就是这个「玩具级」模型,在12个NLP任务上拿了SOTA。不是因为参数多,而是因为自回归的损失函数跟语言的本质更接近。

反常识观点①: GPT-1赢不是因为「参数大」或「架构好」,而是因为「因果语言建模」这个训练目标本身比「完形填空」更接近人类语言产生的自然过程。这在当时几乎没人注意到。


二、我的第一个踩坑:以为架构创新比规模更重要

2.1 13倍的膨胀:GPT-2

2019年的GPT-2把参数从117M飙升到1.5B——13倍的膨胀。架构上只做了两处微调:

  1. LayerNorm从post-norm改成pre-norm
  2. 权重初始化做了缩放

听起来像不是不说?但这两处微调让堆叠48层从「不可能」变成了「现实」。

训练深度学习模型就像盖楼——每加一层,地基承受的应力翻倍。Pre-Norm就是那个加固地基的方案。没有它,30层以上的Transformer会直接塌掉(梯度消失)。

我当时的一个关键误判: 我觉得GPT-2最牛的是1.5B参数。但现在回头看,最牛的是零样本迁移能力——翻译不用专门训练、阅读理解不用微调,在特定Prompt下就能工作。

当时我的反应是:这肯定是数据泄漏。后来被无数次打脸——它就是能零样本推理,而且参数越大效果越好。

金句②:零样本能力不是设计出来的,是规模堆出来的。

2.2 Scaling Law:被忽略的自然法则

2020年1月,Kaplan等人的论文揭示了Scaling Law——模型性能与参数量存在幂律关系:

L(N)NαL(N) \propto N^{-\alpha}

关键发现

  • 性能随参数增长遵循幂律——没有饱和迹象
  • 同时增大参数和数据比片面追一个更有效
  • 计算预算的最优分配是:参数每翻3.3倍,数据量翻1倍

这个发现直接改变了整个行业的投资逻辑。之前人们纠结架构创新——这个Attention变体、那个归一化技巧。Scaling Law说:忘了那些微调,把算力砸下去就行。

当时我花了一个月时间尝试改进Transformer的局部注意力模式,结果Scaling Law一出,我那些工作直接被扫进了垃圾桶——不是不对,是没必要。

反常识观点②: 2020-2023年最正确的技术决策不是「选了什么模型架构」,而是「砸了多少算力」。架构微调带来的收益,在Scale面前连误差都算不上。


三、GPT-3:1750亿参数的赌局与我的第二次误判

3.1 架构没变,但一切变了

2020年的GPT-3,参数量从1.5B飙升到175B——再放大100倍。架构和GPT-2几乎一模一样:

参数GPT-2GPT-3
层数4896
隐藏维度160012288
参数量1.5B175B
训练数据~8B词~500B词

我的第二个误判:我以为GPT-3会沿用GPT-2的架构,只是更大。但我漏掉了一个关键——涌现能力。

GPT-3展示出来的三种能力,在GPT-2时代只是可疑的苗头:

  1. In-Context Learning:给几个示例就能任务推理,不需要梯度更新
  2. Few-shot → Zero-shot平滑过渡:32-shot比0-shot高15个BLEU点,但0-shot已经够用了
  3. 初现的推理痕迹:数学推理上展示了超越随机的能力

金句③:涌现不是靠设计得来的,而是靠堆量「撞」出来的。

3.2 那个让我失眠的困惑

GPT-3出来之后我失眠了一周。

不是因为参数多——175B虽然大,但T5也有11B。真正让我睡不着的是:为什么一个被「阉割」了Encoder的架构,能比完整的Encoder-Decoder更强大?

一个可能的答案:Decoder-Only把「输入」和「输出」的界限模糊了。

在Decoder-Only中,Prompt和生成之间没有硬边界。模型看到的结构是:Q:法 国 的 首 都 是 什 么 ?A:巴 黎——因果掩码让「巴」能看到前面所有token(包括问题部分),但「黎」也只能看到「巴」和之前的token。没有像T5那样Encoder-decoder之间有一个显式的交叉注意力接口。

这种设计看似简单粗暴,但带来了两个巨大优势:

  1. 训练和推理形式完全统一——不存在「训练用Teacher Forcing,推理用自回归」的gap
  2. 长程依赖的隐式建模——所有信息在同一个注意力空间流动

原来如此时刻: 我终于明白了——Decoder-Only赢不是因为「生成比理解更重要」,而是因为「把理解统一到生成中」的设计更接近语言的本质。

3.3 一个trade-off:极限性能 vs 工程灵活性

GPT-3在SuperGLUE基准上Few-shot得分71.8,T5-XXL(11B)Fine-tuned得分88.3。Encoder-Decoder在微调后依然领先了十几个百分点。

但关键在于:T5-XXL的88.3分需要为每个任务单独微调。GPT-3的71.8分是零样本或少样本拿到的。

当你要做100个任务:

  • T5需要100次微调,算力成本≈100倍训练
  • GPT-3只需要100个Prompt,成本≈写100段文案

在工程落地上,灵活性的价值远超那十几百分点的性能差距。


四、代码里藏着真相:为什么因果掩码是真正的主角

4.1 Causal Self-Attention:三段代码讲清GPT的核心

import torch
import torch.nn as nn
import torch.nn.functional as F
import math

class CausalSelfAttention(nn.Module):
    def __init__(self, d_model, n_heads, dropout=0.1):
        super().__init__()
        assert d_model % n_heads == 0
        self.d_head = d_model // n_heads
        self.n_heads = n_heads
        
        self.c_attn = nn.Linear(d_model, 3 * d_model)
        self.c_proj = nn.Linear(d_model, d_model)
        self.dropout = nn.Dropout(dropout)
        
    def forward(self, x):
        B, T, C = x.shape
        
        qkv = self.c_attn(x)
        q, k, v = qkv.chunk(3, dim=-1)
        
        q = q.view(B, T, self.n_heads, self.d_head).transpose(1, 2)
        k = k.view(B, T, self.n_heads, self.d_head).transpose(1, 2)
        v = v.view(B, T, self.n_heads, self.d_head).transpose(1, 2)
        
        attn = (q @ k.transpose(-2, -1)) / math.sqrt(self.d_head)
        
        # 核心:因果掩码——不准回头看
        mask = torch.triu(torch.ones(T, T, device=x.device), diagonal=1)
        attn = attn.masked_fill(mask.bool(), float('-inf'))
        
        attn = F.softmax(attn, dim=-1)
        attn = self.dropout(attn)
        
        y = attn @ v
        y = y.transpose(1, 2).contiguous().view(B, T, C)
        y = self.c_proj(y)
        return y

这段代码揭示了什么? 因果自注意力层,核心逻辑只有一行 masked_fill。Decoder-Only跟Encoder-Decoder的差异,最终归结为这一个掩码矩阵。工程上的简约到了极致,却撑起了万亿参数的经济体。

4.2 推理采样:最优≠全局最优

def generate_top_p(model, prompt_ids, max_new_tokens=50, top_p=0.9, temperature=1.0):
    for _ in range(max_new_tokens):
        logits = model(prompt_ids)
        next_logits = logits[:, -1, :] / temperature
        
        sorted_logits, sorted_indices = torch.sort(next_logits, descending=True)
        cumulative_probs = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1)
        
        sorted_indices_to_remove = cumulative_probs > top_p
        sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[..., :-1].clone()
        sorted_indices_to_remove[..., 0] = 0
        
        indices_to_remove = sorted_indices_to_remove.scatter(
            1, sorted_indices, sorted_indices_to_remove
        )
        next_logits[indices_to_remove] = float('-inf')
        
        probs = F.softmax(next_logits, dim=-1)
        next_token = torch.multinomial(probs, num_samples=1)
        prompt_ids = torch.cat([prompt_ids, next_token], dim=-1)
    return prompt_ids

这个Top-p采样展示了Decoder-Only最核心的矛盾:每一步选最优不一定会得到全局最优——就像下棋时每一步都走局部最好子,最后反而输了全局。Nucleus采样的思想是:保留那些「不是最优但仍有质量」的选择,反而能产生更自然的文本。这个洞察本身就是Top-p论文最大的贡献。


五、2026年回头看:Decoder-Only的终局与性能边界

5.1 涌现能力的门槛在哪?

Jason Wei等人的研究确认,某些能力只在特定参数阈值之上出现:

  • 3-digit加法(准确率>80%):13B参数是门槛
  • 字母拼接反转:7B参数开始出效果
  • 国际化知识问答:175B参数下0-shot才达到实用水平

你没法让一个只背过10本书的学生回答100本书里才能看到的知识。模型大小决定了它能处理的推理深度上限。

5.2 截至2026年的性能边界

Decoder-Only的缺陷越来越清晰:

  1. 固定计算预算 —— 每个token生成的计算量完全相同。思考「法国首都」和「控制系统证明」花的算力一样多。
  2. 无法回溯 —— 生成错误token后无法修正。即使做了CoT,如果第3步推理错了,第7步生成得再好也白费。
  3. 注意力平方复杂度 —— FlashAttention优化得再好,O(n2)O(n^2) 这个天花板是数学决定的。

5.3 Mamba的挑战

2024年Gu和Dao提出的Mamba2用状态空间模型替代注意力:

ht=Aht1+B(xt)xt,yt=C(ht)hth_t = A h_{t-1} + B(x_t) x_t,\quad y_t = C(h_t) h_t

关键区别:B(xt)B(x_t)C(ht)C(h_t) 由输入动态决定——Mamba可以根据内容调整记忆窗。Attention的窗口大小由位置决定,不是内容决定。

但Mamba有它自己的问题:在需要「精确回忆」的任务上(如Passkey Retrieval)比同参数Transformer差10-20个点。

Trade-off: 2026年的现实是,Mamba在端侧部署和实时推理上赢了,云端大模型仍然用Decoder-Only。SSM不是替代Transformer,而是填补了Transformer不擅长的生态位。

场景胜出架构原因
云端大模型(100B+)Decoder-Only + MoE涌现能力不可替代
端侧模型(1-8B)Mamba / 混合SSM低延迟+低显存
代码/数学推理Decoder-Only + CoT精确回忆需要注意力
流式语音Mamba / RWKV线性时间复杂度

结语:Decoder-Only教会了我什么

回溯8年,我的判断失误了两次、踩坑了两次、在深夜困惑了无数次,但Decoder-Only的胜利不仅是技术细节的胜利,更是设计哲学的胜利:

  1. 简洁胜过聪明 —— 去掉Encoder不是随意的简化,而是找到了生成任务的原子化抽象。因果掩码+自回归+Cross-Entropy,三个概念加起来不超过10行数学公式,却定义了整个行业。
  2. Scale驱动理解 —— 没人能提前预测In-Context Learning,但Scale Law告诉我们只要规模到了,奇迹自己会来。
  3. 统一胜过分化 —— 一个架构吃所有任务,比N个专精模型更有工程价值。

从GPT-1的117M到今天的万亿参数,Decoder-Only证明了:生成不是理解的副产物——生成本身就是理解。

这个结论对我的日常工作意味着什么?当我设计新模型时,「Encoder搞理解,Decoder搞生成」这个直觉是错的。把学习和生成用一个一致性框架统一起来,比分割成两个模块更符合语言的本质。

2026年的今天,架构成熟了,但问题翻新了:Mamba来了、MoE普及了、推理时计算开始改变Scaling的方式。Decoder-Only或许不是终点——但它必定是所有未来架构的基准线。新架构的第一个问题永远是「它能达到GPT-3级别的质量吗?」

这是Decoder-Only留给我们这代AI从业者的终极拷问。


参考文献

  1. Vaswani et al. (2017). Attention Is All You Need. NeurIPS.
  2. Radford et al. (2018). Improving Language Understanding by Generative Pre-Training (GPT-1).
  3. Radford et al. (2019). Language Models are Unsupervised Multitask Learners (GPT-2).
  4. Brown et al. (2020). Language Models are Few-Shot Learners (GPT-3). NeurIPS.
  5. Kaplan et al. (2020). Scaling Laws for Neural Language Models.
  6. Wei et al. (2022). Emergent Abilities of Large Language Models.
  7. Gu & Dao (2024). Mamba2: Selective State Space Model.