从一个问题说起

如果你问一位NLP研究者:“为什么GPT选择了Decoder-only架构,而BERT选择了Encoder-only?“答案可能涉及双向注意力、因果掩码、预训练目标……但如果你追问:“那为什么现在的千亿参数大模型几乎清一色是Decoder-only?“很多人可能就说不清楚了。

这不仅仅是一个架构选择的问题,它触及了Transformer设计的核心——注意力机制的本质。过去七年,三种架构各自走出了不同的道路:Encoder-only一度霸榜GLUE,Decoder-only在生成任务中大放异彩,Encoder-Decoder则在翻译和摘要领域站稳脚跟。但当模型规模突破百亿参数,Decoder-only几乎成了唯一选择。为什么?

要回答这个问题,我们需要从注意力矩阵的数学性质说起,一路追溯到训练效率、推理优化,以及那个被很多人忽视的"低秩瓶颈”。

注意力机制:三种架构的共同基石

在深入架构差异之前,先回顾一下注意力机制的核心公式:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$

这个公式看起来简洁,但其中隐藏着一个关键细节:注意力矩阵 $A = \text{softmax}(QK^T/\sqrt{d_k})$ 的形态决定了模型能"看到"什么。

  • $Q$ (Query):查询向量,代表"我在找什么”
  • $K$ (Key):键向量,代表"我是什么”
  • $V$ (Value):值向量,代表"我的内容”

注意力矩阵 $A$ 的每个元素 $A_{ij}$ 表示第 $i$ 个位置对第 $j$ 个位置的关注程度。三种架构的本质区别,就在于对这个矩阵施加了什么约束。

flowchart TB
    subgraph 三种注意力模式
        A[Encoder双向注意力] --> A1["可看全部位置<br/>无掩码约束"]
        B[Decoder因果注意力] --> B1["只能看过去<br/>下三角掩码"]
        C[Cross-Attention] --> C1["Query来自解码器<br/>K,V来自编码器"]
    end
    
    subgraph 注意力矩阵形态
        A1 --> M1["满矩阵<br/>双向信息流"]
        B1 --> M2["下三角矩阵<br/>单向信息流"]
        C1 --> M3["矩形矩阵<br/>跨序列信息流"]
    end

Encoder-Only架构:双向理解的艺术

架构设计

Encoder-only架构最典型的代表是BERT(Bidirectional Encoder Representations from Transformers)。它的核心特点是双向注意力——每个token可以"看到"序列中的所有其他token,无论是它前面的还是后面的。

flowchart LR
    subgraph BERT架构
        Input[输入序列] --> Embed[词嵌入+位置编码]
        Embed --> Enc1[Encoder Layer 1]
        Enc1 --> Enc2[Encoder Layer 2]
        Enc2 --> EncN["..."]
        EncN --> EncLast[Encoder Layer N]
        EncLast --> Output[上下文嵌入]
    end
    
    subgraph 单个Encoder层
        SelfAttn[双向自注意力] --> AddNorm1[Add & Norm]
        AddNorm1 --> FFN[前馈网络]
        FFN --> AddNorm2[Add & Norm]
    end

用数学语言描述,Encoder的注意力矩阵是:

$$A_{ij} = \text{softmax}\left(\frac{q_i \cdot k_j}{\sqrt{d_k}}\right), \quad \forall i, j$$

没有任何掩码约束,$A$ 是一个满矩阵。

预训练目标:Masked Language Modeling

BERT的预训练目标是掩码语言模型(MLM):随机将输入序列中15%的token替换为[MASK],然后让模型预测这些被遮盖的token。

输入:我 [MASK] 吃 苹果
目标:[MASK] → 爱

这个目标充分利用了双向注意力的优势——预测中间的词可以同时利用左右两侧的上下文。

双向注意力的"低秩陷阱"

但双向注意力有一个被广泛忽视的缺陷:注意力矩阵的有效秩往往远低于序列长度

这里需要区分两个概念:

  • 代数秩(Algebraic Rank):矩阵中非零奇异值的数量
  • 有效秩(Effective Rank):实际携带信息的独立通道数量

