2020李宏毅学习笔记——18.Transformer:变形金刚

它的主要应用是BERT,BERT就是unsupervisored transformer。
transformer是什么?
transformer实际上是Seq2seq model with “Self-attention”

1.Sequence to Sequence

1.1 首先看一下RNN和CNN的局限
RNN

  • 输入是一串vector sequence
    输出是另外一串vector sequence
    单向的RN;N,只有输出到最后的b4才会把a1到a4全看过
    双向RNN:输出的每一个b1到b4就会把a1到a3全看一遍

RNN存在的问题是不容易被平行化:
比如要想输出b4 得经过a1-a2-a3-a4,不能并行

解决方法:用CNN代替RNN:CNN的好处是可以平行化,每一个同颜色的filter可以同时计算。
input是一个sequence a1-a4
每一个三角形都代表filter,输入是sequence中一小段,输出一个数值。若有一堆filter,输入是一个sequence,输出是另外的sequence。
但是CNN也有缺点,只有叠很多层才能识别很长的序列。所以用.Self-Attention代替
它也是一个层,并且可以并行计划b1 b2 b3 b$

2.Self-Attention:就是替代之前的RNN layer

2.1:概念:
输入和输出都是sequence,跟Bi-RNN有同样的能力,就是可以并行计算的RNN

2.2 :生成过程

  • input sequence是x1-x4,
  • 每一个input通过embedding乘上一个矩阵,变成a1-a4
  • 丢进self-attention layer :每个input分别乘上3个不同的transformation产生三个vector
    q 代表query去和其他人做匹配,k代表key被匹配的,v代表value被抽取出来的信息。
  • 拿每个q去对k做attention,attention有各式各样的算法,本质是哪两个向量换一个数 ,一般做self-attention layer的时候都套用原始paper的做法,不会做太多变动。

例如,拿q1对K1到k4做attention得到a11到a44,在self-attention layer里面attention算法用的是 scaled dot-product attention,d是q和K的维度,
直观解释公式中除以 d的原因是,q和k做dot product的数值会随着维度的增加而增大,用除以 d 用来平衡。
2020李宏毅学习笔记——18.Transformer:变形金刚_第1张图片

  • soft-max,把a11到a4通过softmax得到新的变形
  • 用上一步的变形分别乘以Vi然后求和得到b1 可同时算b2,,,
    2020李宏毅学习笔记——18.Transformer:变形金刚_第2张图片

3.并行过程

  • 把q、k、v、a分别并起来,变成QKVI
    2020李宏毅学习笔记——18.Transformer:变形金刚_第3张图片
  • 把k并起来然后转置,计算α,依次类推:
    2020李宏毅学习笔记——18.Transformer:变形金刚_第4张图片
  • 第三步,把A中每一列做softmax得到Aˆ
  • 第四步,把Aˆ 每一列分别和V点乘得到O

4.总结:

整个过程就是输入序列I,输出序列O
可以看到从输入到输出是一堆矩阵乘法。GPU可以很容易加速

5.Positional Encoding

由来:从self attention的机制来看,它的思想是天涯若比邻,也就是说这个机制是不在乎单词之间的距离的,距离远和近都可以获得的attention。这个其实相当于没有单词的顺序信息,不好。因此加入位置信息是很必要的。

位置是ei,手动设置的,不是学习的。代表位置的资讯
以上讲的是self-attention可以拿来取代RNN,接下来看self-attention在一个seq2seq的model里面是怎么被使用的。

二:在一个seq2seq的model里如何使用self-attention

  • 一般的seq2seq model包含两个RNN,分别是encoder和decoder,总之,看到RNN用self-attention替换掉。
  • 以把中文翻译成英文为例,encoder的输入是中文的character sequence比如说是机器学习,在decoder 给他一个begin of sequence的token就输出一个machine,在下一个timestep把machine当作输入,就输出learning,直到输出句点的时候翻译过程结束
  • 先看左半部的encoder,input通过input embedding layer变成一个vector,然后vector加上positonal encoding,接下来进入灰色的block,这个block重复N次。
  • 在灰色的block里面,第一层是multi-head attention,也就是说input一个sequence,通过multi-head attention layer 得到另外一个sequence。
  • 下一个layer是add & norm,在这一步,把multi-head attention 的 output 跟 multi-head attention 的 input 相加,得到b‘,然后做layer normalization。
  • 接下来feed forward layer 会把input sequence 的每一个vector进行处理,还有另外一个add & norm 的layer。
  • 接下来是右半部decoder的部分,这个decoder的input 是前一个time step 产生的output,通过output embedding 加上positional information,进入灰色的block,这个block重复N次。
  • 这个灰色block的第一层叫masked multi-head attention。加masked的意思是说,现在做self-attention的时候,decoder会attend 到已经产生出来的 sequence,因为还没有产生出来的无法做attention。
  • add & norm layer
  • 接下来是multi-head attention layer,这个是attend 到之前encoder的输出。
  • 接下来还有add & norm layer, feed forward layer,add & norm layer
    10.最后做linear,softmax得到最终的output

transformer原始paper的attention visualization

attention的weight越大,线条越粗,attention的weight越小,线条越细,图上两两word之间都会有attention。
在上面右图中,最后一个词是tired的时候,it是attend到animal的,如果把tired换成wide,it此时attend到street。

transformer的应用

基本上原来可以做seq2seq的,都可以换成transformer。

  1. 做summarization
    训练一个summarizer,input是一堆文章,output是一篇具有维基百科风格的文章。如果没有transformer,没有self-attention,很难用RNN产生 10310^310
    3
    长的sequence,而有了transformer以后就可以实现。

  2. Universal transformer
    简单的概念是说,本来transformer每一层都是不一样,现在在深度上做RNN,每一层都是一样的transformer,同一个transformer的block不断的被反复使用。

  3. 影像self-attention GAN
    让每一个pixel都attend到其他的pixel,可以考虑比较global的资讯

你可能感兴趣的:(2020李宏毅学习笔记——18.Transformer:变形金刚)