transformer算法详解
⼀、背景
NLP作为AI的⼦领域,⼀直以来被认为⽐较难的学科。特征抽取⼀直以来都作为NLP的核⼼任务。概况来说在深度学习为基础的体系中,特征抽取经历了以下⼏个阶段:DNN->CNN->RNN->Transformer。⾃从2017年6⽉份《Attention is all you need》论⽂作为机器翻译算法提出后,transform已经逐步替代了以CNN和RNN为⾸的特征抽取,特别是2018年bert⼀战成名后,⽬前所有的主流⽅法⼏乎都是transformer系的变体。
⼆、架构
1.和⼤多数seq2seq模型⼀样,transformer的结构也是由encoder和decoder组成。
2.我们可以将transformer看做⿊盒,例如将 I love you ->⿊盒->我爱你。
3.在张量层⾯的⿊盒理解,⽐如batch为N,每句话word个数为L,每个word的的embedding长度为D,字典中单词个数为V。
(N1,L1,D1)∗(V,D)T
(N,L,D)->transformer-> (N1,L1,D1)。然后⽤得到(N1,L1,V),最后通过softmax((N1,L1,V))得到在最后⼀维度V中,概率最⼤的字。
三、架构的理解
transformer可以分为两个模块Encode模块和Decode模块。Encode模块可以分为两个⼦模块,Decode模块可以分为三个⼦模块,其中第⼆和第三个和Encode的两个⼦模块相同。
1.Encode模块 *N
每个模型前⾯要加上 Input Embedding + Postional Embedding
(1)Multi-Head Attention:多头注意⼒机制
add & norm
(2)Feed Forward:前馈⽹络
add & norm
2.Decode模块 *N
每个模型前⾯要加上 Input Embedding + Postional Embedding
(1) Masked Multi-Head Attention:遮蔽多头注意⼒机制
add & norm
(2)Multi-Head Attention:多头注意⼒机制
add & norm
(3)Feed Forward:前馈⽹络
add & norm
四、Encode层
1. Input Embedding
根据输⼊input ,初始化词典的每个字的Embedding,可以按照正态分布或者其他的⽅式
2. Postional Embedding
位置信息可以⽤两种⽅式来定义:
1.归纳偏置和⼀些经验得出的函数
2.向Bert⼀样学习得到
公式:pos + k 位置的encoding可以通过pos位置的encoding线性表⽰。它们的关系可以通过三⾓函数公式体现:
位置为 pos + k 的positional encoding 可以表⽰如下:
化简如下:
3. Multi-Head Attention 这是创新的重点:
我们对这个式⼦做直观上的解释:
1.⾸先,Q、K、V都是(N,L,D)的张量,对于第第⼀维N主要是做并⾏计算的,我们暂且去掉,那么Q、K、V都是(L,D)的矩阵了。
2.那么的矩阵了,这样每个字就能看到其他字的意思了,就能知道这个字所在的前后语境了。
3.其中因⼦起到调节作⽤,使得内积不⾄于太⼤(太⼤的话softmax后就⾮0即1了,不够“soft”了)
4.通过softmax做归⼀化,权重调节,让当前词语知道前后此所占的权重,然后乘V
4. add & norm
1.add:这个是每个⼦模块都有的操作,意思是每个环节的特征变换之后都加上这个环节变换之前的值,⽬的是防⽌模型跑偏。
2.layer Normalization
transform中文翻译对特征做标准化:减去均值/标准差
5. Feed Forward
加个前馈神经⽹络
三、Decode 层
和Encoder相同的模型不在讲解了,直讲解不同 的模块
1、Output Embedding
注意,output输⼊的内容,输⼊的内容包含了两层含义:
1.输⼊label
2.输⼊特征
这⾥要注意,输⼊的output前⾯会加⼊标志位。标志位只占⼀个字符
输⼊label容易理解,输⼊特征不好理解。我们以英⽂翻译为中⽂为例。
则input 输⼊为: I love you.
output输⼊为: 我 爱 你
2、Masked Multi-Head Attention
为什么要加⼊标志位呢?我们在做翻译任务的时候,都是⼀句话东第⼀个字开始翻译,逐渐到最后⼀个字。在翻译第⼀个字我的时候是根据标志位的输⼊开始的。
注意:
我们在做翻译任务的时候,并不是完全根据英⽂直接翻译成中⽂的。⽽是根据整个英⽂+已经翻译出来的中⽂来预测下⼀个要翻译的中⽂。
例如:
预测 “我”是根据: “I love you ” + "<s>"  预测 “我”
预测 “爱”是根据: “I love you ” + "<s>我"  预测 “爱”
预测 “你”是根据: “I love you ” + "<s>我爱"  预测 “你”
QK =T (L ,L )q k √d k <s ><s ><s ><s >
结论:所以说我们预测中⽂的输⼊output也会输⼊特征。
原理:
如何实现这种⽅式呢,就通过 Masked Multi-Head Attention。
其实原理和Multi-Head Attention⼀样,只不过把要预测的部分masked掉。如何masked
这个⼦模块的输⼊依然是Q、K、V,计算到:那么
的矩阵的时候如下:⾏:Q
列:V 我们的⽬标是让当前的字,不能看到后⾯的字的意思,所有要把后⾯的字masked掉。形成⼀个下三⾓矩阵。
这样在之后形成⼀个下三⾓矩阵,那么整个Attention就⽆法获取到后⾯的信息了。QK =T (L ,L )q k QK =T (L ,L )q k

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。