从纯数学角度看,只要对角线元素非零,注意力矩阵就是满秩的。但实际测量发现,超过90%的信息能量集中在少数几个主成分上。为什么会这样?

答案藏在softmax和投影维度里:

$$A = \text{softmax}(QK^T/\sqrt{d_k})$$

矩阵 $QK^T$ 的秩最多为 $\min(d_k, d_k) = d_k$。这意味着,无论序列多长,注意力矩阵的有效秩都被 $d_k$ 这个瓶颈限制住了

打个比方:即使你有1000个麦克风,但如果只有64条音频线,有效通道数最多就是64。

典型应用场景

Encoder-only模型在以下任务中表现出色:

  • 文本分类:情感分析、主题分类
  • 命名实体识别:从文本中提取人名、地名、机构名
  • 问答系统:从给定段落中抽取答案
  • 语义相似度:判断两个句子的相关程度

这些任务的共同特点是:需要对输入进行深度理解,而非生成新文本

Decoder-Only架构:单向生成的力量

架构设计

Decoder-only架构的代表是GPT系列。与Encoder不同,Decoder使用因果掩码(Causal Mask),确保每个位置只能看到它之前的位置。

flowchart LR
    subgraph GPT架构
        Input[输入序列] --> Embed[词嵌入+位置编码]
        Embed --> Dec1[Decoder Layer 1]
        Dec1 --> Dec2[Decoder Layer 2]
        Dec2 --> DecN["..."]
        DecN --> DecLast[Decoder Layer N]
        DecLast --> Output[下一词预测]
    end
    
    subgraph 单个Decoder层
        MaskedAttn[因果掩码自注意力] --> AddNorm1[Add & Norm]
        AddNorm1 --> FFN[前馈网络]
        FFN --> AddNorm2[Add & Norm]
    end

数学上,因果掩码将注意力矩阵变为下三角矩阵:

$$A_{ij} = \begin{cases} \text{softmax}_j\left(\frac{q_i \cdot k_j}{\sqrt{d_k}}\right) & \text{if } j \leq i \\ 0 & \text{if } j > i \end{cases}$$

预训练目标:Causal Language Modeling

Decoder-only的预训练目标是因果语言模型(CLM):给定前面的词,预测下一个词。

输入:我 爱 吃
目标:苹果

这是一个纯粹的"从左到右"预测任务,模型必须学会在有限的前文信息中做出最佳预测。

为什么Decoder-only在大模型时代胜出

这可能是最关键的问题。当模型规模较小时,三种架构各有千秋。但当参数量突破百亿,Decoder-only逐渐成为主流。原因有三:

1. 注意力矩阵的秩优势

这是一个反直觉的发现。直觉上,双向注意力应该比单向注意力有更多信息。但研究表明,因果掩码的下三角结构有一个隐含优势:

下三角矩阵在对角线非零的条件下,必然是满秩的。 更重要的是,softmax操作在因果掩码下产生的注意力分布更加"尖锐",有效秩的衰减速度更慢。

graph LR
    subgraph 双向注意力
        A1["代数满秩"] --> A2["有效秩快速衰减"]
        A2 --> A3["信息瓶颈"]
    end
    
    subgraph 因果注意力
        B1["代数满秩"] --> B2["有效秩衰减更慢"]
        B2 --> B3["更好的信息传递"]
    end

2. 训练效率

Decoder-only架构不需要Cross-Attention层,这意味着:

  • 更少的参数
  • 更简单的计算图
  • 更高的训练吞吐量

当模型规模达到千亿级别,这些效率差异会被放大。

3. KV Cache的推理优化

这是Decoder-only在推理阶段的核心优势。在生成文本时,Decoder-only可以利用KV Cache复用之前计算的Key和Value向量:

sequenceDiagram
    participant Token1 as Token 1
    participant Token2 as Token 2
    participant Token3 as Token 3
    
    Note over Token1: 生成Token 1
    Token1->>Token1: 计算Q,K,V
    
    Note over Token2: 生成Token 2
    Token1->>Token2: 复用K1,V1
    Token2->>Token2: 计算Q2,K2,V2
    
    Note over Token3: 生成Token 3
    Token1->>Token3: 复用K1,V1
    Token2->>Token3: 复用K2,V2
    Token3->>Token3: 计算Q3,K3,V3

