-
袁源是微软推荐系统的主管
-
深度学习流行不代表机器学习就没用了,因为no free lunch。
-
能不能不用RNN来做NLP呢?Transformer就是答案:可以利用attention代替RNN,效果比RNN还要好。
-
在Transformer之前用的最多的是基于RNN的encoder-decoder模型
-
BERT是基于DAE来的,可以先了解一下Auto-Encoder
-
弄明白ELMO,弄明白GPT很简单

流程如下:

-
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


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的结合方式:

网友评论