作者信息:
华校专,曾任阿里巴巴资深算法工程师、智易科技首席算法研究员,现任腾讯高级研究员,《Python 大战机器学习》的作者。
编者按:
算法工程师必备系列更新啦!继上次推出了算法工程师必备的数学基础后,小编继续整理了必要的机器学习知识,全部以干货的内容呈现,哪里不会学哪里,老板再也不用担心你的基础问题!
1.2 Transformer vs CNN vs RNN假设输入序列长度为 n,每个元素的维度为 :
。输出序列长度也为 n ,每个元素的维度也是 d : 。可以从每层的计算复杂度、并行的操作数量、学习距离长度三个方面比较 Transformer
、CNN
、RNN
三个特征提取器。
考虑到 n
个 key
和 n
个 query
两两点乘,因此self-attention
每层计算复杂度为 O(n^2\times d)
考虑到矩阵(维度为 nxn
) 和输入向量相乘,因此RNN
每层计算复杂度为
对于 k 个卷积核经过 n
次一维卷积,因此 CNN
每层计算复杂度为
。如果考虑深度可分离卷积,则计算复杂度下降为 。
因此:当 时,self attention
要比 RNN
和 CNN
快,这也是大多数常见满足的条件。
当 时,可以使用受限 self attention
,即:计算 attention
时仅考虑每个输出位置附近窗口的 r 个输入。这带来两个效果:
最长学习距离降低为 r,因此需要执行 次才能覆盖到所有输入。
对于 self-attention,CNN
,其串行操作数量为 ,并行度最大。
对于self-attention
,最长计算路径为 O(1);对于 self-attention stricted
,最长计算路径为
。
对于常规卷积,则需要 个卷积才能覆盖所有的输入;对于空洞卷积,则需要
才能覆盖所有的输入。
作为额外收益,self-attention
可以产生可解释性的模型:通过检查模型中的注意力分布,可以展示与句子语法和语义结构相关的信息。
1.3 实验结果WMT 2014 English - German
数据集:包含 450万句子对,每个句子通过 byte-pair encoding:BPE
编码。
BPE
编码首先将所有文本转换为 Unicode bytes
,然后将其中出现次数较高的、连续的一组bytes
用一个 token
替代。
源句和翻译句共享词汇表,包含 37000个 token
。
WMT 2014 English-French
数据集:包含 3600万句子对,每个句子通过 BPE
编码。源句和翻译句共享词汇表,包含 32000个 token
。
训练在 8 NVIDIA P100 GPU
上,相近大小的 句子对
放到一个batch
里,每个训练 batch
包含大约 25000个源 token
和 25000个 翻译 token
。
训练在基础版本上执行 10 万步约12个小时,在大型版本上(更大的参数)执行 30 万步约 3.5 天。
residual dropout
:在每个子层添加到 ADD & LN
之前执行 dropout
, 。
embedding dropout
:在 encoder
和 decoder
添加position embedding
之后,立即执行 dropout
,
。
label smoothing
::训练期间使用 的label smoothing
。虽然这会降低模型的困惑度,因为模型学到了更大的不确定性,但是这会提高 BLEU
。
在 WMT 2014 English-German/ WMT 2014 English-French
翻译任务上,各种模型的效果如下图:
超参数选择:使用beam size = 4
、长度惩罚因子
的 beam search
,超参数在验证集上选择。
训练代价 FLOPs
:通过训练时间、训练 GPU
个数、每个 GPU
的单精度浮点计算能力三者相乘得到估计值。
对于 base model
,采用单个模型的最后 5 个 checkpoint
的平均(10分钟生成一个 checkpoint
)。对于 big model
,采用单个模型的最后 20个 checkpoint
的平均。
为了评估不同参数的影响,论文在 English-German
翻译任务中采用不同的模型,评估结果是 newstest2013
验证集上得到。
beam search
参数同前,但是并没有采用checkpoint
平均的策略。
PPL
困惑度是在 word-piece
上得到的。考虑到 BPE
编码,这和 word
级别的困惑度有所出入。
(A)
展示了不同 attention head
和 attention key/value dimension
的影响。为了保持模型参数不变,二者需要满足一定条件。结果表明:单头的效果要比多头模型差,但是头数太多也会导致效果下降。
(B)
展示了不同的 attention key
的影响。结果表明:降低 会带来性能下降。因为降低 d_k 会降低模型的 attention
矩阵 的容量,从而降低模型的整体表达能力。
(C)
展示了不同大小模型的影响。结果表明:模型越大,性能越好。
(D)
展示了 dropout
和 label smoothing
的影响。结果表明:dropout
和 label smoothing
有助于帮助缓解过拟合。
(E)
展示了通过学习 position embedding
(而不是固定的 position embedding
)的影响。结果表明:这两种 position embedding
策略的效果几乎相同。
2.1 结构
Universal Transformer
总体计算流程如下图所示:
和 Transformer
相同,它使用自注意力机制来组合来自不同位置的信息。 和 Transformer
不同,它在所有的时间步的所有位置上应用一个转换函数Transition Function
。 和 Transformer
不同,它的时间步不再是固定的,而是一个循环。循环的停止条件由动态停止dynamic halting
技术决定,并且每个位置的停止时间可以不同。图中:箭头表示计算的依赖关系, 表示第 t 个时间步各位置的向量表达。其中
由输入 token
的 embedding
来初始化。 Universal Transformer
基于 BERT
结构进化而来。
Universal Transformer
对 encoder
和 decoder
的每个 token
的表达都应用了循环操作,但是这种循环不是基于 token
的序列位置(横向),而是基于 token
的处理深度(纵向)。
因此 Universal Transformer
的计算限制不受序列长度的影响,而受网络深度的影响。
因此 Universal Transformer
具有可变深度,这与Transformer
、RNN
等具有固定深度的模型完全不同。
在每个时间步,对每个 token
的表达并行的执行以下操作:
通过 self-attention
机制来交换序列中所有 token
的信息。
在所有时间步的所有位置上应用同一个转换函数Transition Function
。有两种转换函数:全连接、深度可分离卷积。
与 Transformer
相同,Universal Transformer
也会引入残差连接、层归一化Layer Normalization
、Dropout
。
整体步骤(其中 LN
为 Layer Normalize
,Trans
为 Transition Function
:
计算Transition Function
:
。
然后在时刻 t ,根据 self attention
机制和 Transition Function
来并行计算 。
首先根据每个 token
的 d 维 embedding
,得到一个初始输入矩阵 : 与 Transformer
相同,Universal Transformer
的解码器也采用的是 masked self-attention
机制。
与 Transformer
不同,Universal Transformer
的解码器对编码器 步的输出 计算注意力,其中 query
来自解码器、key,value
来自编码器。
设解码器在 步的输出为
,则输出 token
为 y_j 的概率为:
Universal Transformer
的训练采用 teacher-forcing
策略。
训练阶段:解码器的输入来自目标序列。由于采用 masked
机制,因此每次迭代时序列右边界右移一个位置,表示下一个预测目标。
首先由编码器重复执行多次,得到输入序列的编码 ;然后解码器重复执行多次,解码器每次执行会生成下一个 token
。
2.2 ACT在文本处理任务中,文本中的某些单词相比较于文本中的其它单词可能更难以理解。对于这些难以理解的单词,可能需要执行更多的处理步骤。
Adaptive Computation Time(ACT)
技术就是通过为每个 token
计算个性化的迭代时间步来解决这个问题。
在 Universal Transformer
中,ACT
在每个循环为每个 token
计算一个停止概率。
一旦该 token
应该停止计算,则该 token
的状态直接向后传递,直到所有的 token
都停止计算,或者达到一个最大的迭代步阈值。
2.3 实验结果BABI Question-Answering
数据集:包含20种不同的任务,每个任务都是根据一段文本来回答问题。该数据集的目标是:通过对每个故事中的事实 fact
进行某种类型的推理,从而衡量语言理解能力。实验结果如下所示,其中:
(12/20)
表示 20个任务中,失败任务(测试集错误率超过 5%)的数量。train single
表示针对每个任务训练一个模型;train joint
表示对所有任务共同训练一个模型。所有的模型都采用 10 轮不同初始化,并根据验证集选择最佳初始化对应的模型来输出。
注意力分布开始时非常均匀。但是随后的步骤中,围绕每个答案所需的正确事实fact
,注意力分布逐渐变得更加清晰。
通过动态暂停 ACT
技术观察到:对于需要三个事实 fact
支持的问题,其平均思考时间高于只有两个事实 fact
支持的问题;对于需要两个事实 fact
支持的问题,其平均思考时间又高于只有一个事实 fact
支持的问题。
平均思考时间:用一组测试样本每个 token
的平均迭代时间步来衡量。
对于三个/两个/一个事实支持的问题,其平均思考时间分别为:、
、 。
这表明:模型根据问题所需的支持事实 fact
的数量来调整迭代时间步。
通过动态暂停 ACT
技术观察到:对于需要一个事实 fact
支持的问题,其不同位置的思考时间更为均匀。对于需要两个/三个事实 fact
支持的问题,其不同位置的思考时间差距较大。尤其在三个事实支持的问题中,很多位置只迭代一到两步就停止,只有少数位置迭代更多步。这意味着:大多数位置与任务无关。下图为某个三事实支持的问题对应的 token
迭代时间步的分布。
针对 BABI
任务的可视化分析表明:Universal Transformer
类似动态记忆网络dynamic memory network
,它具有一个迭代注意力的过程。Universal Transformer
模型根据前一个迭代的结果(也称作记忆)来调节其注意力分布。下图为注意力权重在不同时间步上的可视化,左侧不同的颜色条表示不同 head
的注意力权重(一共4个头)。
三、Transformer XLTransformer
解决的核心问题是:如何将任意长度的文本序列编码成一个固定维度的隐向量。
假设有无限的内存和算力,一个简单的方法是:取语料库中最长序列的长度,然后把所有较短的序列填充到最大长度作为输入。但是由于内存和算力的限制,这种方式不现实。
一个可行的方案是:将整个语料库分割成固定大小的、较短的片段segment
,然后用每个片段来训练模型,而忽略之前所有片段的信息。这种模型称作 vanilla model
,这也是 Transformer
的做法。
vanilla model
没有任何跨 segment
的信息流,这会带来两个问题:
模型能够捕获的最大依赖的长度不超过 segment
的大小。假设 segment
的长度为 n ,则模型无法捕获长度超过 n 的依赖性。
划分 segment
的时候未考虑句子边界或者短语的边界,这破坏了语义完整性。因此模型缺乏必要的上下文信息来预测 segment
的开头的前几个 token
和结束的尾部几个 token
。这会导致低效的优化效率和更差的泛化能力。这个问题称作上下文碎片化 context fragmentation
问题。
vanilla model
不仅在训练期间遇到问题,在推断期间也会遇到问题。Transformer
在推断期间反复执行推断过程,每次推断都根据前几轮输入结果和输入来预测下一个输出结果。
推断期间,模型也采取与训练期相同的segment
大小,因此也会遇到上下文碎片化问题。 每个新的 segment
的计算需要从头开始重新计算,计算速度较慢。 Transformer XL
通过引入递归机制和相对位置编码来解决上述问题。
能够学到的最长依赖性的长度:Transformer XL
比 RNN
长 80%,比Transformer
长 450%。 推断速度:Transformer XL
比 Transformer
快 1800 多倍。 3.1 Segment-level 递归为解决固定长度上下文的局限性,Transformer XL
引入了 Segment-level
递归机制。
训练期间:Transformer XL
缓存前一个 segment
计算得到的隐状态序列,然后在下一个 segment
中重用。这种额外的输入使得网络能够利用历史中的有效信息,从而能够对长期依赖建模,并且避免了上下文碎片化。
在对语料库进行分割来生成样本之后, Transformer XL
要求对样本不能进行混洗。因为一旦混洗就会破坏 segment
的先后顺序。
由于需要考虑 segment
之间的先后关系,因此训练期间要将连续的一组 segment
分别放置在连续的一组 batchment
中。这样可以在尽可能满足 segment
先后关系的条件下提高数据并行度。
推断期间:Transformer XL
缓存前一个 segment
计算得到的隐状态序列,使得后续需要用到这些隐状态时直接使用而不必重新计算,加快了推断速度。实验表明,Transformer XL
的推断速度是传统 Transformer
的 1800 倍。
拼接 的第 l-1 层的隐向量序列 和 的第 l-1 层的隐向量序列: 与标准 Transformer
不同,这里计算 key
向量和 value
向量时使用了扩展上下文,其中 缓存了前一个 segment
的状态。
这种在前后两个 segment
之间共享状态的方式构成了 segment-level
的递归,因此上下文信息可以跨 segment
流动。
是在
中被使用的,这不仅跨了一个段,也垮了一层。这显著的区别于其它的 RNN
语言模型。
正因为如此, Transformer XL
最大依赖长度扩展到了 。
下图中,每个位置的 context
都是它左下方的4个位置。
5.Transformer XL
的训练方式类似于 BPTT
,但是与 BPTT
不同的是:Transformer XL
缓存了上一个 segment
的多组隐向量。
理论上不仅可以缓存前一个 segment
,也可以缓存前面 m 个 segment
。
3.3 实验结果Transformer XL
验证了 word-level
语言模型(以困惑度 PPL
为指标),以及 char-level
语言模型(以 bpc:Bit per Character
为指标) 。其中包含以下数据集:
WikiText-103
数据集:最大的word-level
语言模型 benchmark
,包含 2.8万篇文章总计103M 训练 token
,平均每篇文章 3.6K token 。
由于文章的平均 token
数量较大,因此这会考验模型的长期依赖建模能力。
训练期间 attention length = 384
,推断期间 attention length = 1600
。
attention length
也等于 segment
长度
enwik8
数据集:包含 100M 字节的未经处理的 wiki
文本。结果表明:12层的 Transformer XL
的表现超过了 12层的 Transformer
。
text8
数据集:包含 100M 字节的、经过处理的 wiki
文本。处理方式为:大写字母改小写、移除 a~z
之外的所有字符。
One Billion Word
数据集:数据集的句子已经被混洗过,因此该数据集无法验证序列的长期依赖。因而该数据集用于测试模型的短期依赖。结果表明:Transformer XL
对短期依赖的建模效果也非常好。
Penn Treebank
数据集:包含 1M token
,用于验证模型在小数据集上的表现。结果表明:transformer XL
在小数据集上效果也非常好。
在 WikiText-103
数据集上验证 segment-level
递归、相对位置编码的作用,验证结果如下。其中:
结果划分为三个部分,分别为 128M
参数的 Transformer-XL
、 128M
参数的 Transformer
、 151M
参数的 Transformer-XL
。
PPL init
表示推断期间使用与训练时相同的 attention length
PPL best
表示推断期间使用最佳长度的attention length
(通过超参数搜索得到)
Attn Len
给出了推断期间使用的最佳attention length
Full Loss/ Half Loss
表示计算当前 segment
中所有位置的损失,还是计算后一半位置的损失
结果表明:相对位置编码非常重要对于 Transformer XL
非常重要,而绝对位置编码只有在 Half Loss
中工作良好。因为 Half Loss
只考虑当前 segment
后一半位置的损失,因此受到前一个 segment
的绝对位置编码的影响比较小。
随着 attention length
的增加,模型的困惑度下降。
尽管每个 segment
训练期间的长度是 128,但推断期间可以推广到 640 。
此外,由于 Transformer XL
采取了缓存前一个 segment
的状态的策略,因此会消耗更多的内存。下图给出在相同 GPU
内存的约束条件下的比较结果。
结果表明:即使 Transformer XL
由于内存约束而不得不使用一个较小的 backprop len
,其最终效果仍然超越 Transformer
。
为了证明 Transformer XL
能够解决上下文碎片问题,作者在 One Billion Word
数据集上做了实验。
因为该数据集的句子经过混洗,导致不需要对长期依赖建模。因此效果的提升一定是由于模型能够解决上下文碎片,而不是由于模型捕捉到更长的上下文。
文 章 须 知
文 章 作 者 : 华 校 专
责 任 编 辑 : 周 岩 L o g i c 破 茧
审 核 编 辑 : 阿 春
微 信 编 辑 : 破 茧
本 文 由 『 运 筹 O R 帷 幄 』 原 创 发 布
原 文 链 接 : http://www.huaxiaozhuan.com/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/chapters/7_Transformer.html
机器学习交流qq群955171419,加入微信群请
扫码