8.5 Seq2Seq:输入一串,输出一串
8.5.1 概念:从翻译说起
假设你要把”我打你”翻译成英文”I hit you”。这不是简单的单词替换——中文三个字,英文三个词,但顺序不同(“打”对应”hit”在中间,“我”对应”I”在开头)。更关键的是,你需要先理解整个中文句子的含义,然后用英文的语法重新表达。
Seq2Seq(Sequence-to-Sequence,序列到序列)就是为这类任务设计的架构。它由 Ilya Sutskever 等人和 Cho 等人于 2014 年独立提出,核心思想很朴素:用两个网络接力完成翻译1。
生活比喻:Seq2Seq 像一个双语同声传译员。这位译员不是听到一个词就立刻翻一个词,而是先完整听完讲话者的一句话(编码),在脑中形成一个对所有内容的理解(上下文向量),然后才开口用另一种语言表达(解码)。和普通 RNN 的区别在于:RNN 输入一个序列输出一个标签(如情感分类),Seq2Seq 则是输入一个序列输出另一个序列——长度可以不同,语言可以不同。
8.5.2 教学:编码器-解码器的内部机制
Seq2Seq 由两部分组成:
编码器(Encoder):一个 RNN(通常是 LSTM 或 GRU),逐词读入输入序列。每读一个词,隐藏状态就更新一次。读完最后一个词后,最终的隐藏状态就是”上下文向量”(Context Vector)——它被认为包含了整个输入句子的含义。
输入序列: "我" → "打" → "你" → <EOS>
编码器: h₁ → h₂ → h₃ → C (上下文向量)
解码器(Decoder):另一个 RNN,从上下文向量出发,逐词生成输出序列。第一个输入是特殊标记<BOS>(Begin of Sequence,表示”开始生成”),模型输出第一个词;然后把这个词作为下一步的输入,继续生成下一个词,直到输出<EOS>(End of Sequence,表示”结束”)。
解码器: C → [LSTM] → "I" → [LSTM] → "hit" → [LSTM] → "you" → [LSTM] → <EOS>
输入: <BOS> "I" "hit" "you"
这种逐词生成的方式叫做自回归(Autoregressive)——当前输出依赖于之前的所有输出2。它正是当今 GPT 系列大模型”一个字一个字往外蹦”的祖先。
训练和推理的区别:训练时使用”教师强制”(Teacher Forcing)——无论模型预测什么,下一步的输入始终是正确答案的词。这样训练更稳定、收敛更快。推理时则只能用自己的预测作为下一步输入,一旦某一步出错,错误会逐步累积,这叫做”曝光偏差”(Exposure Bias)。
8.5.3 致命瓶颈:把一本书压成一句话
Seq2Seq 的关键弱点出在”上下文向量”上。编码器把整个输入句子——无论多长——都压缩成一个固定长度的向量(比如 512 个浮点数)。这就像把一本 500 页的小说用一句话概括:短篇小说还行,长篇小说必然丢失大量信息。
等价来说:你不能把一段 100 个词的句子塞进 512 个数字里,还指望完美恢复每个词的语义3。
具体表现:
- 句子越长,翻译质量下降越快。Sutskever 等人的实验显示,超过 30 个词的句子 BLEU 分数(一种衡量翻译质量的标准,数值越高越好)急剧下降。
- 编码器后期的隐藏状态天然地”偏向”最近读到的词——开头的信息被逐步冲刷掉。这是 RNN 梯度消失问题在 Seq2Seq 上的直接反映(见 8.3 梯度消失与梯度爆炸)。
8.5.4 解药:注意力机制与 Transformer 的登场
2014 年,Bahdanau 等人提出了一个直击要害的解决方案——注意力机制(Attention)。核心思路是:不要让解码器只盯一个固定的上下文向量,而是让它能”回头看”编码器每一步的隐藏状态,自己决定每个时刻该关注输入序列的哪个位置4。
生活比喻:原来的 Seq2Seq 就像一个翻译拿到一篇外文文章,只能看一遍然后凭记忆翻译。加上注意力之后,翻译可以在翻译每个句子时随时回头查阅原文的对应段落——哪里不懂看哪里。
注意力模型的具体做法:
- 解码器每步生成一个”查询”向量(Query):我需要什么样的信息?
- 拿这个查询去和编码器所有的隐藏状态做匹配,算出一个”相关度分数”
- 将所有编码器状态按相关度加权求和,得到当前步专属的”动态上下文向量”
- 解码器用这个动态向量生成当前词
注意力不仅解决了信息瓶颈,还带来了一个意外收获——可解释性。注意力权重(哪个输入词对哪个输出词贡献最大)可以直接可视化,让我们看到模型翻译时”在想什么”。例如翻译”我打你”到”I hit you”时,注意力权重会显示生成”hit”时模型在着重看中文的”打”。
更进一步,Vaswani 等人在 2017 年发现:既然注意力这么好用,为什么不把 RNN 整个丢掉,只用注意力?这就是 Transformer 的”自注意力”机制——让每个词直接”看到”所有其他词,不再需要一步步循环传递5。
这同时解决了 RNN 的另一个致命缺陷:串行计算。RNN 处理第 100 个词之前,必须先处理完前 99 个,GPU 的大量计算单元只能干等着。Transformer 所有位置同时计算,充分利用了 GPU 的并行能力——这正是当今所有大语言模型(GPT、Claude、Gemini)都基于 Transformer 的核心原因。
8.5.5 Seq2Seq 的遗产
尽管纯 Seq2Seq(Rnn 编码器-解码器)在 NLP 主流领域已被 Transformer 取代,它留下的思想遗产深远:
- 编码器-解码器架构:这种”压缩再展开”的范式至今仍是生成任务(翻译、摘要、语音识别)的标准框架,Transformer 本身也是编码器-解码器结构的一种特例。
- 自回归生成:逐词输出、用上一个输出作为下一个输入——GPT 系列沿袭的就是 Seq2Seq 解码器的生成方式。
- 注意力机制:Seq2Seq 催生了注意力,注意力催生了 Transformer——这是深度学习过去十年最重要的一条演化线。
- Teacher Forcing 与 Exposure Bias:训练和推理不一致的问题至今仍是自回归模型的研究课题。
Seq2Seq 就像蒸汽机:今天已经不直接使用了,但它的核心思想(把能量转化为运动 / 把序列转化为序列)塑造了整个工业革命 / 序列建模的方向6。
← 上一节:8.4 双向 RNN:同时看过去和未来 | 下一节:8.6 2026 年:理解 RNN 是理解序列建模的基础 →
注释
-
Sutskever et al., “Sequence to Sequence Learning with Neural Networks”, NeurIPS 2014, https://arxiv.org/abs/1409.3215 ↩
-
Graves, “Generating Sequences With Recurrent Neural Networks”, arXiv 2013, https://arxiv.org/abs/1308.0850 ↩
-
Bahdanau et al., “Neural Machine Translation by Jointly Learning to Align and Translate”, ICLR 2015, https://arxiv.org/abs/1409.0473 ↩
-
Bahdanau et al., 2015 ↩
-
Vaswani et al., “Attention Is All You Need”, NeurIPS 2017, https://arxiv.org/abs/1706.03762 ↩
-
Britz et al., “Massive Exploration of Neural Machine Translation Architectures”, EMNLP 2017, https://arxiv.org/abs/1703.03906 ↩