Encoder-only架构无法享受这种优化,因为双向注意力要求每次都要重新计算所有token之间的相互关系。

典型应用场景

Decoder-only模型在以下任务中表现出色:

  • 文本生成:创意写作、代码补全
  • 对话系统:聊天机器人、虚拟助手
  • 问答系统:开放域问答
  • 文本摘要:生成式摘要
  • 翻译:大规模翻译系统

Encoder-Decoder架构:两全其美的折中

架构设计

Encoder-Decoder架构的典型代表是T5(Text-to-Text Transfer Transformer)。它结合了Encoder和Decoder的优势:

  • Encoder部分:使用双向注意力,深度理解输入序列
  • Decoder部分:使用因果注意力,自回归生成输出
  • Cross-Attention:连接Encoder和Decoder的桥梁
flowchart TB
    subgraph Encoder-Decoder架构
        subgraph Encoder
            EInput[输入序列] --> EEmbed[嵌入层]
            EEmbed --> ELayer1[双向自注意力]
            ELayer1 --> ELayerN["..."]
            ELayerN --> EOut[编码器输出]
        end
        
        subgraph Decoder
            DInput[目标序列] --> DEmbed[嵌入层]
            DEmbed --> DLayer1[因果自注意力]
            DLayer1 --> CrossAttn[Cross-Attention]
            CrossAttn --> DLayerN["..."]
            DLayerN --> DOut[解码器输出]
        end
        
        EOut --> CrossAttn
    end

Cross-Attention:架构的核心

Cross-Attention是Encoder-Decoder架构的灵魂。它的机制是:

  • Query:来自Decoder
  • Key和Value:来自Encoder

这允许Decoder在生成每个token时,动态地"查询"Encoder编码的输入信息。

数学表达:

$$\text{CrossAttn}(Q_d, K_e, V_e) = \text{softmax}\left(\frac{Q_d K_e^T}{\sqrt{d_k}}\right) V_e$$

预训练目标:Span Corruption

T5使用Span Corruption作为预训练目标:随机遮盖连续的文本片段,让模型还原。

输入:我 <extra_id_0> 吃 苹果
目标:<extra_id_0> 爱 <extra_id_1>

与BERT的MLM不同,Span Corruption遮盖的是连续片段,这迫使模型学会更长距离的依赖关系。

效率权衡

Encoder-Decoder架构有一个重要的效率权衡:在计算量相同时,Encoder-Decoder的参数量约为Decoder-only的2倍

这是因为:

  • Encoder和Decoder各有一套独立的参数
  • Cross-Attention层增加了额外的计算开销

UL2论文通过实验发现:如果存储空间不是问题,Encoder-Decoder在多任务场景下表现更优;但在参数受限时,Decoder-only是更实用的选择。

典型应用场景

Encoder-Decoder模型在以下任务中表现出色:

  • 机器翻译:输入输出长度不同,需要深度理解源语言
  • 文本摘要:长文档压缩为短摘要
  • 问答生成:根据上下文生成答案
  • 数据到文本:表格转文字描述

三种架构的统一视角:UL2的启示

2022年的UL2论文提供了一个重要视角:预训练目标可能比架构选择更重要

UL2提出了**Mixture-of-Denoisers(MoD)**框架,将多种预训练目标统一:

graph TB
    subgraph MoD框架
        R[R-Denoiser<br/>常规Span Corruption]
        S[S-Denoiser<br/>序列去噪/Prefix LM]
        X[X-Denoiser<br/>极端去噪]
    end
    
    R --> Mix[混合训练]
    S --> Mix
    X --> Mix
    
    Mix --> Result[通用模型]

实验发现:

  • 使用MoD训练的Decoder-only模型,可以超越传统T5(Encoder-Decoder)14.6%
  • 架构选择主要是效率权衡,而非性能绝对差距
  • 通用模型可以通过模式切换在不同任务间切换

