近年来, TRansfoRMeR 机器学习模型已经成为深度学习和深度神经网络技术进步的主要亮点之一。它主要用于自然语言处理中的高级应用。谷歌正在使用它来增强其搜索引擎结果。OpenAI 使用 TRansfoRMeR 创建了著名的 GPT-2和 GPT-3模型。
自从2017年首次亮相以来,TRansfoRMeR 架构不断发展并扩展到多种不同的变体,从语言任务扩展到其他领域。它们已被用于时间序列预测。它们是 DeepMind 的蛋白质结构预测模型 AlphaFold 背后的关键创新。OpenAI 的源代码生成模型 codex 也基于 TRansfoRMeR。TRansfoRMeR 最近也进入了计算机视觉领域,在许多复杂任务中它们正在慢慢取代卷积神经网络(CNN)。
研究人员仍在探索改进 TRansfoRMeR 并将其用于新应用的方法。以下是关于 TRansfoRMeR 令人兴奋的原因以及它们如何工作的简要解释。
传统的前馈神经网络并非旨在跟踪序列数据并将每个输入映射到输出。它适用于诸如图像分类之类的任务,但在诸如文本之类的序列数据上却失败了。处理文本的机器学习模型不仅必须处理每个单词,还必须考虑单词如何按顺序排列并相互关联。而一个单词的含义可能会随着句子中出现在它们之前和之后的其他单词而改变。
在 TRansfoRMeR 出现之前,递归神经网络(RNN)是自然语言处理的首选解决方案。当提供一个单词序列时,递归神经网络(RNN)将处理第一个单词,并将结果反馈到处理下一个单词的层。这使它能够跟踪整个句子,而不是单独处理每个单词。
递归神经网络(RNN)的缺点限制了它们的用处。首先,它们的处理速度非常缓慢。由于它们必须按顺序处理数据,因此无法在训练和推理中利用并行计算硬件和图形处理单元(GPU)。其次,它们无法处理长序列的文本。随着递归神经网络(RNN)深入到文本摘录中,句子开头几个单词起到的效果逐渐减弱。当两个链接的词在文本中相距很远时,这个被称为“梯度消失”的问题就会出现。第三,它们只捕捉到一个单词和它之前的单词之间的关系。实际上,单词的含义取决于它们之前和之后的单词。
长短时记忆(LSTM)网络是递归神经网络(RNN)的继任者,能够在一定程度上解决梯度消失问题,并且能够处理更大的文本序列。但是长短时记忆(LSTM)的训练速度甚至比递归神经网络(RNN)还要慢,并且仍然无法充分利用并行计算。他们仍然依赖于文本序列的串行处理。
2017年发表的一篇名为《注意就是所需要的一切》的论文介绍了 TRansfoRMeR,指出 TRansfoRMeR 做出了两个关键贡献:首先,它们使并行处理整个序列成为可能,从而可以将顺序深度学习模型的速度和容量扩展到前所未有的速度。其次,它们引入了“注意机制”,可以在正向和反向的非常长的文本序列中跟踪单词之间的关系。
在讨论 TRansfoRMeR 模型的工作原理之前,有必要讨论一下序列神经网络解决的问题类型。
“向量到序列”模型采用单个输入(例如图像)并生成数据序列(例如描述)。“序列到向量”模型将序列数据作为输入,例如产品评论或社交媒体帖子,并输出单个值,例如情绪分数。“序列到序列”模型将一个序列作为输入,例如一个英文句子,并输出另一个序列,例如该句子的法语翻译。
尽管存在差异,但所有这些类型的模型都有一个共同点—他们学习表达。神经网络的工作是将一种类型的数据转换为另一种类型的数据。在训练期间,神经网络的隐藏层(位于输入和输出之间的层)以最能代表输入数据类型特征的方式调整其参数,并将其映射到输出。最初的 TRansfoRMeR 被设计为用于机器翻译的序列到序列(seq2seq)模型(当然,序列到序列模型不限于翻译任务)。它由一个编码器模块组成,该模块将来自源语言的输入字符串压缩为一个向量,该向量表示单词及其相互之间的关系。解码器模块将编码向量转换为目标语言的文本字符串。
输入文本必须经过处理并转换为统一格式,然后才能输入到 TRansfoRMeR。首先,文本通过“标记器”,将其分解为可以单独处理的字符块。标记化算法可以取决于应用程序。在大多数情况下,每个单词和标点符号大致算作一个标记。一些后缀和前缀算作单独的标记(例如,“ize”、“ly”和“pRe”)。标记器生成一个数字列表,表示输入文本的标记ID。
然后将标记转换为“单词嵌入”。单词嵌入是一种试图在多维空间中捕捉单词价值的向量。例如,“猫”和“狗”这两个词在某些维度上可能具有相似的值,因为它们都用于关于动物和宠物的句子中。然而,在区分猫科动物和犬科动物的其他维度上,“猫”比“狼”更接近“狮子”。同样,“巴黎”和“伦敦”可能彼此更加接近,因为它们都是城市。然而,“伦敦”更接近于“英格兰”,“巴黎”更接近于“法国”,这是因为在一个国家的区分维度上。而单词嵌入通常有数百个维度。
单词嵌入是通过嵌入模型创建的,这些模型与 TRansfoRMeR 分开训练。有几种用于语言任务的预训练嵌入模型。
一旦句子被转换成一个单词嵌入列表,它就会被输入到 TRansfoRMeR 的编码器模块中。与递归神经网络(RNN)和长短时记忆(LSTM)模型不同,TRansfoRMeR 一次不会接收一个输入。它可以接收整个句子的嵌入值,并并行处理它们。这使得 TRansfoRMeR 比它们的前辈更具有计算效率,并且还使它们能够在正向和反向序列中检查文本的场景。
为了保持句子中单词的顺序,TRansfoRMeR 应用“位置编码”,这基本上意味着它修改每个嵌入向量的值,以表示其在文本中的位置。
接下来,输入被传递到第一个编码器块,它通过“注意层”对其进行处理。注意层试图捕捉句子中单词之间的关系。例如,考虑 “一只大黑猫碰掉一个瓶子之后横穿马路”(The BIg black cat cRoSSed the Road afteR IT dRopped a bOTTle on ITs side)这个句子。在这里,模型必须将“IT”与“cat”相关联,将“ITs”与“bOTTle”相关联。因此,它应该建立其他关联,例如“BIg”和“cat”或“cRoSSed”和“cat”。否则,注意层接收表示单个单词值的单词嵌入列表,并生成表示单个单词及其相互关系的向量列表。注意层包含多个“attention heads” (注意头),每个“attention heads”都可以捕获单词之间的不同类型的关系。
注意层的输出被馈送到前馈神经网络,该网络将其转换为向量表示,并将其发送到下一个注意层。TRansfoRMeRs 包含几个注意块和前馈层,以逐渐捕捉更复杂的关系。
解码器模块的任务是将编码器的注意向量转换为输出数据(例如,输入文本的翻译版本)。在训练阶段,解码器可以访问编码器产生的注意向量和预期的结果(例如,翻译的字符串)。
解码器使用相同的标记化、单词嵌入和注意机制来处理预期结果并创建注意向量。然后,它在编码器模块中传递该注意向量和注意层,从而在输入和输出值之间建立关系。在翻译应用程序中,这是源语言和目标语言中的单词相互映射的部分。与编码器模块一样,解码器注意向量通过前馈层传递。然后其结果被映射到一个非常大的向量池,即目标数据的大小(在翻译的情况下,这可以涉及数万个单词)。
在训练期间,TRansfoRMeR 提供了非常大的配对示例语料库(例如,英语句子及其相应的法语翻译)。编码器模块接收并处理完整的输入字符串。然而,解码器接收到输出字符串的掩码版本(一次一个单词),并尝试建立编码的注意向量和预期结果之间的映射。编码器尝试预测下一个单词,并根据其输出与预期结果之间的差异进行更正。这种反馈使转换器能够修改编码器和解码器的参数,并逐渐在输入和输出语言之间创建正确的映射。
TRansfoRMeR 拥有的训练数据和参数越多,它就越有能力在较长文本序列中保持连贯性和一致性。
在以上研究的机器翻译示例中,TRansfoRMeR 的编码器模块学习英语单词和句子之间的关系,而解码器学习英语和法语之间的映射。
但并非所有 TRansfoRMeR 应用都需要编码器和解码器模块。例如,大型语言模型的GPT系列使用解码器模块堆栈来生成文本。BERT是谷歌研究人员开发的 TRansfoRMeR 模型的另一种变体,而它只使用编码器模块。
其中一些架构的优点是它们可以通过自我监督学习或无监督方法进行训练。例如,BERT 通过获取大量未标记文本的语料库,可以屏蔽其中的一部分,并尝试预测缺失的部分来进行大部分训练。然后,它根据其预测接近或远离实际数据的程度调整其参数。通过不断地重复这个过程,BERT 捕捉到了不同场景中不同单词之间的关系。在这个预训练阶段之后,BERT 可以通过在少量标记示例上进行训练来针对下游任务进行微调,例如问答、文本摘要或情感分析。使用无监督和自我监督的预训练可以减少注释训练数据所需的工作量。
关于 TRansfoRMeR 和他们正在解锁的新应用程序还有更多,这超出了本文的范围。研究人员如今仍在寻找从TRansfoRMeR中获得更多帮助的方法。
TRansfoRMeR 还引发了关于语言理解和通用人工智能的讨论。显而易见的是,TRansfoRMeR 与其他神经网络一样是一种统计模型,能够以巧妙而复杂的方式捕捉数据中的规律性。虽然它们不像人类那样“理解”语言,但是其发展仍然令人兴奋并且可以提供更多新事物。