学习导读|从机器翻译到 Transformer
“我昨天给了他一本书。”怎样变成 I gave him a book yesterday.?一个译文已经包含了许多决定:谁给谁、动作发生在什么时候、哪些单位要合在一起理解,以及英文怎样安排这些信息。本讲从这件具体的事出发,逐步建立能处理序列、生成译文、读取上下文的系统,再讨论图像和计算资源带来的新问题。
贯穿这些变化的是一个研究问题:面对当前任务,系统缺少哪种信息或处理信息的能力,哪项技术选择值得尝试,又需要什么证据支持?理解这条因果关系,比记住机制出现的先后更有用。
开始课堂 · 连续阅读八章讲义 · 十三个完整主题 · 七本 Notebook 与实验读法
一、先把翻译中的决定做出来
分词让文字成为可处理的单位。本讲采用 我/昨天/给/了/他/一/本/书/。 九个教学单位;这是为分析服务的切分,不意味着所有分词器都应得到同样结果。词性和局部组合帮助判断“本”在“一本书”中的量词用法;语法关系进一步说明“我”是给予者、“他”是接收者,于是英文中需要考虑 I 与 him 的形式。命名实体识别则回答另一类问题:原句中的“我、他”是代词,原句没有显式人名。
词典、关系分析和重排已经能够协助完成这个受限翻译。若任务只要求提取明确的人名片段,规则或小模型也可能足够;是否采用更复杂的系统,要连同任务范围、延迟、成本和维护一起判断。接下来遇到的是如何从更多语料中学习、让不同词和不同句子共享经验的问题。词向量把单位映射为可学习的表示,邻词预测提供一种学习信号;有了词向量以后,整句关系仍需要组合计算。
回看语言分析与组句(T01–T06)和从 ID 到共享表示(T07–T09)。完整理解过程见第一章:从关系与短语到共享表示;继续深读同一句话怎样成为分析对象与模型输入。
二、让状态走完输入,再让系统生成完整输出
RNN 用同一组参数反复更新状态,将当前位置的输入与此前的状态组合起来。“昨天”进入计算时,状态中已经可能带有“我”的影响。共享参数使不同长度的序列可以使用同一套更新规则,也让训练信号沿时间传回。序列加长后,信息保留和梯度传播都值得检查;LSTM 的门控提供了控制写入、保留和读出的办法,效果仍取决于训练与任务。
读完中文还不等于已经生成英文。Seq2Seq 将编码器与解码器接起来:源信息形成生成的条件,从开始符 BOS 出发,每次预测一个目标单位,选出的单位再进入下一步,直到结束符 EOS。句号本身仍是一个预测目标,不能代替 EOS。训练时可以提供正确的历史前缀,生成时则要沿自己的选择继续;因此逐词损失下降以后,还要检查完整输出。
回看共享状态与门控(T10–T14)和从 BOS 到 EOS、再到条件训练(T15–T18)。完整推导见第二章:从 RNN 到条件训练。可从状态与梯度、预测目标与评价、训练分数与实际生成三个主题继续。
三、固定摘要已经能工作,为什么还要逐次读取?
固定摘要给出了一个完整、可以训练的序列系统,但所有目标位置都要通过受限的源信息入口取得条件。写到 I gave 时,接收者可能特别相关;写到书或时间时,当前需要的信息又会改变。Attention 保留各个源位置的表示,让当前生成状态参与决定这一步怎样读取。
这里有两种不同的归一化:先在源位置上分配读取权重,再把读出的内容和生成状态送入输出计算,在目标词表上形成概率。一个位置得到较大权重,并不等于系统已经选中了某个英文词。2014 年的 attention 可以与循环系统一起工作;当时值得检验的是它是否改善了具体错误,以及改善是否足以支付增加的资源。
回看固定入口留下的问题(T19)与读取怎样走到下一词概率(T20–T24)。完整展开见第三章:从固定摘要到逐次读取;原始研究条件与机制分别见2014 年的翻译选择和读取之后怎样决定写 him。
四、重新考虑循环以后,整台翻译器怎样成立?
有了动态读取,还可以继续追问:源位置的表示是否必须依靠逐步循环才能形成?Transformer 让位置之间直接交互,同时用位置条件、可见范围和逐位置计算承担原系统中的不同职责。这项选择带来了新的并行机会,也带来了成对交互和存储的代价,需要与当时有竞争力的循环、卷积路线比较。
读整机时,要分清编码器的 self-attention、解码器的 causal self-attention,以及解码器对源表示的 cross-attention。多头、残差、归一化和前馈网络共同完成一层;输出词表头才把最后的表示变成下一词分布。训练中已知的目标位置可以并行计算,尚未生成的新词仍要等待前一步。
回看源位置怎样形成表示(T25–T29)和完整层与完整解码器(T30–T34)。见第四章:原有职责由谁承担,以及让整套 Transformer 共同完成一次预测。
五、架构出现以后,能力还怎样改变?
移去中文以后,训练任务已经发生变化。下一词预测、补全被遮住的内容和重建受损文本,让同一段文字提供不同的学习要求。数据覆盖什么、目标要求模型保留什么、预训练投入多大规模,都会影响系统最终可以做什么;仅有一张 Transformer 结构图,不能解释今天模型的全部能力。
翻译也可以作为指令和输入放进 decoder-only 模型的同一因果前缀。此时,更新参数与补充当前上下文是两种不同的改变。现代部件值得放回完整模型中理解:它改变了哪项计算、训练或资源条件,依据什么结果采用,而不是只记住名称。
回看训练目标、前缀与参数更新(T40–T43)。见第五章:训练让能力改变,任务让系统分化;深入阅读同一段文本的三种预训练问题和在已有 block 上理解现代部件。
六、图像补充了信息,也要求重新说明任务
原句没有说明封面颜色。如果任务仍是忠实翻译,凭空加上 blue 会改变原意。若任务改为“结合文字和图片,描述这次给书并补充封面颜色”,图像便提供了回答颜色问题所需的新证据。
随后才有机制问题:像素怎样成为视觉表示,怎样与语言的表示维度衔接,语言计算怎样读到这些条件,训练又怎样建立图文对应。换图后分数改变,可以说明输入影响了通路;是否采用了正确的视觉事实,还要结合任务标签、相关图、错配图和缺少证据的条件判断。
回看明确缺少的信息与新任务(T44–T45),再看视觉表示、训练与事实使用(T46–T49)。见第六章:图像怎样成为语言计算的新证据和换图后分布改变,模型是否看懂了。
七、计算正确以后,怎样让资源花得值得?
生成已经进行到 a,选出的 blue 作为新输入时,旧前缀中哪些计算可以复用?KV cache 保存各层已有位置的键和值,减少重复计算;新增位置仍要逐层处理,缓存也占用内存。
再看多位置一起计算的阶段:朴素 attention 会形成大的分数表和概率表,计算量、存储容量与数据搬运可能分别成为瓶颈。FlashAttention 改变分块、片上存储和 softmax 的累计方式,在数学上计算同一定义的 attention,浮点计算则按容差核对;它没有把一般的成对 attention 运算量改成线性。缓存与这种执行优化解决的问题不同,实际速度还要看实现、形状、精度和硬件。
回看逐词生成中的复用(T50)与一次 attention 内的搬运(T51);需要逐项计算时进入资源展开(T60–T65)。见第七章:同一 attention 怎样改变执行,以及缓存与有效上下文、有单位的资源账本。
八、回到当时,判断下一步值得改变什么
现在回到固定摘要已经可以工作的时点。扩大状态、改变读取方式、补充训练数据,都可能是合理的下一步。判断要落在具体预期上:希望减少哪类错误,需要增加多少成本,哪项结果会让自己改变原来的选择?
这也适用于后面的视觉和效率问题。能接入图像之后,要问相关事实是否被采用;能容纳更长输入之后,要问远处证据是否真正影响回答;减少重复计算之后,要核对实际时间和资源。不同证据支持不同结论,它们共同构成研究选择的依据。
回看全课回访与研究选择(T52–T53),阅读第八章:回看技术转折,继续提出问题;还可沿从 2017 计算图到后续架构与持续状态系统继续比较。
课后怎样继续
连续讲义适合补齐前后因果;十三个完整主题适合从一个疑问向下追。可以先读到能够提出具体问题的位置,例如“读取权重为什么不是词表概率”,把该主题的完整 URL 和自己的疑问交给 Agent;需要时一并给出图、公式或保存输出。
讨论之后,沿主题中的链接回到同一本 Notebook,核对一个变量、一行概率或一项实际结果。若想改变条件,先写下预期,再在自己的副本运行相关单元,并保留这次的配置与输出。无需先完成所有实验。七本 Notebook 的分工和三个具体读法见实验入口。