前不久的一次直播中李开复博士间接表示,在大模型时期,学过传统人工智能算法的思维是被污染过的。

在人工智能革命浪潮中,想要深入理解大模型事理,建立或重塑大模型算法思维是很有必要的。

5月初,X上有人晒出Ilya Sutskever(原OpenAI首席科学家)为转战AGI的程序员整理的AI论文清单(https://arc.net/folder/D0472A20-9C20-4D3F-B145-D2865C0A9FEE),并附言“学会这些,你可以节制当今90%的主要内容”。

这无疑是学习大模型事理的高质量一手资料,我操持按照清单把论文原文阅读一遍,并翻译为中文,欢迎互换。

进修OpenAI Ilya推荐的AI论文01 Attention is all you need

工具

平时在阅读论文过程中我常常碰着不认识的单词,当时会线上查字典,但之后很快就又会忘却。

有个叫Pica pica单词本的小程序挺好的,用它查完单词我会把认为有代价的单词加到单词本里,同时把论文中完全的句子也一并复制加到单词本。

这个单词本能按经典的艾宾浩斯遗忘曲线自动打算出每一个单词的下次复习韶光,我就在每天饭后最放松的时候进这个单词本看一下。

按它方案的复习顺序回顾一下单词,同时还能看到之前添加的论文句子,连带着论文的片段也回顾了

这种在论文的情景中记单词、通过单词带出论文情景的办法真是一绝,特殊符合大脑影象的底层逻辑,非常高效。

正文

Attention is all you need

把稳力是你须要的统统

原文首次揭橥于2017年6月12日,本文翻译自2023年8月2日版本。

择要

主流序列转导模型都基于繁芜的循环或卷积神经网络,它们有一个编码器和一个解码器。

性能最好的模型还通过把稳力机制连接编码器和解码器。

作者提出一种新的大略网络架构——Transformer,它完备基于把稳力机制,完备不须要循环和卷积。

实验表明,这个模型具有卓越的质量,同时具有更高的并行性,并且须要的演习韶光显著减少。

作者还证明了 Transformer 可以很好地推广到其他任务。

1. 简介

循环神经网络,特殊是是非时影象和门控循环网络,公认是办理序列建模和转导问题的最前辈方法。

但是,它固有的序列性子导致无法在演习样本内部并行化,这对长序列的处理非常主要。

把稳力机制许可对依赖关系进行建模,而不必考虑输入和输出序列中的间隔。
它常日与循环神经网络结合利用。

作者提出Transformer,避开重复循环架构,完备依赖把稳力机制绘制输入和输出之间的全局依赖关系。
它显著提高了并行度。

2. 背景

为了减少序列打算,以卷积神经网络为基本构建块的扩展神经,可以并行打算输入与输出之间的隐蔽表示。

但是随着输入与输出之间的间隔增加,打算量会呈线性或对数增加。

Transformer可以将上述打算量降至恒天命量级。

但个中的均匀把稳力加权位置会导致有效分辨率降落,作者利用多头把稳力办理。
(3.2述)

自把稳力,也叫内部把稳力,是一种将单个序列的不同位置联系起来,从而打算全体序列表示,的把稳力机制。

自把稳力已经运用于阅读理解、抽象概括、文本蕴涵等各种任务。

端到端影象网络基于循环把稳机制而不是序列对齐循环,已被证明在大略措辞问答和措辞建模任务上表现良好。

Transformer是第一个完备依赖自把稳力,不该用序列对齐的循环或卷积,打算其输入和输出表示的转换模型。

3. 模型架构

大多数竞争性神经序列转导模型都是编码器-解码器构造。

编码器将输入序列映射到中间序列,解码器基于给定的中间序列一次一个元素的天生输出序列。

在每个步骤中模型都是自回归的,即,天生下一个符号时将先前天生的符号用作附加输入。

3.1 编码器和解码器的层构造

编码器

由6个构造相同的模块组成。

每个模块由2个子模块组成。

第1个子模块(下半部分)是多头把稳力机制网络(Multi-Head Attention),同时,用残差网络连接(Add),然后进行层归一化(Norm)。

第2个子模块(上半部分)是全连接前馈网络(Feed Forward),同时,用残差网络连接(Add),然后进行层归一化(Norm)。

解码器

也由6个构造相同的模块组成。

每个模块由3个子模块组成。

第1个子模块(下三分之一)和第2个子模块(上三分之一)与编码器的子模块相同,个中第1个子模块增加了遮蔽(Masked),以确保i位置的输出只依赖i位置之前的已知输出。

第3个子模块(中间三分之一)与编码器的第1个子模块相同,其部分输入来自编码器的输出(连接编码器与解码器的那条线)。

3.2 把稳力

把稳力函数将查询(Q)和一组键值(K/V)对映射为输出。

输出是V的加权和,个中权重来自Q和K的兼容性函数打算。

缩放点积把稳力

作者将本文设计的把稳力称为“缩放点积把稳力”,包括维度的Q、K和维度的V。

打算办法为:Q与K进行点积运算(MatMul),然后除以(Scale),再经由运算,然后乘V。
在实践中会打包为矩阵运算。

两个最常用的把稳力函数是加法把稳力点积把稳力

点积把稳力即上述把稳力去掉除以部分,加法把稳力利用具有一个隐蔽层的前馈网路作为兼容性函数。

理论上两个把稳力函数的繁芜度相同,但在实践中,点积把稳力运算更快、更节省空间,由于它可以利用矩阵乘法。

作者疑惑,对付较大的维度值,点积幅度会增大,从而将函数推入梯度极小的区域。

为了抵消这种影响,作者将点积除以d_k进行缩放。

多头把稳力

作者创造,用不同的、学习过的线性投影矩阵,将Q、K、V向、、维矩阵分别线性投影(linearly project)h次,效果更好。
即,多头把稳力更有效。

多头把稳力许可模型关注位于不同位置的不同表示子空间的信息,而但把稳力头的均值会抑制这一点。

在本文,作者利用8个并行把稳力头,每个把稳力头利用的维度是 ===64。

把稳力在模型中的运用

Transformer 以三种办法利用多头把稳力:

"编码器-解码器 把稳力"层(解码器的第3个子模块),个中Q来自前一个解码器,这模拟了序列到序列模型中的范例编码器-解码器把稳机制。
编码器中的自把稳力层(第1个子模块)。
解码器中的自把稳力层(第1个子模块)。

3.3 位置敏感前馈网络

编码器和解码器的子模块包含一个全连接前馈网络。

它由两个线性变换组成,中间利用激活。

在不同位置它的参数不同,在输入输出位置的维度为512,在内层的维度为2048。

3.4 嵌入和softmax

与其他序列转导模型类似,作者利用学习的embeddings将输入和输出tokens转换为维的向量。

利用学习的线性变换和将解码器的输出转为预测的下一个令牌概率。

在两个嵌入层和 pre-softmax 线性变换之间共享相同的权重矩阵,不过,在嵌入层,权重会乘。

3.5 位置编码

本文的模型不包含循环和卷积,为了使模型能够利用序列的顺序,必须注入一些有关序列中标记的相对或绝对位置的信息。

为此,作者将“位置编码”(Positional Encoding)添加到编码器和解码器底部的输入嵌入。

位置编码与嵌入具有相同的维度 ,因此可以将两者相加。

位置编码有多种选择,有学习的和固定的。

在本文,作者利用不同频率的正弦和余弦函数,即,位置编码的每个维度对应于正弦曲线。

选择这个函数是由于作者假设它可以让模型轻松学习关注相对位置。

作者还考试测验利用学习的位置嵌入,但创造这两个版本产生险些相同的结果。

正弦版本还可以许可模型推断出比演习期间碰着的序列长度更长的序列长度。

4. 为什么用自把稳力

作者将自把稳力层的各个方面与循环层和卷积层进行比拟。

这三者常日用于将一个可变长度序列映射到另一个相等长度的序列,例如范例序列转导编码器、解码器中的隐蔽层。

作者选用自把稳力考虑了3个成分:

每层的总打算繁芜度。
可以并行化的打算量。
以必需的最少连续操作次数来衡量。
网络中远程依赖之间的路径长度。

个中,学习远程依赖性是序列转导任务的一个关键寻衅,影响学习难度的一个关键成分是前向和后向旗子暗记在网络中必须经由的路径的长度。
路径越短,就越随意马虎学习。

作者还比较了由不同层类型组成的网络中,任意两个输入和输出位置之间的最大路径长度。

自把稳力是O(1),循环网络是O(n)。

从打算繁芜度的角度看,当序列长度n小于表示维度d时,自把稳力层比循环神经网络层更快。

这个征象在最前辈机器翻译模型利用的句子表示中最常见。
例如单词片段、字节对。

为了提高很长序列的任务的打算性能,自把稳力可以限定为,仅考虑输入序列中以输出位置为中央的大小为r 的邻域。
这会将最大路径长度增加到 O(n/r)。
作者操持在未来的事情中进一步研究这种方法。

在单个卷积层,内核宽度k<序列长度n时不会连接所有输入和输出位置对。

如果要连接全部,就须要O(n/k)个卷积,或者O(log(n))个扩展卷积打算。
卷积层的代价常日是循环层代价的k倍。

纵然是k=n的可分离卷积,其繁芜度也即是自把稳力层和逐点前馈层的和,后者是作者采取的方案。

自把稳力可以产生更多可阐明的模型。
作者创造多把稳力头彷佛表现出与句子的句法和语义构造干系的行为。

5. 演习

5.1 演习数据和批处理

标准WMT 2014 英语-德语数据集,包含约 450 万个句子对,利用字节对编码,该编码具有约37000个标记的共享源目标词汇表。

WMT 2014 英语-法语数据集,包含3600万个句子,并将标记拆分为 32000 个单词片段词汇表 。

每个演习批次包含一组句子对,个中包含大约 25000 个源标记和 25000 个目标标记。

5.2 硬件

8张NVIDIA P100 GPU

其他略

6. 实验结果

7. 结论

作者用多头自把稳力取代编码器-解码器架构中最常用的循环层,提出第一个完备基于把稳力的序列转换模型Transformer。

对付翻译任务,Transformer的演习速率明显快于基于循环层或卷积层的架构。

作者未来还会研究局部的、受限的把稳力机制,以有效地处理图像、音频和视频等大型输入和输出。

我的总结

学习远程依赖是提高网络性能的关键,循环和卷积网络因其自身设计一定存在繁芜度瓶颈。

在本文之前,把稳力机制已经被引入网络并带来了精良的效果。

作者关注到把稳力机制的潜力,摒弃循环、卷积设计,仅用把稳力机制设计了序列转换模型Transformer。

详细的,作者改进点积把稳力、设计多头把稳力、增加位置编码等。

(完结)

论文:https://arxiv.org/pdf/1706.03762v7

github:https://github.com/tensorflow/tensor2tensor

本文的注释版本:https://nlp.seas.harvard.edu/annotated-transformer,因内容相似不再翻译。