文章目录
- 前言
-
- [一、Encoder-Decoder 架构](#一、Encoder-Decoder 架构)
-
- [1. 每次输入和输出](#1. 每次输入和输出)
- [2. 详细例子:英译法](#2. 详细例子:英译法)
- [二、Decoder-Only 架构](#二、Decoder-Only 架构)
- 三、对比总结
前言
在自然语言处理中,Transformer 模型主要有两种架构:Encoder-Decoder (编码器-解码器)和 Decoder-Only(仅解码器)。下面分别介绍它们的每次输入和输出,并用具体例子说明关键过程。
一、Encoder-Decoder 架构
这种架构通常用于序列到序列任务,如机器翻译、文本摘要。它包含一个编码器和一个解码器。
- 编码器:接收完整的源序列,输出每个位置的上下文表示(或整个序列的编码)。
- 解码器 :自回归地生成目标序列,每一步基于已生成的部分和编码器的输出,预测下一个词。
1. 每次输入和输出
- 编码器 :
- 输入 :整个源序列的 token ID 列表(例如
[x1, x2, ..., xm])。 - 输出 :每个 token 对应的隐藏状态向量
[h1, h2, ..., hm](即上下文表示)。
- 输入 :整个源序列的 token ID 列表(例如
- 解码器(推理时) :
- 第 1 步 :
- 输入:起始符
<sos>+ 编码器输出的上下文向量。 - 输出:下一个 token 的概率分布,选择概率最高的 token(如
y1)。
- 输入:起始符
- 第 2 步 :
- 输入:
<sos>, y1+ 编码器输出。 - 输出:下一个 token 的概率分布,选择
y2。
- 输入:
- 依次类推,直到生成结束符
<eos>或达到最大长度。
- 第 1 步 :
2. 详细例子:英译法
源句子 :"I love you"
目标句子 :"Je t'aime"(法语)
假设分词为:["I", "love", "you"] → 法语 ["Je", "t'", "aime"]。
(1)编码器阶段
- 输入 :三个 token ID(
I,love,you)。 - 输出 :三个隐藏向量
h_I,h_love,h_you(每个向量包含整个句子的上下文信息)。
(2)解码器推理过程
解码器使用自回归 方式,每一步输入已生成的词 和编码器输出 ,通过交叉注意力关注源句子。
| 步骤 | 解码器输入(当前已生成序列) | 解码器输出(概率分布) | 选择的 token | 关键中间过程 |
|---|---|---|---|---|
| 1 | <sos> |
预测下一个词的概率 | "Je" |
自注意力(只有 <sos>) + 交叉注意力(关注源句子的 "I",因为 "Je" 对应 "I") |
| 2 | <sos>, "Je" |
预测下一个词的概率 | "t'" |
自注意力(看到 <sos> 和 "Je") + 交叉注意力(关注 "love",因为 "t'" 是 "te" 的一部分,对应爱) |
| 3 | <sos>, "Je", "t'" |
预测下一个词的概率 | "aime" |
自注意力(看到前三个) + 交叉注意力(关注 "love") |
| 4 | <sos>, "Je", "t'", "aime" |
预测下一个词的概率 | <eos> |
自注意力(看到全部) + 交叉注意力,模型判断句子结束 |
- 关键点 :解码器的每一步都使用因果自注意力掩码 (防止看到未来的词),同时通过交叉注意力从编码器输出中提取源句子的信息。
二、Decoder-Only 架构
这种架构通常用于自回归语言模型 ,如 GPT 系列。它只有一个解码器,通过因果自注意力依次预测下一个词。
- 每次输入:当前已经生成的所有 token 序列(包括起始符,如果有)。
- 每次输出:下一个 token 的概率分布。
详细例子:文本生成
前缀 :"The cat sat on the"
下一个词 :"mat"
假设分词为:["The", "cat", "sat", "on", "the"](无起始符,直接输入前缀)。
推理过程(预测下一个词)
| 步骤 | 模型输入 | 模型输出(概率分布) | 选择的 token | 关键中间过程 |
|---|---|---|---|---|
| 1 | ["The", "cat", "sat", "on", "the"] |
预测第 6 个词的概率 | "mat" |
因果自注意力:每个位置只能看到前面的 token,例如 "the" 能看到 "The"、"cat"、"sat"、"on",但不能看到未来。最终从最后一个位置的输出预测下一个词。 |
如果继续生成:
| 步骤 | 模型输入 | 模型输出 | 选择的 token |
|---|---|---|---|
| 2 | ["The", "cat", "sat", "on", "the", "mat"] |
下一个词概率 | "." |
| 3 | ["The", "cat", "sat", "on", "the", "mat", "."] |
下一个词概率 | <eos>(或停止) |
- 关键点 :每一步的输入都是完整的已生成序列,模型通过因果掩码确保自注意力只关注过去的位置,从而进行自回归预测。
三、对比总结
| 架构 | 输入(推理时) | 输出 | 核心机制 |
|---|---|---|---|
| Encoder-Decoder | 编码器 :整个源序列;解码器:已生成的目标序列(每一步) | 解码器每一步输出下一个词的概率 | 编码器提取源信息,解码器通过交叉注意力融合源信息,同时自注意力保持因果性 |
| Decoder-Only | 已生成的所有 token(包括前缀) | 每一步输出下一个词的概率 | 仅使用因果自注意力,所有信息来自已生成的序列 |
两种架构的本质区别在于:Decoder-Only 只依赖已生成的内容,而 Encoder-Decoder 还依赖一个额外的源序列编码。