Decoder-only与Encoder-only模型Padding策略的差异
📌 Padding 的含义
在大模型 (LLM) 中,padding 是用于将不同长度的序列调整为同一长度的方法,以便于批量 (batch) 处理。
例如:
1 | 句子1: "I love NLP" |
使用 <pad>
token 进行对齐:
1 | "I love NLP <pad> <pad> <pad>" |
📌 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),但模型通过掩码机制忽略其对注意力和输出结果的影响。
示例:
- 当采用绝对位置编码(Absolute Positional Encoding)时,每个 token(包括
1 | 位置编码: [ 1 2 3 4 5 6 ] |
- 模型只关注掩码为 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 占位,但会被注意力掩码有效屏蔽,不影响模型的最终输出。