Transformer简介
- Transformer 是一个Seq2Seq模型
- Tramsformer 不是RNN
- Transfomer 只有attention和全连接层
- 机器翻译在大型数据集上完爆最好的RNN
Review Attention for RNN
这节课讲的attention相对比于前两节课多了一个  v i v_i vi,之前是用权重直接乘  h h h,而在这里是乘以  v v v。最后得到向量  c c c
 
Attention without RNN
- Attention一开始设计是用在RNN上的,那么我们应该如何把attention从RNN中剥离出来呢?
- 本节课将使用一个attention和一个self-attenion层搭建一个Transformer
1. 设计一个attention层用于Seq2Seq模型
- Seq2Seq模型有一个encoder和一个decoder
- encoder接受 m m m 个词向量的输入
- decoder接受 t t t 个词向量的输入,来生成下一个单词
- 对于encoder的输入向量,我们用两个个矩阵  W K W_K WK 和  W V W_V WV 将其变换为上面的  k k k 向量和  v v v 向量:
  
- 对于decoder的输入向量,我们用一个矩阵  W Q W_Q WQ 将其变换为上面的  q q q 向量
  
-  K K K 为  m m m 个  k k k 向量叠在一起的矩阵,用  q q q 和  K K K 算出相关性,其中  α \alpha α 是  m m m 维的向量,元素及总和为1,代表着  m m m 个  k k k 向量和  q q q 的相关性
  
- 利用得到的相关性和  v v v 计算 context vector  c c c,其中这一系列运算可以简化为  V α V\alpha Vα
  
- 对所有的  q q q 用类似的方法计算出所有 context vector  c c c,这样attenion层的输出就是一个  C C C 矩阵
  
- 对于一个  c i c_i ci 来说,它依赖于decoder的当前输入  x i ′ x'_i xi′,还有所有encoder的输入 x 1 , x 2 . . . , x m x_1,x_2...,x_m x1,x2...,xm
  
- 以英译德为例:利用decoder的  x 2 ′ x'_2 x2′ 和 所有encoder的输入 x 1 , x 2 . . . , x m x_1,x_2...,x_m x1,x2...,xm,我们可以生成  c 2 c_2 c2,然后把  c 2 c_2 c2 丢进一个softmax里面产生概率来预测下一个德语单词。 c 2 c_2 c2 是知道整句英语的,所以可以很好的避免遗忘问题
  
- 总结Attenion层:接受encoder的输入  X = [ x 1 , x 2 , . . . , x m ] X=[x_1,x_2,...,x_m] X=[x1,x2,...,xm] 和decoder的输入  X ′ = [ x 1 ′ , x 2 ′ , . . . , x t ′ ] X'=[x'_1,x'_2,...,x'_t] X′=[x1′,x2′,...,xt′],输出一个context vector矩阵  C = [ c 1 , c 2 , . . . , c t ] C=[c_1,c_2,...,c_t] C=[c1,c2,...,ct],其中参数有三个矩阵: W K , W Q , W V W_K,W_Q,W_V WK,WQ,WV,它们需要从数据中学习
  
2. 搭建一个Self-Attention层取代RNN
- self-attention层和attention层完全类似,只是输入不同:其中任意一个词向量的改变都会影响到别的词向量
  
- 在self-attention里:每一个输入的向量都要被变换为  q , k , v q,k,v q,k,v
  
- 而权重计算也是类似的:对于  α 1 \alpha_1 α1 来说,它依赖于  q 1 q_1 q1,和其他所有的  k k k
  
- 对于  c 1 c_1 c1 计算来说,既依赖于上面它计算出的权重  α \alpha α 也依赖于所有的  v v v:
  
Summary
- attention最初被用于改善RNN的Seq2Seq模型
- 后来发现attention不仅仅局限于Seq2Seq模型,而是可以被用在所有的RNN上
- 之后发现可以直接从RNN中剥离出attention作为一个模型使用