IT 论文精读 · PAPER 8
Sutskever, Vinyals & Le · Google · NIPS 2014
2014 年,Google 的三个人——其中的 Ilya Sutskever 后来当了 OpenAI 首席科学家——提出了 Seq2Seq(序列到序列):让两个神经网络接力,一个专门「读」、一个专门「说」,第一次让机器翻译整句话从头到尾由神经网络独立完成,成绩还超过了打磨多年的传统翻译系统。今天你跟 ChatGPT「你一句、我一句」的样子,最早的雏形就是它。
想想同声传译员是怎么工作的:先听完一整句,在脑子里形成一个「意思」,再用另一种语言把这个意思重新说出来——绝不是听一个词翻一个词。而 Seq2Seq 之前的机器翻译恰恰更像后者:把句子剁成小块,逐块查对照表替换,再想办法把碎块拼通顺。Seq2Seq 让机器第一次学会了传译员的路子:先读懂,再重说。
旧世界的翻译系统是一条流水线:切短语的、查表的、调语序的、打分挑最顺的……几十个零件各管一段,每个零件都要专家单独设计调教,哪里出错都难追查。Seq2Seq 把这一切换成一个整体:只要喂给它海量「原文–译文」句子对,它自己从头学会整个翻译过程,中间不需要任何人手工设计规则。
「读」的网络逐词读入原句,一边读一边更新自己的「脑内状态」;读完最后一个词,这个状态就是整句话被浓缩成的一个「念头」。「说」的网络接过这个念头,一个词一个词往外说:每说一个词,都看着这个念头加上自己刚说过的话,决定下一个词说什么,直到说出一个特殊的「句号」记号才停笔——所以译文想多长就多长,不用提前规定。
论文里还有个出了名的妙招:把原句倒着喂进去。这样一来,原句的开头和译文的开头在时间上离得特别近,模型先轻松学会「开头对开头」,再顺藤摸瓜把后面对上——就像接力赛把交棒的两个人安排得更近,成绩立刻明显提高。
它第一次证明:不靠语言学规则、不靠手工零件,纯神经网络就能在正式比赛数据上打败传统翻译系统。两年后,Google 翻译把运行了十年的旧系统整个换成了这套架构的后代;「先读懂、再生成」也从翻译蔓延到摘要、对话、语音、看图说话,成了 AI 的通用套路。也得诚实说一句:把整句话压进一个固定大小的「念头」,句子越长越记不全——第二年为治这个毛病发明的「注意力」,后来长成了 Transformer。
两个网络接力:一个把整句话读成一个「念头」,另一个从这个念头出发一个词一个词地重说出来——翻译从「流水线拼积木」变成「先读懂、再重说」,今天大模型「你问我答」的形态就是从这里长出来的。
想看编码器–解码器的结构图、倒序技巧和真实比分? → 切到精读版
Seq2Seq 用两个多层 LSTM 组成「编码器–解码器(encoder–decoder)」:编码器把任意长的输入序列读成一个固定长度的向量,解码器再从这个向量出发逐词生成任意长的输出序列;配合「倒序输入」这个技巧,它在 WMT'14 英法翻译上让端到端神经网络第一次超过强大的统计机器翻译基线(BLEU 34.8 对 33.3),从此确立了「一切皆序列到序列」的范式。
作者是 Ilya Sutskever、Oriol Vinyals、Quoc V. Le,来自 Google,论文发在 NIPS 2014。它上承 LSTM(1997,Paper 7)和更早提出类似「编码–解码」想法的 Kalchbrenner & Blunsom(2013)、Cho 等(2014),下启 Bahdanau 注意力(2014)与 Transformer(2017)——现代大模型这条线,正是从这里开始成形。
到 2014 年,深度网络已在语音、图像上大放异彩,但有个死穴:输入和输出都得是事先定好维度的向量。而现实里最有价值的一批问题——翻译、语音识别、问答——都是「序列进、序列出」,且两头的长度都不定、还不知道怎么对应。
当时统治翻译的 SMT 是一条庞大流水线:词对齐、短语表、调序模型、语言模型分头训练,再手工调权重拼在一起。它 work,但每个模块要专家伺候、错误层层传递、优化目标支离破碎。真正的问题是:能不能用一个神经网络,端到端地直接学「给定输入序列、输出序列的概率」,把整条流水线换成一个可训练的整体?缺的就是一个能对付「变长进、变长出」的通用架构。
Seq2Seq 用两个独立的 LSTM。编码器逐词读入原句,每读一个词更新一次隐状态;读完整句(以结束符 <EOS> 收尾),此刻的隐状态就是整句话的固定长度向量 v——论文里俗称「思想向量(thought vector)」,整句的意思被压缩在这一个向量里。
解码器本质上是一个「被 v 定了调」的语言模型:以 v 作为自己的初始记忆,逐词生成译文——用行内式子写就是 p(y₁…yₜ | x) = ∏ p(yₜ | v, y₁…yₜ₋₁),白话是「每个新词的选择,都取决于整句原文的念头 v,加上我已经说出口的部分」。每步它对整个词表给出一个概率分布,选出的词又作为下一步的输入;直到生成 <EOS> 才停——输出长度由模型自己决定,这就是变长输出的解法。
为什么拆成两个网络?一是输入输出往往是两种语言,各用一套参数各司其职;二是这个「接口」极其干净——两边只交接一个向量 v,于是编码端和解码端可以各自加深加宽。论文里两边都是 4 层深 LSTM(每层 1000 个单元、词向量 1000 维,输入词表 16 万、输出词表 8 万),深版本明显好于浅版本。
论文最出名的技巧:把源句倒过来喂(「A B C → W X Y」训练成「C B A → W X Y」,目标句不动)。为什么有用?正着喂时,源句开头的词要等整句读完、再生成大半译文才被用到,隔了太多步;倒过来后,源句开头恰好紧挨着译文开头,凭空造出一批「短程依赖」。优化器先轻松学会「开头对开头」,建立起对齐后,长距离的对应也跟着顺了——虽然词与词的平均距离根本没变。
效果惊人:困惑度(perplexity,衡量模型对下个词有多「不确定」,越低越好)从 5.8 降到 4.7,BLEU 从 25.9 涨到 30.6。也要诚实说:这是个纯经验的技巧,作者当时也没有完整的理论解释。
训练目标很朴素:在海量句对上最大化正确译文的概率(逐词的交叉熵)。解码时用束搜索:每步保留 B 个最有希望的部分译文往下扩展;有意思的是 B=2 就已接近最佳,说明模型本身的概率估计相当准。为防训练中梯度突然变得巨大(梯度爆炸),超过阈值就整体缩放(梯度裁剪)。整个系统在 8 块 GPU 上(4 块跑 LSTM 各层、4 块算词表概率)训练了约 10 天。
基准是 WMT'14 英→法翻译任务,训练用其中 1200 万句对。代表性数字:
它确立了一个统治此后十年的范式:「一切皆序列到序列」。翻译、摘要、对话、语音识别、看图说话(CNN 当编码器 + LSTM 当解码器)、代码生成——全都套这一个框架。2016 年 Google 翻译上线 GNMT(本架构加注意力的工业化版本),一夜之间替换了运行十年的 SMT 流水线,是神经网络第一次整体接管一个大型互联网产品的核心。更深远的是:今天大模型「prompt 进、回答出」的形态,正是这个条件逐词生成框架的直系后代——只不过编码器和解码器合并成了一个 Transformer。三位作者也都成了这波浪潮的核心人物:Sutskever 后来任 OpenAI 首席科学家,Vinyals 领导 DeepMind 的深度学习研究。
① 一句话:两个深 LSTM 组成编码器–解码器,中间只交接一个固定长度向量 v,端到端学会「变长序列 → 变长序列」。
② 痛点:深度网络只吃定长输入输出,而翻译等核心问题是变长序列进出;SMT 流水线模块多、难优化。
③ 机制:解码器是被 v「定调」的语言模型,p(y|x) = ∏ p(yₜ|v, y₁…yₜ₋₁),逐词生成、生成 <EOS> 即停,输出长度自己定。
④ 大招:源句倒序输入,句首对齐变成短程依赖,BLEU 25.9 → 30.6。
⑤ 结果:WMT'14 英法 BLEU 34.8 超过 SMT 基线 33.3,神经翻译首胜;重排序可到 36.5。
⑥ 证据:句向量可视化显示按语义聚类、对语态不敏感——v 真的在编码「意思」。
⑦ 影响:确立 seq2seq 范式,催生 GNMT、注意力、Transformer;今天 LLM 的问答形态是它的直系后代。
⑧ 局限:固定向量长句丢信息(注意力因此而生)、倒序是经验 hack、词表 UNK 问题、RNN 难并行终被 Transformer 取代。