大佬录的,其他人的,我看一遍就大概明白的强推!
视频
资料
1.来源:谷歌大脑发布的《Attention is all you need》。
属于seq2seq的模型,之后衍生出了bert。
2.seq2seq(一种重要的 RNN 模型,也称为 Encoder-Decoder 模型):
参考
三种 Seq2Seq 模型的主要区别在于 Decoder,他们的 Encoder 都是一样的:
2.transformer和SLTM的区别:
同时训练的话,就带来了一个问题,因为字的顺序是会对语义造成影响的,所以:需要在词向量中表明位置信息。
3.bert与训练模型,只是用到了编码器部分,然后适配给五花八门的任务。
4.模型总览:
5.第一步:转化为词向量:
句子的个数,句子的长度,词向量的长度
6.positional encoding:
经过位置嵌入得到的向量的维度和词向量的维度是一样的,因此可以直接相加。
7.Multi-Head Attention:
Attention:
对单个句子分配三个权重,分别是Wq,Wk,Wv,单个句子的矩阵乘以三个权重矩阵,得到了三个不同的矩阵,但是维度与乘之前单个句子的矩阵是相同的。
引入一个超参数,必须可以整除embeding dim
因为分成了多个,所以叫做多头注意力机制。
注意这个转置。意义发生了变化。
对向量乘法有了很深入的理解:
如上图所示,右侧的阴影部分的值相当于是由两个向量相乘得到的,值越大,说明两个向量的夹角越小,说明两个向量越相似。所以结果的那个矩阵可以表示关联性
Q 乘以 K的转置:
除以根号的原因是把注意力矩阵缩放回标准的正太分布,可以获得更好的梯度。
softmax是使得每一行的和为1
到此为止,我们用Q和K求出了注意力矩阵。
然后进行如下:
注意这样相乘的意义,使得向量获取到所有字的信息。
8.改进的地方:
由于句子长度的长度不一样,我们得到的每个句子中可以有些向量是进行全零填充的,
比如下图的阴影部分就是因为全零填充得到的注意力矩阵中全为0的部分。
虽然现在为0,但是我们使用softmax之后这些位置就不为0了。因为是e的多少次方。
也正因为是e的多少次方,我们想消除因为0产生的影响时,可以给这些区域很大的负数偏执,这样sotfmax之后,得到的概率也是基本0,产生的影响就比较小了。
9.ADD:残差连接。
神经网络深度较深,可以防止梯度消失的情况。
梯度跨层传播。
10.norm:
没有讲的Masked Multi-Head Attention中的Mask:
对应的mask矩阵:
注意:是在Q * K的转置之后做的。
feed forward
其他感觉较好的参考,还没看:
decoder部分:
decoder的第一个masked的自注意力机制上面已经写过:
仔细观察图,decode部分在进行atten的时候,两个箭头来自encoder(K V),一个箭头来自decoder的masked atten的结果。(Q)
自己想想,还是有一定道理的。
decode的运作过程:
模型的多层结构:
注意看decoder部分,每次接受上一层的decoder的输出和encoder的输出,原因应该就是在计算self-atten的时候需要用到吧。