Transformer
参考
总体架构
Encoder
输入部分
-
Embedding
- 对于文本进行拆分,每一个字定义一个x维度的字向量
-
位置编码
-
P E ( p o s , 2 i ) = sin p o s 100 0 2 i d m o d e l PE_{(pos,2i)} = \sin\frac{pos}{1000^\frac{2i}{d_{model}}} PE(pos,2i)=sin1000dmodel2ipos
-
P E ( p o s , 2 i + 1 ) = cos p o s 100 0 2 i d m o d e l PE_{(pos,2i+1)} = \cos\frac{pos}{1000^\frac{2i}{d_{model}}} PE(pos,2i+1)=cos1000dmodel2ipos
-
-
在偶数的位置用sin,奇数的位置用cos
-
-
然后将Embedding和位置编码相加即可得到输入
注意力机制(attention)
-
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 Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dkQKT)V
-
QKV的获取:说白了就是由X的输入向量乘以W矩阵得到QKV,W参数由训练得到,然后除以根号dk是为了保证方差为1,有利于梯度下降
-
多头注意力机制-multi-head attention(弹幕说:多个脑袋一起想)
-
multi-head attention则是通过h个不同的线性变换对Q,K,V进行投影,最后将不同的attention结果拼接起来:
-
-
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . . , h e a d h ) W o MultiHead(Q,K,V) = Concat(head_1,....,head_h)W^o MultiHead(Q,K,V)=Concat(head1,....,headh)Wo
-
h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) head_i = Attention(QW_{i}^Q,KW_{i}^K,VW_{i}^V) headi=Attention(QWiQ,KWiK,VWiV)
-
self-attention则是取Q,K,V相同。
-
-
残差神经网络
- 避免梯度消失
前馈神经网络
- 这层主要是提供非线性变换。
Decoder
-
Decoder和Encoder的结构差不多,但是多了一个attention的sub-layer,这里先明确decoder的输入输出和解码过程(摘自知乎):
- 输出:对应i位置的输出词的概率分布
- 输入:encoder的输出 & 对应i-1位置decoder的输出。所以中间的attention不是self-attention,它的K,V来自encoder,Q来自上一位置decoder的输出
- 解码:这里要注意一下,训练和预测是不一样的。在训练时,解码是一次全部decode出来,用上一步的ground truth来预测(mask矩阵也会改动,让解码时看不到未来的token);而预测时,因为没有ground truth了,需要一个个预测。
-