设想我们仍在翻译“小王把昨天借来的那本蓝色的书还给管理员”。前一篇解决了译文如何查看原文。现在先不急着翻译,只看原文内部:“书”要利用“蓝色”的信息,或者“还给”要结合人物关系,消息必须怎样走?
循环网络沿着阅读次序更新状态,远处信息常需要经过多步传递。2017年,Vaswani等人提出Transformer,采用以注意力为核心的架构来处理这类序列任务。1
它的一项关键改变是:让不同位置在一层计算中直接按权重交换信息。接力赛改了赛制,参赛者终于不必等纸条绕操场一周。
先分清:查别人,还是查自己这句话
上篇中,译文的当前状态查看原文各位置,这类信息跨越了两组表示。自注意力中的“自”,则表示查询与被查询的信息来自同一组序列表示。
设想“书”这个位置准备更新自身表示。它与句中允许访问的位置计算匹配关系,再把这些位置提供的信息按权重组合回来。与此同时,“蓝色”“还给”“管理员”等位置,也各自计算自己的组合。
所以自注意力不是挑一个全句重点,让其他词集体退场。每个位置都可以有自己的一组权重,得到不同的新表示。同一层内,各位置使用的是上一层提供的信息;不是“书”先更新,再把新答案即时传给“蓝色”。这一点让许多计算能够同时安排。1
对于“书”,颜色可能有用;对于“还给”,参与者可能有用。这里只是在描述可能学到的关系,不声称某个真实模型的一层,必然按照我们画出的语法分工运行。
变化发生在表示的形成过程中。输入还是原来的句子,但每个位置现在可以通过直接加权,取得远处位置的信息。原来的注意力负责帮译者找材料,自注意力把材料本身也重新整理了一遍。
查询、键和值,分别干什么?
把这些词暂时放进图书馆场景,会比较容易分清工作。查询是本轮找东西所用的条件;键是用来与条件匹配的表示;值是匹配后实际取来组合的信息。它们常分别写成Q、K、V。
真实计算里,三者都是数字列表,由输入表示经过三套学出来的变换产生。它们不是人写的搜索词、书籍编号和完整书页;图书馆类比只对应“拿什么找、拿什么比、最后取什么”。
设想“书”的查询与“蓝色”的键得到较高匹配分数。系统对所有候选分数作尺度调整,再转为合计为一的权重,按这些权重混合各位置的值。某处匹配高,就可能向结果贡献更多信息。
为什么不直接拿原词向量互相比一下?因为“哪些特征适合判断相关性”和“哪些信息应该传过去”未必相同。分别学习查询、键、值的变换,允许模型为这两项工作安排不同的数字组合。1
进一步说,查“谁归还”与查“什么颜色”,可能需要不同的信息通道。多头注意力让几套不同的变换并行计算,再把结果合并。多头不是召集几个有独立人格的专家,也没有规定一号头终身管理主语。它给模型提供多组可学习的关系计算,实际分工要看训练结果。
让所有问题都挤进同一组权重,好比图书馆只留一个窗口,借书、问路和投诉空调都在那里排队。多头增加了处理不同信息的空间,但并不保证每个窗口都有清晰的人工岗位说明。
直接联系以后,谁还记得先后顺序?
设想把句子改成“管理员把书还给小王”。谁还书变了。若模型只把相同词组成一堆,并按内容匹配,它不能仅凭这堆词恢复原来的次序。
原始Transformer因此向词的表示加入位置信息。论文使用不同频率的正弦和余弦生成位置编码,也比较了可学习的位置表示。对普通读者来说,关键是每个位置额外带上能参与计算的顺序线索,而非要求我们先学会三角函数才能还书。1
注意力交换信息之后,每个位置还经过另一段神经网络计算,把汇集的内容进一步变换。多层重复这种过程,让后面的关系判断建立在前面加工过的表示上。原始结构还保留前一阶段表示的直接通路,并调整数值尺度,帮助多层计算稳定训练。
因此,Transformer并不是“把词两两看一眼”就结束。位置提供顺序,注意力传递信息,逐位置网络加工信息,多层叠加改变表示;这些部分的参数通过任务误差共同训练。名字里虽然没有“训练很费电”,账单里会有。
训练可以一起算,回答为何还是往外蹦?
原始Transformer是一套编码器与解码器结构。原文编码可以利用整句信息;生成译文时,解码器必须限制对未来输出的访问,否则训练“预测下一个词”时就偷看了答案。这个限制叫因果遮罩:把不允许查看的位置挡住。1
设想训练材料已经写好整句译文。每个位置的正确后续都在数据里,所以多个位置的预测可以一起计算,只要遮罩保证它们各自看不到不该看的未来。实际生成时,下一个词还没选出来,后一步就少了一项输入,常见的逐词生成仍有先后依赖。
训练并行与生成串行可以同时成立。不能因为许多训练计算能一起做,就说模型一次性想好整篇文章;也不能因为屏幕上文字逐步出现,就反推它内部仍是早期循环网络。
直接联系还有另一笔费用:普通完整自注意力要处理位置之间的配对。只看这一部分,长度翻倍,配对数量约变成四倍。实际速度和显存还受具体实现及其他计算影响;后续优化会改变资源使用,不能把配对数量直接当作产品账单。1
现在可以回答标题:Transformer通过自注意力,让每个位置根据学出来的匹配关系,直接汇集其他位置的信息,再经过加工和多层更新。它缩短了许多信息传递路径,也给并行训练提供了便利,代价包括长序列中的大量配对计算。
它为后来的模型提供了重要基础。但同一套架构,拿去填空还是接龙,会培养出不同使用方式。下一篇要看的不再只是“信息怎样流动”,而是“训练到底让它完成什么任务”。
参考资料
- Attention Is All You Need,Ashish Vaswani、Noam Shazeer、Niki Parmar等,2017。论文