Transformers Assemble(PART I )
写在前面
经过之前一段时间的 NLP Big Bang,现在相对比较平静了,Transformer 派已经占据了绝对的主导地位,在各类应用中表现出色。看标题大家也可以猜个差不多,整理了一系列自《Attention is all you need》之后的对 Vanilla Transformer 的改进论文,和大家一起梳理整个发展过程。这篇是第一趴,都来自ICLR。OK,来看看今天的 Transformers:
- Bi-BloSAN from UTS,ICLR2018
- Universal Transformers from UVA&Google,ICLR2019
- Reformer from Google,ICLR2020
BI-DIRECTIONAL BLOCK SELF-ATTENTION FOR FASTAND MEMORY-EFFICIENT SEQUENCE MODELING
Masked Block Self-Attention
其最主要的组件是掩码分块自注意力机制(masked block self-attention (mBloSA)),基本思想是将序列分成几个等长的block(必要时进行padding),对每个单独的block内应用self-attention(intra-block SAN)捕获局部特征,然后对所有block输出再应用self-attention(inter-block SAN)捕获全局特征。这样,每个attention只需要处理较短的序列,与传统的attention相比可以节省大量的内存。最后通过Context fusion模块将块内SAN、块间SAN与原始输入结合生成最终上下文表示。整体框架如下图所示:
Masked Self-Attention
在传统的self-attention中时序信息是很难编码进去的,通过对某些位置进行掩码可以实现位置信息的融合。
f(xi,xj)=c⋅tanh([W(1)xi+W(2)xj+b(1)]/c)+Mij1f\left(x_{i}, x_{j}\right)=c \cdot \tanh \left(\left[W^{(1)} x_{i}+W^{(2)} x_{j}+b^{(1)}\right] / c\right)+M_{i j} 1f(xi,xj)=c⋅tanh([W(1)xi+W(2)xj+b(1)]/c)+Mij1
而建模双向信息,只需要将上式最后一项修改即可得到前向和后向SAN
Mijfw={0,i<j−∞,otherwise M_{i j}^{f w}=\left\{\begin{array}{ll} {0,} & {i<j} \\ {-\infty,} & {\text { otherwise }} \end{array}\right. Mijfw={0,−∞,i<jotherwise
Mijbw={0,i>j−∞,otherwise M_{i j}^{b w}=\left\{\begin{array}{ll} {0,} & {i>j} \\ {-\infty,} & {\text { otherwise }} \end{array}\right. Mijbw={0,−∞,i>jotherwise
Bi-directional Block Self-Aattention Network
最终将上述模块整合后得到的网络框架如下图。
实验工作也非常充分,在九大公开数据集的多类NP任务中取得SOTA,同时模型的计算和内存更高效。
Reference
- Code Here
UNIVERSAL TRANSFORMERS
上一篇论文针对的是Transformer内存占用大、对长序列输入不友好的缺陷,除此之外,这篇论文指出其还存在着以下几个问题
- 丢弃了RNN的归纳偏置(Inductive Bias),而这对一些任务至关重要(EMNLP 2018的一篇文章对比了Transformer和LSTM得出该结论)。Inductive Bias也可以理解为Prior Knowledge,可以用来预测从未遇到的输入的输出,即模型泛化的能力。(refer:Inductive Bias in Recurrent Neural Networks)。
- 由于固定了Transformer的层数,使得模型计算低效。对于一个输入,有些部分是比较好理解的,有些部分是比较含糊不清的,如果采取相同的计算会导致无效计算。
- 原始Transformer是非图灵完备的。(这块没仔细看下面不会涉及)
Parallel-in-Time Recurrence Mechanism
原始的Transformer堆叠层数是固定的(6层或12层),为了结合RNN的优势,对每一个token设置了一个Transition Function(参数共享),并且可以一次一次循环迭代计算(Transformer是对attention层后直接输入一个Dense Layer)。如下图,横坐标是输入序列的token,纵坐标是循环迭代次数Depth。每一次迭代是在整个序列上进行的,不同于RNN需要从左往右依次计算,大大提高了计算效率。当迭代次数Depth人为固定时,就变成了原始Transformer。
假设输入为长度为mmm的序列,第ttt次循环后有:
Ht=LAYER NORM (At+TRANSITION (At))H^{t}=\text{LAYER NORM }\left(A^{t}+\text { TRANSITION }\left(A^{t}\right)\right)Ht=LAYER NORM(At+TRANSITION(At))At=LAYERNORM ((Ht−1+Pt)+MULTIHEADSELFATTENTION (Ht−1+Pt))A^{t}=\text { LAYERNORM }\left(\left(H^{t-1}+P^{t}\right)+\text { MULTIHEADSELFATTENTION }\left(H^{t-1}+P^{t}\right)\right)At=LAYERNORM((Ht−1+Pt)+MULTIHEADSELFATTENTION(Ht−1+Pt))其中Transition Function可以是深度可分离卷积也可以是全连接。
Coodinate Embeddings
在上面公式中有一个PPP,指的是两种embedding,(position,time):
- position embedding和原始Transformer的一样;
- timestep embedding,其实本质上和position embedding一样,只不过这里是关注于循环步数ttt,因为不同的循环次数学习的是不同层面的知识,这一信息可以提供给模型学习了几次,什么时候该停止;
Pi,2jt=sin(i/100002j/d)+sin(t/100002j/d)Pi,2j+1t=cos(i/100002j/d)+cos(t/1000002j/d)\begin{aligned} P_{i, 2 j}^{t} &=\sin \left(i / 10000^{2 j / d}\right)+\sin \left(t / 10000^{2 j / d}\right) \\ P_{i, 2 j+1}^{t} &=\cos \left(i / 10000^{2 j / d}\right)+\cos \left(t / 100000^{2 j / d}\right) \end{aligned} Pi,2jtPi,2j+1t=sin(i/100002j/d)+sin(t/100002j/d)=cos(i/100002j/d)+cos(t/1000002j/d)
Dynamic Halting
正如前面所说的,输入中的某些部分需要更多次的计算模型才可以理解。例如最常见的I went to the bank to deposit money
里bank
一词就需要更多次的运算。在UT中引入了Adaptive Computation Time (ACT)来实现,ACT可以基于模型在每步循环中预测的标量halting probability,动态调制处理每个输入token所需的计算步骤数(即响应时间ponder time)。UT将动态ACT暂停机制分别应用于每个位置, 一旦特定的循环块停止,它将其状态复制到下一个步骤,直到所有块都停止,或者直到达到最大步数为止, 编码器的最终输出是以此方式产生的最后一层表示。Dynamic Halting策略流程可以概括为:
- 在第ttt步循环时,有第ttt步的halting probability、第t−1t-1t−1步的token state以及提前设置的超参停止阈值;
- 利用UT计算当前token state;
- 利用全连接层和sigmoid激活函数计算ponder time,ponder time表示模型对每个token还需要多少次运算的预测;
- 判断每个token当前是否需要停止,规则为:
当(halting probability + pondering) > halt threshold
时,停止;
当(halting probability + pondering) ≤ halt threshold
时,继续运算; - 对于那些仍然在运算的token,更新停止概率:
halting probability += pondering
; - 当所有位置都停止或者模型达到循环最大步数时,结束。
整体流程如下面动图所示。
Reference
- Code Here
- Moving Beyond Translation with the Universal Transformer
REFORMER: THE EFFICIENT TRANSFORMER
-
Transformers Assemble(PART I )相关推荐
- Transformers Assemble(PART IV)
上一篇Transformers Assemble(PART III)重点在transformer位置信息的改进,这一集挑选了几篇都带有「Sparse」的标签,主要关注点在于transformer结构的 ...
- Transformers Assemble(PART V)
最近我发现CSDN上抄袭我的文章的那些阅读量居然比我原创的还要高,气死- Set Transformer from OX,ICML2019 Star-Transformer from FDU,NAAC ...
- Transformers Assemble(PART II)
继Transformer系列上一篇,PART II整理了三篇来自Facebook AI Research的论文,都比较好读: Span Transformer from FAIR,ACL2019 Al ...
- 【Deep Learning】Transformers Assemble(PART I)
写在前面 经过之前一段时间的 NLP Big Bang,现在相对比较平静了,Transformer 派已经占据了绝对的主导地位,在各类应用中表现出色.看标题大家也可以猜个差不多,整理了一系列自< ...
- Transformer Assemble(PART III)
这一期魔改Transformers主要关注对原始模型中位置信息的讨论与优化, Self-Attention with RPR from Google,NAACL2018 Self-Attention ...
- Assemble(王爽)——nasm 和 masm的一些简单区分
最近在学习汇编语言,王爽的那本书.他用的汇编编译器是masm:而用选择的nasm:所以最近用了下,对两者区别有点体会,记录下. 首先,why nasm?我选择nasm,最重要的一个原因是它开源:我现在 ...
- 万字长文带你一览ICLR2020最新Transformers进展(下)
原文链接:http://gsarti.com/post/iclr2020-transformers/ 作者:Gabriele Sarti 编译:朴素人工智能 3. Embeddings 原始的Tran ...
- 万字长文带你一览ICLR2020最新Transformers进展(上)
原文链接:http://gsarti.com/post/iclr2020-transformers/ 作者:Gabriele Sarti 编译:朴素人工智能 Transformer体系结构最初是在At ...
- 论文阅读-Combining EfficientNet and Vision Transformers for Video Deepfake Detection(深度鉴伪)
一.论文信息 论文名称:Combining EfficientNet and Vision Transformers for Video Deepfake Detection 论文代码:https:/ ...
最新文章
- 在形态的世界里寻找基数的影子
- exe的dll加载过程
- Android自定义progressBar
- .NET Core 3.0 构建和部署
- c# asp.net mvc 开发的正方教务助手(二)
- linux 脚本 语法错误,从windows拷贝到linux的脚本报错:未找到命令 or 语法错误
- 开红数显示服务器为空,网维大师常见问题:图标空白或红号问号
- Web Api 中使用 PCM TO WAV 的语音操作
- 利用SqlBuikCopy实现数据批量写入
- 如何在 macOS 中将用户帐户拆分为两个单独的帐户?
- 清空数据库里面所有表的数据的语句
- Python爬虫自学系列(四)
- 智行买机票如何在线选座
- 全国青少年编程等级考试python一级真题2021年3月(含题库答题软件账号)
- 计算机专业-世界大学学术排名,QS排名,U.S.NEWS排名
- 大物设计性实验:电容、电感量的测量
- Markdown学习+Typora快捷键
- 左旋肉碱溶液铁离子去除办法
- spring 定时器时间配置
- ABAP BAPI_PO_CREATE1 净价net_price 无效
热门文章
- SAP License:SAP精细化的应收付及要素为根设计思想
- Axure 经典实例高保真原型下载(Axure高保真企业办公oa系统OA协同办公后台管理会议管理用户管理统计分析活动管理+考勤管理+档案管理+行政支持管理)
- Key/Value之王Memcached初探:一、掀起Memcached的盖头来
- SCUT - 48 - 飞行员的配对方案 - 费用流
- springboot中配置过滤器以及可能出现的问题
- 【学习总结】数学-基本计数方法
- Linked List Sorting (链表)
- php手工注入拿webshell
- Varnish由于cookie过大返回503
- VS 2008的JavaScript代码提示功能 (学习老赵视频的笔记)
- Transformers Assemble(PART IV)