📌 Padding 的含义

在大模型 (LLM) 中,padding 是用于将不同长度的序列调整为同一长度的方法,以便于批量 (batch) 处理。

例如:

1
2
句子1: "I love NLP"
句子2: "Padding is useful in LLM training"

使用 <pad> token 进行对齐:

1
2
"I love NLP <pad> <pad> <pad>"
"Padding is useful in LLM training"

📌 Padding 位置的选择:Left vs Right

Padding 有两种常见方式:

  • Right padding(右填充):

    1
    "I love NLP <pad> <pad>"
  • Left padding(左填充):

    1
    "<pad> <pad> I love NLP"

通常:

  • Decoder-only 模型(如 GPT, Llama):采用 Left padding
  • Encoder-only 模型(如 BERT):采用 Right padding

具体而言,Transformer 模型通常分为三类结构:

模型类型 代表模型 特征 常见用途
Encoder-only BERT、RoBERTa、ALBERT、ELECTRA 双向注意力(Bidirectional Attention) 自然语言理解(NLU),如文本分类、序列标注
Decoder-only GPT、GPT-2、GPT-3、GPT-4、LLaMA、Mistral 单向自回归注意力(Causal Attention) 文本生成、聊天、写作
Encoder-Decoder Transformer原始论文中的模型、T5、BART、mT5、PEGASUS Encoder为双向注意力,Decoder为单向自回归注意力 机器翻译、摘要生成、对话

📌 为什么 Encoder-only 模型(如BERT)采用 Right padding?

  • Encoder-only 模型(如 BERT)的核心目标是获得每个 token 的嵌入表示(Embedding representation)。
  • 此类模型为双向注意力(Bidirectional Attention),每个 token 可同时关注上下文,因此位置的轻微变化不会对结果造成严重干扰
  • 此外,encoder-only 模型中通常有特殊 token(如 [CLS]),位置相对稳定,用于句子分类或表示,因此采用 right padding 更自然,也更合理。

示例说明:

1
[CLS] Hello I love NLP [SEP] <pad> <pad>
  • 右填充后,[CLS][SEP] token 位置稳定,且便于模型专注于前面的有效信息。

📌 为什么 Decoder-only LLM 采用 Left padding?

以 GPT 为代表的 Decoder-only 模型 是自回归(Autoregressive)模型,每个词的生成仅依赖于当前及之前的词,未来词不可见。因此:

  • 位置编码的稳定性
    左填充确保真实 token 的相对位置稳定,模型生成新 token 时位置编码始终稳定于序列末尾。
    • 当采用绝对位置编码(Absolute Positional Encoding)时,每个 token(包括 <pad>)都有对应的位置编号。
    • 对于左填充的 padding tokens,虽然它们占据了位置编号(如 1、2),但模型通过掩码机制忽略其对注意力和输出结果的影响。
      示例:
1
2
3
位置编码: [ 1      2      3      4      5      6 ]
Token: [ <pad>, <pad>, Hello, I, love, NLP ]
掩码: [ 0, 0, 1, 1, 1, 1 ]
  • 模型只关注掩码为 1 的有效 token,而忽略掩码为 0 的 padding tokens。
  • 注意力掩码(Attention Mask)
    左侧的 <pad> 会被注意力掩码(attention mask)忽略,从而避免 padding token 干扰有效 token 的位置编码和注意力计算。

示例说明:

Token 1 2 3 4 5 6
Left <pad> <pad> Hello I love NLP
Right Hello I love NLP <pad> <pad>
  • Left padding 下,最后有效 token 始终在同一位置(6)。
  • Right padding 下,token 的位置随序列长度变化,影响位置编码的稳定性。

📌 Padding 在训练与推理阶段的差异

阶段 (Phase) Padding 策略 原因
训练 (Training) 批量处理时,Decoder-only 常用左填充;Encoder-only 模型则常用右填充 批量处理,加快计算效率
推理 (Inference) 通常单条序列,无需 padding;若需要批量推理,仍采用左填充 稳定位置编码

📌 总结与关键要点(TL;DR)

  • Padding 用于序列长度标准化。
  • Decoder-only LLMs (GPT, Llama) 通常采用左填充(Left padding),目的是稳定位置编码并避免未来信息泄漏;左侧 padding 会被掩码忽略,不干扰模型预测。
  • Encoder-only 模型(如BERT系列)通常采用右填充(Right padding),因为模型为双向注意力,且特殊token(如[CLS])位置需要保持稳定。
  • 位置编码中虽然 padding token 占位,但会被注意力掩码有效屏蔽,不影响模型的最终输出。