【笔记】李宏毅 -- Transformer

1.Transformer

RNN和CNN的局限性

RNN是seq2seq的模型,RNN不易平行化,如果是单向的话,要输出\(b^3\),需要先看完\(a^1, a^2, a^3\)。如果是双向的话,可以看完整个句子。

CNN在高层的时候,可以考虑距离更长的信息,CNN易于并行化。CNN的缺点是,考虑的只是局部内容,要考虑长距信息,需要叠加很多层。

【笔记】李宏毅 -- Transformer

Self-attention

attention和bi-RNN有同样的能力,可以看完整个句子,并且可以并行化。所以同时包括了RNN和CNN的优点。

【笔记】李宏毅 -- Transformer

计算过程如下:

【笔记】李宏毅 -- Transformer

并行计算过程演示:

【笔记】李宏毅 -- Transformer

多头机制,有的head可能考虑局部信息,有的head考虑长距信息,各司其职。

【笔记】李宏毅 -- Transformer

attention的局限性

由于和每个input vector都做attention,没有考虑到顺序位置信息。
所以在原始paper里面,每一个input \(x^i\) 通过transform变成 \(a^i\) 以后,还要加上一个维度相同的向量 \(e^i\), \(e^i\) 是手设的,代表位置的资讯。

换一种讲法就是,在input \(x^i\) 后连接一个one-hot vector \(p^i\) 代表位置资讯,第i维是1,其余都是0。
连接之后乘上一个矩阵 W 做transform,W 可以拆成 \(W^I\) 和 \(W^P\),把 \(W^I\)跟 \(x^i\) 相乘得到 \(a^i\),\(W^p\)跟 \(p^i\) 相乘得到 \(e^i\)。
\(W^P\) 是可以learn的,论文里面是人手设的。

【笔记】李宏毅 -- Transformer

seq2seq中如何用attention

一般的seq2seq model包含两个RNN,分别是encoder和decoder,都可以用self-attention 取代掉。总之,看到RNN用self-attention替换掉。

【笔记】李宏毅 -- Transformer

Transformer

以把中文翻译成英文为例,encoder的输入是中文的character sequence比如说是机器学习,在decoder给他一个begin of sequence的token就输出一个machine,在下一个timestep把machine当作输入,就输出learning,直到输出句点的时候翻译过程结束。

接下来看每一个layer做的事情。

  1. 先看左半部的encoder,input通过input embedding layer变成一个vector,然后vector加上positonal encoding,接下来进入灰色的block,这个block重复N次。

  2. 在灰色的block里面,第一层是multi-head attention,也就是说input一个sequence,通过multi-head attention layer得到另外一个sequence。

  3. 下一个layer是add & norm,在这一步,把multi-head attention 的 output 跟 multi-head attention 的 input 相加,然后做layer normalization。参考文献见ppt。

Layer normalization和batch normalization 的异同:
假设有一个大小为4的batch,在batch normalization 的时候,是对同一个batch里面不同data里面的同样的dimension做normalization,希望同一个dimension 的均值为0,方差为1。
而layer normalization是不需要考虑bacth的,给一个data,希望各个不同dimension的均值为0,方差为1。
一般情况下layer normalization会搭配RNN一起使用。transformer很像RNN,所以这里使用layer normalization。

  1. 接下来feed forward layer 会把input sequence 的每一个vector进行处理,还有另外一个add & norm 的layer。

  2. 接下来是右半部decoder的部分,这个decoder的input 是前一个time step 产生的output,通过output embedding 加上positional information,进入灰色的block,这个block重复N次。

  3. 这个灰色block的第一层叫masked multi-head attention。加masked的意思是说,现在做self-attention的时候,decoder会attend 到已经产生出来的 sequence,因为还没有产生出来的无法做attention。

  4. add & norm layer

  5. 接下来是multi-head attention layer,这个是attend 到之前encoder的输出。

  6. 接下来还有add & norm layer, feed forward layer,add & norm layer

  7. 最后做linear,softmax得到最终的output

【笔记】李宏毅 -- Transformer

原始论文里Transformer的可视化

【笔记】李宏毅 -- Transformer

【笔记】李宏毅 -- Transformer

Transformer的应用

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

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

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

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

【笔记】李宏毅 -- Transformer

上一篇:RNN 梯度消失/爆炸问题的解决方法


下一篇:【NLP】文本分类综合(rnn,cnn,word2vec,TfidfVectorizer)