零基础构建 Transformer 模型
在自然语言处理和计算机视觉领域,Transformer 先后替代了 RNN、CNN 的地位成为首选模型。想进入机器学习的领域,就必须得懂 Transformer。
这里介绍一篇由前微软、Facebook 首席数据科学家撰写的零基础教程,从视觉化矩阵乘法开始,带你一步步入门。DeepMind 研究科学家 Andrew Trask 也推荐道:"这是我至今见过最好的教程,它对入门者非常非常友好。"
从视觉化矩阵乘法开始学
因为这是一个新手入门的教程,所以在正式学 Transformer 之前,会有很多介绍矩阵乘法和反向传播的内容。作者在介绍的过程中逐个添加学习 Transformer 所需要了解的概念,并加以解释。
基础概念解释
首先,了解 Transformer 的第一步就是编码,就是把所有的单词转换成数字,进而可以进行数学计算。
一般来说,将符号转换为数字的有效方法是先对所有单词符号分配数字,每个单词符号都会对应一个独立的数字,然后单词组成的句子便可以通过数字序列来表示了。
举个简单的例子,比如 files=1、find=2 和 my=3。然后,句子'Find my files'可以表示为数字序列 [2,3,1]。
不过这里介绍的是另外一种方法,即独热编码(One-hot Encoding)。
具体来说,就是将单词符号转换成一个数组,这个数组中只能有一个 1,其他全为 0。还是上面那个例子,用这种方式表示的话如下所示。

这样一来,句子'Find my files'就变成了一维数组的序列,压缩到一块也就像是二维数组了。

接下来就要再来了解下点积和矩阵乘法了。
点积这里也就不再过多赘述,元素相乘再相加便可以了。
它有两个作用,一个是用来度量两个单词之间的相似性,一个是显示单词的表示强度。
相似性很容易判别,一个单词的独热矢量和自己的点积是 1,和其他的点积为 0。
至于表示强度,和一个能够表示不同权重的值向量进行点乘便可以了。

矩阵乘法,看下面这幅图便足矣。

从简单的序列模型开始介绍
了解完这些基础概念之后,就要步入正轨了,开始学习 Transformer 是如何处理命令的。
还是用例子来解释,开发 NLP 计算机界面时,假设要处理 3 种不同的命令:
- Show me my directories please.
- Show me my files please.
- Show me my photos please.
可以用下面这个流程图(马尔可夫链)来表示,箭头上的数字表示下一个单词出现的概率。

接下来解释将马尔可夫链转换为矩阵形式了,如下图。
每一列代表一个单词,并且每一列中的数字代表这个单词会出现的概率。
因为概率和总是为 1,所以每行的数字相加都为 1。

以 my 为例,要想知道它的下一个单词的概率,可以创建一个 my 的独热向量,乘上面的转移矩阵便能得出了。

再然后,作者又详细介绍了二阶序列模型,带跳跃的二阶序列模型,掩码。
至此,关于 Transformer,已经学到了最核心的部分,至少已经了解了在解码时,Transformer 是如何做的。
不过了解 Transformer 工作的原理和重新建造 Transformer 模型之间还是有很大差距的,后者还得考虑到实际情况。
因此教程中还进一步展开,作了更大篇幅的学习教程,包括 Transformer 最重要的注意力机制。
换句话说,这个教程就是从最基础的东西教我们重新构建一个 Transformer 模型。
更加具体内容就不在这里一一列出了,感兴趣的朋友可以戳文末链接学习。
教程目录结构如下,可以根据自己的基础知识选择从哪个阶段开始学起:
- 独热(one-hot)编码
- 点积
- 矩阵乘法
- 矩阵乘法查表
- 一阶序列模型
- 二阶序列模型
- 带跳跃的二阶序列模型
分割线(学完上面这些,就已经把握住 Transformer 的精髓了,不过要想知道 Transformer,还得往下看)
- 矩阵乘法中的注意力
- 二阶矩阵乘法序列模型
- 完成序列
- 嵌入
- 位置编码
- 解除嵌入
- softmax 函数
- 多头注意力机制
- 使用多头注意力机制的原因
- 重现单头注意力机制
- 多头注意力块之间的跳过连接
- 横向规范化(Layer normalization)
- 多注意力层
- 解码器堆栈
- 编码器堆栈
- 编码器和解码器栈之间的交叉注意块
又一个分割线(如果你学到这里,那说明 Transformer 你已经掌握得差不多了,后面讲的东西就是关于如何让神经网络表现良好了)
- 字节对编码(Byte pair encoding)


