赞
踩
2018-05-01 | ML , app , nlp , translation , 2. 主流model-研究现状 , 2. NMT , transformer | 3129
本文字数: | 阅读时长 ≈
在2017年5月Facebook发布了ConvSeq2Seq
模型吊打了GNMT一个月之后,Google发出了最强有力的反击,发表了一篇论文Attention is all you need,文中提出了一种新的架构叫做Transformer
,用以来实现机器翻译。它抛弃了传统的CNN、RNN,只采用attention,取得了很好的效果,激起了工业界和学术界的广泛讨论。
常用的模型架构有RNN、CNN、CRF,详见 序列学习。
Transformer避开了recurrence,只用attention,便可以刻画出输入和输出的依赖关系。
对比RNN的决策步骤太长问题,transformer可单步决策。通过一层self-attention,bank能够直接attend到river上。
ConvS2S是线性时间复杂度,ByteNet是log时间复杂度。而Transformer则是常数时间复杂度
前面给出的是一般化的框架形式的描述,事实上Google给出的方案是很具体的。首先它定义了Attention一种泛化形式:
Attention(Q,K,V)=softmax(QK⊤dk−−√)VAttention(Q,K,V)=softmax(QK⊤dk)V
其中Q∈Rn×dk,K∈Rm×dk,V∈Rm×dvQ∈Rn×dk,K∈Rm×dk,V∈Rm×dv。如果忽略激活函数softmax的话,那么事实上它就是三个n×dk,dk×m,m×dvn×dk,dk×m,m×dv的矩阵相乘,最后的结果就是一个n×dvn×dv的矩阵。
这里将attention抽象成 q: query
, k: key
, v: value
。
为什么要采用scale?
因为量级太大,softmax后就非0即1了,不够“soft”了。也会导致softmax的梯度非常小。也就是让softmax结果不稀疏(问号脸,通常人们希望得到更稀疏的attention吧)。
Query, key, value 其实并不是专门针对翻译的概念。不过可以举一些翻译中的例子。例如,当刚刚翻译完主语之后,attention 的内部状态就会想要去找谓语,这时它就把「想找谓语」这件事编码成 query。然后句子里本身是谓语的地方,会有一个 key,表明「我这里可以提供谓语」,它跟 query 一拍即合。这个 key 对应的 value 就是谓语本身的 embedding。
点乘注意力在何凯明的Non-local Neural Networks中被解释成Embedded Gaussian的一种特例。非要跟高斯扯上关系,好牵强。
additive attention等价于一个前馈网络:
softmax([Q,K]W)=softmax(QWQ+KWK)softmax([Q,K]W)=softmax(QWQ+KWK)
这个的计算速度没有dot-product attention在GPU上快。
详见 Neural machine translation by jointly learning to align and translate
以Q为例,单个head的计算
将输入向量切成8份,这每一
份可以看成一个local partial,然后再分别attnetion最终再concat成一个context向量。如果将本文multi-head attention的V输入切成八份后的
向量类比关注不同local paritial的卷积核的话,我们可以看到CNN和这里multi-head attention异曲同工
优势:
举例
忽略batch_size
复制
1 2 3 4 5 6 7 8 9 10 11 12 | num_units = 512 # 也叫 num_channel, emb_size max_length = 10 K,Q,V = [10, 512] W = [512,512] A = attention(KW, KQ, KW) 加上head后 num_head = 8 K_i,Q_i,V_i = [10,64] # W_i = [64,512] # 值得注意的是,这里不是 [64,64],即并未减少计算量和参数量 A_i = attention(K_i W_i, W_i,) |
思考
FFN(Position-wise Feed-Forward Network)。
FFN层对接multi-head attention层,那么该层的输入 x∈Rbatchsize×length×dmodelx∈Rbatchsize×length×dmodel。
https://github.com/tensorflow/tensor2tensor/blob/v1.9.0/tensor2tensor/models/transformer.py#L1373
FFN(x)=max(0,xW1+b1)W2+b2FFN(x)=max(0,xW1+b1)W2+b2
其中输入和输出的维度都是$d{model}=512,中间维度是,中间维度是d{ff}=2048$。对于单个position
x∈R512,W1∈R512×2048,W2∈R2048×512x∈R512,W1∈R512×2048,W2∈R2048×512
这里的全连接层,一种替代方案就是采用kernel size为1的卷积,即
tensor2tensor中有两种实现dense_relu_dense 和 conv_relu_conv,默认采用的前者。
其中卷积的维度是
复制
1 2 3 | input.shape = [batch_size, length, 512] kernel_1 = [2048,1] kernel_2 = [512, 1] |
tensor2tensor实现中,conv1d中的kernel_size如果为1,默认返回dense。源码
复制
1 2 3 4 | def tpu_conv1d(inputs, filters, kernel_size, padding="SAME", name="tpu_conv1d"): if kernel_size == 1: return dense(inputs, filters, name=name, use_bias=True) ... |
逗比,conv到底比dense会不会加速?
为什么我觉得kernel_size=512才等价于全连接?
实际上,kernel_size没必要一定是1的。
很自然,我们有两个疑问。
通常的bottleNeck架构,先降维再升维(减小计算量)。
两大作用:
小结
position-wise
?
回顾一下Transformer的整个架构,不难发现Transformer模型本身并不能捕捉序列的顺序。换句话说,如果将K,V按行打乱顺序(相当于句子中的词序打乱),那么Attention的结果还是一样的。这就表明了,到目前为止,Attention模型顶多是一个非常精妙的“词袋模型”而已。
Sinusoid Positional Encoding
1、以前在RNN、CNN模型中其实都出现过Position Embedding,但在那些模型中,Position Embedding是锦上添花的辅助手段,也就是“有它会更好、没它也就差一点点”的情况,因为RNN、CNN本身就能捕捉到位置信息。但是在这个纯Attention模型中,Position Embedding是位置信息的唯一来源,因此它是模型的核心成分之一,并非仅仅是简单的辅助手段。
2、在以往的Position Embedding中,基本都是根据任务训练出来的向量。而Google直接给出了一个构造Position Embedding的公式:
⎧⎩⎨⎪⎪PE2i(p)=sin(p/100002i/dpos)PE2i+1(p)=cos(p/100002i/dpos){PE2i(p)=sin(p/100002i/dpos)PE2i+1(p)=cos(p/100002i/dpos)
这里的意思是将id为pp的位置映射为一个$dpos维的位置向量,这个向量的第维的位置向量,这个向量的第i个元素的数值就是个元素的数值就是PE{i}(p)$。Google在论文中说到他们比较过直接训练出来的位置向量和上述公式计算出来的位置向量,效果是接近的。因此显然我们更乐意使用公式构造的Position Embedding了。
3、Position Embedding本身是一个绝对位置
的信息,但在语言中,相对位置
也很重要,Google选择前述的位置向量公式的一个重要原因是:由于我们有 sin(α+β)=sinαcosβ+cosαsinβsin(α+β)=sinαcosβ+cosαsinβ以及cos(α+β)=cosαcosβ−sinαsinβcos(α+β)=cosαcosβ−sinαsinβ,这表明位置p+kp+k的向量可以表示成位置pp的向量的线性变换,这提供了表达相对位置信息的可能性。
小结
经过测试,列了以下可视化结果。
TODO,+动态可视化
在NLP的很多网络里,一般
每层的维度都是相同的维度,(只在FFN层进行了局部升维)。
这与传统的
Attention层的好处是能够一步到位捕捉到全局的联系,因为它直接把序列两两比较(代价是计算量变为O(n2)O(n2)),当然由于是纯矩阵运算,这个计算量相当也不是很严重);相比之下,RNN需要一步步递推才能捕捉到,而CNN则需要通过层叠来扩大感受野,这是Attention层的明显优势。
相关文章
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。