美文网首页
Self-Attention与Transformer(袁源)

Self-Attention与Transformer(袁源)

作者: 高斯纯牛奶 | 来源:发表于2020-07-01 16:15 被阅读0次
  • 袁源是微软推荐系统的主管

  • 深度学习流行不代表机器学习就没用了,因为no free lunch。

  • 能不能不用RNN来做NLP呢?Transformer就是答案:可以利用attention代替RNN,效果比RNN还要好。

  • 在Transformer之前用的最多的是基于RNN的encoder-decoder模型

  • BERT是基于DAE来的,可以先了解一下Auto-Encoder

  • 弄明白ELMO,弄明白GPT很简单

encoder-decoder模型

流程如下:


image.png
  • RNN因为用递归的方式,所以会有梯度消失、梯度爆炸的问题。LSTM和GRU只能缓解,不能完全消除这个问题。

  • Transformer分为两块,左面是encode右面是decode。Nx表示这个结构可以循环很多次。decode中间使用了cross-attention。


self-attention是训练出来的吗

如图:


Transformer中Encoder的一个模块:


但右面不同单词之间的强弱是怎么计算出来的呢,下面用一页将Self-attention的计算机制解释出来。(其实是解释了一遍Self-attention的计算流程)

我们有了x1,x2,目的是转化为z1,z2。wq,wk,wv是随机初始化的,首先计算q1,k1,v1:
q1 = x1 × wq
k1 = x1 × wk
v1 = x1 × wv

现在我们就有了x1,q1,k1,v1

???疑问:他么只是相乘了同一个矩阵,并没有发生信息交换。

目标:z1 = v1θ1+v2θ2

score1 = q1点积k1;score2 = q2点积k2

求值softmax,得出θ:


更新v1,v2:


因为 z1 = v1θ1+v2θ2,z1已经得出

要求z2时,要将q1.k1 q1.k2换成q2.k1 q2.k2


???为什么x1和下一个单词计算,x2和上一个单词计算。那x3x4是和哪个单词一起计算?
???self attention 和 全连接有何不同

qkv的方式来自于信息检索:


如果x1,x2,x3这样逐个计算会增加GPU开销,可以将x1x2合并为一个矩阵进行计算可以优化计算效率,将矩阵乘法的计算量缩减为二分之一:


multi-headed即产生多个不同的Wq,Wk,Wv,这样使得attention有更丰富的层次:


问:如何将多个版本的z合成一个独立的z?(为什么要合成一个独立的z?)
答案:通过全连接(即✖️一个W矩阵)合成一个z


没看懂,这里最终的z不是z1-z7全连接来的吗?怎么和x1x2扯上关系了

Z1经过两层全连接网络变成R1,R1变为下一个encoder的X1:


不同head对it的理解不同,有的关注指代关系(关注the animal),有的关注状态关系(tired):


在encoder0输入之前,不止做embedding,还要做positional encoding。 但这个讲师对positional encoding的计算讲的非常不清楚。
positional encoding的计算方法不是唯一的,可以不用作者的那种方式。


这里也借鉴了跳跃连接:


层正则化的介绍,对t层进行的操作:


Layer norm只考虑每一批数据自己,这样就和batch size解耦:


encoder部分全景概览:


Decoder层与Encoder层的区别在于添加了Encoder-Decoder Attention层,利用到了Encoder中的输出作为Decoder的输入:


Decoder工作过程:


先生成一个与词表长度对应的长向量,再用softmax归一化:


使用交叉熵计算输出


优缺点:


Encoder和Decoder的结合方式:


相关文章

网友评论

      本文标题:Self-Attention与Transformer(袁源)

      本文链接:https://www.haomeiwen.com/subject/mpcafktx.html