把 Transformer 当成一个黑盒,先搞清楚它的输入输出和特性
这个系列打算从头系统的学习一下 Transformer。第一篇先不看内部结构,把 Transformer 当成一个黑盒,只关心它的输入是什么,输出是什么,有哪些特性。把这些搞清楚以后,后面拆开每个模块时就比较容易理解它为什么要这么设计。
Transformer 是 Google 在 2017 年的论文 Attention Is All You Need 里提出的,最初是用来做机器翻译的,比如把“我爱吃苹果”翻译成“I love eating apples”。
原版的 Transformer 分为 encoder 和 decoder 两部分,工作的时候
这里的向量化,就是把每个词元变成一串数字(向量),比如“苹果”可能变成 [0.21, -1.30, 0.85, ...],实际有几百到几千个数。之所以要这么做,是因为模型只会对数字做计算,没法直接处理文字。而且这串数字还得有意义,能体现出词元之间的关系。这有点像把城市名换成经纬度:光看“西安”“咸阳”“广州”三个名字看不出谁离谁近,换成坐标一算就知道了。词元变成向量以后,意思相近的词元向量也离得近,模型才能拿来比较和计算。而且 encoder 算出的向量是结合了上下文的,同样是“苹果”,在“我爱吃苹果”和“苹果发布了新手机”里得到的向量是不一样的。

动图里需要注意的一点是,decoder 每一轮输出的并不是一个词,而是词表里所有词元的概率分布。比如预测第一个词时,它会给出“I”的概率是多少、“My”的概率是多少……词表里几万个词元每个都有一个概率,加起来等于 1,图里只画了概率最大的 3 个。最终选哪个词元,是从这个分布里挑出来的,挑出来以后再拼回去,进入下一轮。
后来的大语言模型基本都是在这个结构的基础上做的变体。