赞
踩
RNN ,用来解决seq2seq问题,适用于长序列,问题为难以平行化处理。
CNN,可以通过不同filter(卷积核)进行平行化处理,但是每个token关注的只是附近的token,难以关心长句子全局关系。
ATT, 有非常霸气的文章attention is all you need.Transformer里就是用了multi-head attention。
ATT变化过程:ATT–self-attention–multi-head attention
用self-attention代替RNN
写本小节也是本篇文章的初衷就时总忘记K、Q、V是怎样形成的。
attention机制通常用在encode与decode之间,但是self-attention则是输入序列与输出序列相同,寻找序列内部元素的关系即 K=V=Q。例如《Attention Is All You Need》在编码器中使用self-attention,利用上一步的input值计算当前该位置input的值。假设我们想用机器翻译的手段将下面这句话翻译成中文:
“The animal didn’t cross the street because it was too tired”
当机器读到“it”时,“it”代表“animal”还是“street”呢?对于人类来讲,这是一个极其简单的问题,但是对于机器或者说算法来讲却十分不容易。
self-Attention则是处理此类问题的一个解决方案,也是目前看起来一个比较好的方案。当模型处理到“it”时,self-Attention可以将“it”和“animal‘联系到一起。
计算过程
x1–x4是input,做embedding变成a1–a4,
每一个都分别乘上三个transformation得到K(key)、Q(query)、V(value)
拿每一个q都对每个K做attention,相当于计算矩阵夹角(向量相似度)
要除以根号d,d是q和K的维度。因为Q点乘K的结果会随着它们维度的增大相关性增大
做softmax,上面的公式
用V得到输出d
每一个d都是平行计算的
计算
总
就像CNN中有不同的卷积核,对Q、K、V得到不同的qkv
mult-head的优点是不同的head可以关注不同的信息,每个head各司其职
对self-attention来说,输入的次序是不重要的
原paper中,使用人工设置的positional vector ei
也可以在xi上append一个one-hot的vector,但是实际的效果是一样的。
self-attention代替RNN
以把中文翻译成英文为例,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 相加,然后做layer normalization。
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。
**接下来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
最后做linear,softmax得到最终的output
下面的head只考虑临近的关系,上面的考虑更多远的关系.
基本上原来可以做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的资讯.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。