实际选择指南

面对具体任务,如何选择架构?以下是决策树:

flowchart TD
    Start[开始选择] --> Q1{任务类型?}
    
    Q1 -->|理解/分类| Enc[Encoder-only<br/>如BERT]
    Q1 -->|生成| Q2{输入输出关系?}
    
    Q2 -->|输出依赖输入| Q3{输入输出长度差异?}
    Q2 -->|开放式生成| Dec[Decoder-only<br/>如GPT]
    
    Q3 -->|差异大| EncDec[Encoder-Decoder<br/>如T5]
    Q3 -->|差异小| Dec
    
    Enc --> Note1[适合: 分类、NER、语义匹配]
    Dec --> Note2[适合: 对话、创意写作、代码生成]
    EncDec --> Note3[适合: 翻译、摘要、Seq2Seq]

详细建议

选择Encoder-only,当:

  • 任务是分类或标注
  • 不需要生成新文本
  • 推理速度要求高
  • 模型规模有限

选择Decoder-only,当:

  • 需要开放式文本生成
  • 输入输出关系灵活
  • 希望利用大规模预训练优势
  • 需要In-Context Learning能力

选择Encoder-Decoder,当:

  • 输入和输出有明确的区分
  • 输入需要深度理解
  • 输出高度依赖输入内容
  • 任务是Seq2Seq类型(翻译、摘要)

从理论到实践:一个案例

假设你要构建一个多语言客服系统,需要处理以下任务:

  1. 意图识别(分类)
  2. 多轮对话(生成)
  3. 工单摘要(Seq2Seq)

方案一:单一Decoder-only模型

使用一个大型Decoder-only模型(如GPT-4级别),通过Prompt Engineering处理所有任务。

优点:部署简单,一个模型搞定一切 缺点:推理成本高,分类任务"大材小用"

方案二:混合架构

  • 意图识别:使用小型Encoder-only(如DeBERTa)
  • 对话:使用Decoder-only(如Llama)
  • 摘要:使用Encoder-Decoder(如T5)

优点:每个任务使用最优架构,效率高 缺点:部署复杂,需要维护多个模型

方案三:Encoder-Decoder统一

使用一个Encoder-Decoder模型(如UL2),通过模式切换处理不同任务。

优点:统一框架,兼顾理解和生成 缺点:参数效率不如专门的Decoder-only

实际工程中,方案二最常见,因为不同任务对模型能力的需求确实不同

写在最后

回顾Transformer的七年演变,三种架构各有其存在的价值:

  • Encoder-only开创了预训练+微调的范式,让NLP任务有了统一的解决方案
  • Decoder-only证明了规模的力量,让生成式AI成为现实
  • Encoder-Decoder提供了理解与生成的平衡,在特定领域保持优势

架构之争的本质,是效率与能力的权衡。双向注意力提供更丰富的信息,但代价是计算复杂度和推理效率;因果掩码限制了信息流,却换来了训练和推理的双重优势。

当我们在谈论"为什么Decoder-only统治了大模型时代"时,答案不仅仅是注意力矩阵的秩,更关乎整个工程生态的选择——从训练框架到推理优化,从硬件适配到应用场景。

未来会怎样?也许是更高效的线性注意力架构,也许是状态空间模型的复兴,也许是全新的范式。但无论技术如何演进,理解这三种架构的差异,是理解大模型本质的第一步。


参考资料

  1. Vaswani et al. “Attention Is All You Need” (2017)
  2. Devlin et al. “BERT: Pre-training of Deep Bidirectional Transformers” (2018)
  3. Radford et al. “Language Models are Unsupervised Multitask Learners” (GPT-2, 2019)
  4. Raffel et al. “Exploring the Limits of Transfer Learning with T5” (2019)
  5. Tay et al. “UL2: Unifying Language Learning Paradigms” (2022)
  6. Wang et al. “What Language Model Architecture and Pretraining Objective Work Best for Zero-Shot Generalization?” (2022)
  7. Bhojanapalli et al. “Low-Rank Bottleneck in Multi-Head Attention Models” (ICML 2020)