大部分图片来自

Photation is All You Need

在说变形金刚之前,我们考虑几个问题

LSTM,GRU的缺点有哪些,它有什么可取之处

很显然, LSTM , GRU 以及普通的 RNN 模型严重依赖上一个时间点的结果,这限制了模型的并行性。此外,对于超长文本,即使是 GRU LSTM 表现也不够好。

为什么要利用 CNN 替代 RNN ?

CNN的缺点有哪些 ?

Transformer

Transformer 是一个 enc-dec 的结构

ppJoIwn.png

enc 和 dec 具体如下

ppJoXy4.png

输入数据编码

Word2Vec

ppJTEOH.png

除了第一层的词向量是 Word2Vec 其他的都是上一个 enc 的输出

Self-Attention

ppYCPhD.png

我们想用 Self Attention 找到句子中每个词和哪个有关联,例如上面这句话,我们要做的就是找到it 指代的是 animalanimal

在 selfattention 中 ,每个单词有三个不同的向量 Q K V ,它们是嵌入向量乘上三个不同的权重矩阵得到的。

ppJTukt.png

计算流程如下

ppJT8XQ.png

换句话说,最后得到的效果是这样的

ppJTUkq.png

这里需要进一步的解释:

1.在矩阵计算中,点积可以用来计算两个矩阵相似度,因此使用 QKTQK^{T} 来计算矩阵的相似度,然后加权匹配输出,权重恰好是这个相似度

2.但是此时存在的一个问题是梯度不一定稳定,通过玄学我们得到了把最后得分除 dk\sqrt{d_k} 也就是 k 向量维度的根号可以让梯度更稳定的结论

3.但是权重还没有归一化,我们还得采用一个 softmax\rm{softmax} 函数归一化

4.此时我们得到的值再与 VV 乘,这里需要注意到 X=Q=K=VX=Q=K=V 得到 ZZ (放张图说明一下,图源见水印)

ppYp9Dx.jpg

Multi-Head Attention

多头注意力

这相当于多个不同的 self-attention 的集合,例如在 h=8h=8 的情况,我们可以得到 hh 个特征矩阵,把它拼接后再来一个全连接层可以得到最后的输出

ppJ7uDJ.png
ppJ7nu4.png
ppJ7Kb9.png

在 enc-dec attention 中, 解码过程是由顺序的,我们没有办法看到之后的解码结果,这种情况下就称为 masked multi-head attention

ppJ7rPP.png

以上是一个完整的 enc-dec 网络,我们可以堆叠这样的网络

现在您应该能看懂变形金刚了

ppYCKN8.png

Position Embedding

通过常识我们可以得到,汉字的序顺并不影响读阅,但是存在这种问题

Mcggvc 吊打 scmmm

如果我们机器学习把 Mcggvc 吊打 scmmmscmmm 吊打 Mcggvc 混为一谈,那就说明报道出了偏差,是要负责任的。

我们可以让输入的 embedding 加一层时序的编码

ppYCDgJ.png
ppYCd4U.png

感性理解一下

ppYC5gH.png

我也不知道为什么会用这个函数,可以感性理解一下的就是 cos(a+b)=cosacosbsinasinb{\rm cos} (a+b)={\rm cos}a{\rm cos}b-{\rm sin}a{\rm sin}b 也就是能捕捉到单词之间的相对位置(我没懂这一块)

Why LayerNormalization

这个和 BN 一样都是减去均值除以方差,但是由于 transformer 我们输入的是一个句子 ,每个句子有很多个单词 ,每个单词都有一个向量表示,它是三维的

LN 不需要全局的均值和方差,因为这是对每一个样本(一句话)来做的。 考虑到句子长度不同,BN算出来的均值和方差抖动很大,所以此时只能用LN

沐神的讲解 25:42

post-LN ? pre-LN ?