Transformers Assemble(PART IV)
写在前面
上一篇重点在transformer位置信息的改进,这一集挑选了几篇都带有「Sparse」的标签,主要关注点在于transformer结构的复杂度问题。先来看看都有哪些:
- 「Sparse Transformer from OpenAI,NAACL 2019」
- 「Adaptively Sparse Transformers,EMNLP2019」
- 「Explcit Sparse Transformer from PKU」
Generating Long Sequences with Sparse Transformers[1]
来自 OpenAI 的工作,关注于原始 Transformer 的计算复杂度问题,尤其是在面对长序列输入的情况。为此,论文中将 full attention 进行分解,通过多个 sparse attention 来代替,在不牺牲性能的情况下降低复杂度至
。
下图是三种不同的注意力形式,其中上半部分表示一个 6x6 图像的像素之间相互 attend,下半部分表示对应的 connectivity matrix。
- (a)原始 Transformer 的 full attention;
- (b)「Strided Attention」:这种方式主要应用于图像或者音频,每一个位置通过 attend 其对应的行和列来获取信息,两个 head 的具体表示为:第一个 head 用于 attend 该位置前面的
个位置,第二个 head 用于 attend 间隔
的位置(如果输入是图像
为图像的宽,则 attend 对应的列):
- (c)「Fixed Attention」:这种方式主要应用于像
文本
之类没有周期性的数据,首先将文本分成固定长度的块,然后第一个 head 处理该块中该位置之前的所有元素,第二个 head 处理每个块的最后一部分的固定大小的部分。
Other Tricks
上面就是 Attention 主要的改进,文中还涉及了一些其他的 tricks。
- 「pre-activation residual block」来自Identity mappings in deep residual networks[2]可以使 Transformer 的训练更加容易
其中 resblock(H)的计算如下
- 「Gradient check-pointing」
- 「Efficient block-sparse attention kernels」
- 「Mixed-precision training」
reference
- Code Here[3]
- openai sparse-transformer blog[4]
Adaptively Sparse Transformers[5]
这篇论文也是对 vanilla Transformer 的改进,提出了 Adaptively Sparse Transformers (AST),优化的两个关键就在其名字中:
- 「Sparse:」 通过替换 Softmax 函数为
达到稀疏注意力;
- 「Adaptively:」 每个 attention head 都是模型可自动学习的;
作者指出与先前的sparse transformer
(下图sparse transformer就是上一篇论文,adaptive span transformer在本系列第二篇中介绍过)研究不同的是,他们的这一方法可以关注在不连续的输入集合,如下图:
2.1 Sparse Attention
softmax 函数所有结果都不为 0,并且最终所有元素之和为 1,这样的特性决定了相对重要的部分的权值会“缩水”。这一方向的研究很多,作者选用了最近提出的alpha-entmax[6]:
2.2 AST
对于 Transformer 类模型的功能至关重要的是,不同的 head 会捕获不同的语言现象,这让我们想到对于不同的 head,使用不同的
值,使其自适应地让一些 head 稀疏化,一些 head 更接近 softmax。利用上面的
替换原始的 softmax 函数后,将
看成是与其他网络参数一样的可学习参数,通过随机梯度进行优化。但是通过梯度方法对其自动优化并不容易,然后作者在下面就开始一系列数学推导。。。
2.3 TODO
实在是看不动了。。。 后面的实验和分析也非常有意思的。。。 大家记得看,我先溜了。。。 PS. 在油管上发现了作者的分享视频,放在 reference 里
2.4 Reference
- Code Here[7]
- 作者分享视频[8]
Explicit Sparse Transformer: Concentrated Attention Through Explicit Selection[9]
Motivation和上一篇论文一样,如下图,对于文本I thanked him with all my heart, and I asked him, 'why are you helping me?'
,vanilla Transformer(蓝色标记)会对所有元素都有注意,而噪音的注意力会对效果产生影响;新提出的显式稀疏注意力机制(橙色标记)只会关注文本的
个attention score最大的元素,从而移除无关信息。
具体实现也非常简单易于实现,且不会增加额外的内存和计算开销。
- 沿用vanilla transformer的attention计算公式得到attention score,
- 假定分值越大的元素其相关性越大,计算Masking矩阵。找出
中每行的
个最大元素,记录其位置,并得到一个threshold vector,
- 将Making矩阵应用到原始
矩阵上,
该步反向传播时
- 归一化,
该步反向传播时,
- 输出表示,
整体流程如下最右图所示,
另外,参数
的选择至关重要,当
取与序列长度一致时即为vanilla transformer。作者在NMT实验中发现当
时效果最好。
reference
- Code Here[10]
- Open Review[11]
本集Over~明天要视频毕业答辩就不更了,希望老师轻点怼...轻点...
本文参考资料
[1]
Generating Long Sequences with Sparse Transformers: https://arxiv.org/abs/1904.10509
[2]
Identity mappings in deep residual networks: https://arxiv.org/abs/1603.05027
[3]
Code Here: https://github.com/openai/sparse_attention
[4]
openai sparse-transformer blog: https://openai.com/blog/sparse-transformer/
[5]
Adaptively Sparse Transformers: https://www.aclweb.org/anthology/D19-1223.pdf
[6]
alpha-entmax: http://xxx.itp.ac.cn/pdf/1905.05702v2
[7]
Code Here: https://github.com/deep-spin/entmax
[8]
作者分享视频: https://www.youtube.com/watch?v=HLmPDJh8Fls
[9]
Explicit Sparse Transformer: Concentrated Attention Through Explicit Selection: https://arxiv.org/abs/1912.11637
[10]
Code Here: https://github.com/lancopku/Explicit-Sparse-Transformer
[11]
Open Review: https://openreview.net/forum?id=Hye87grYDH¬eId=rkezjkjniS
- END -
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法