2023-Transformers from Scratch

Original中文翻译 TODO!

Transformers from Scratch

“我拖延了几年时间后才开始深入研究 Transformers 模型。最后因为不了解他们是如何实现而产生的不适感变得对我来说过于强烈(才终于开始着手其中),以下便是我深入研究的内容。

Transformers 在 2017 年的这篇论文中被介绍为序列转换的工具——将一个符号序列转换为另一个符号。该领域最流行的应用是语义翻译,如从英语翻译到德语。它同时也被拓展出实现序列补全的功能-给定一个起始提示,以相同的脉络和风格进行下去。Transformers 已迅速成为自然语言处理的研究和产品开发的一个不可或缺的工具。

在我们开始之前先提个醒。我们将讨论很多关于矩阵乘法的内容,并涉及反向传播(用于训练模型的算法),但你不需要事先了解任何内容。我们将逐一添加我们需要的概念,并加以解释。

这将不是一段短暂的学习旅程,但我希望你能乐在其中。”

One-hot encoding(独热编码)

首先是文字处理部分。对于海量的文字,我们的第一步是把所有的字符转换成数据,这样就可以对它们进行数学运算。

假设我们的目标是实现可以响应我们语音命令的计算机。我们的工作是建立一个 Transformers 工具,将一连串的声音转换为一连串的文字。

首先需要选择我们的词汇表,即我们在每个序列中要使用的符号集合。在我们的案例中,将有两类不同的符号集合,一类代表声音输入序列,另一类代表输出的文字序列。

现在,假设我们使用英语工作。英语中有数万个单词,也许还有几千个用以涵盖计算机专用术语。这将使我们的词汇量级达到十万之多。将单词转换为数字的一种方法是,从一开始计数,给每个单词分配自己的数字。这样一来,一连串的单词就可以被表示为一串数字。

例如,假设有一种极小的语言,其词汇量只有三个:files, find, and my。每个词都可以换成一个数字,也许 files=1,find=2,my=3。那么,由单词序列[find, my, files]组成的句子 “Find my files “就可以表示为数字序列[2, 3, 1]。

这是一种相当有效的将符号转换为数字的方法,但事实证明,还有一种格式对计算机来说更容易操作,那就是 One-hot 编码。在单次编码中,一个符号由一个大部分为零的数组表示,与词汇的长度相同,只有一个元素的值为 1。数组中的每个元素都对应于一个单独的符号。

另一种认识 One-hot 编码的方式是,每个词仍然被分配自己的数字,但现在这个数字是一个数组的索引。下图是我们上面的例子,用 One-hot 编码表示。

One-hot

因此,“Find my files “这句话变成了一连串的一维数组,在你把它们压缩在一起后,开始看起来像一个二维数组了。

二维数组

注意,我将交替使用 “一维数组 “和 “矢量 “这两个术语。同样,“二维数组 “和 “矩阵 “也是如此。

点积

One-hot 表示法的一个真正有用的地方是,它让我们可以计算点积。它们也以其他令人生畏的名字著称,如内积和标量积。要得到两个向量的点积,需要将它们相应的元素相乘,然后将结果相加。

点积

当我们处理 One-hot 词的表示时,点积相当有用。任何 One-hot 向量与自身的点积都是 1。

上一页