在上一篇【机器学习】从RNN到Attention 中篇 从Seq2Seq到Attention in Seq2Seq中我们介绍了基于RNN结构的Attention机制,Attention机制通过encoder和注意力权重可以观察到全局信息,从而较好地解决了长期依赖的问题,但是RNN的结构本身的输入依赖于前一时刻模型的输出,因此无法并行化。既然Attention机制本身就具有捕捉全局信息的能力,那么我们是否可以抛开RNN结构,只使用Attention机制,从而既能捕捉全局信息,又能并行化呢?Transformer模型就使用了这样一种思路。
从一个例子看Self-Attention
Self-Attention的核心在于学习序列中其他部分对于该部分的权重值,比如
The animal didn't cross the street because it was too tired
其中的“it”代指的是 the street还是The animal呢?self-attention的神奇之处在于可以让模型更关注于The animal,以便更好地解读句子的含义,如下图所示
模型的整体结构
Transformer本质上是一个encoder-decoder的结构,如下图所示:
如上图,图左的encoder部分由6个相同的子encoder组成,图右的encoder部分也是由6个相同的子decoder组成。
其中的6个子encoder包含self-attention和FFN(前馈神经网络)两部分,6个子decoder包含self-attention,Encoder-Decoder Attention和FFN三部分。如下图所示
Self-Attention结构
我们先来看self-attention部分
self-attention主要由三个矩阵Q,K,V构成,Q(Query), K(Key), V(Value)三个矩阵均来自于输入X
图中的 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV为模型参数,可以通过优化算法学习得到,输入X与 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV进行矩阵乘法后得到矩阵Q(Query), K(Key), V(Value),三者经过Attention操作后得到注意力矩阵,公式为 Z = A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Z=Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Z=Attention(Q,K,V)=softmax(dkQKT)V
有点复杂,我们来看一个例子,假如要翻译一个词组Thinking Machines,其中用