赞
踩
本文仅是自己学习使用,其中许多的思想和图借鉴了这位大神的文章:Transformer模型详解(图解最完整版) - 知乎
Transformer是一种seq2seq的框架结构,由谷歌提出
可以看到由n个Encoder和个Decoder组成。
其中Embedding就表示从原始数据中提出的Feature。Transformer加入了位置的Embedding,因为这对于做NLP是至关重要的(一句话的顺序)。
eg:有一段话是:“我有一只猫” 那么输入矩阵将会是如下所示:
注: 位置PE(pos)的公式如下:
pos 表示单词在句子中的位置,d 表示 PE的维度 (与词 Embedding 一样),2i 表示偶数的维度,2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d)。
在Encoder中通过6个编码器将之前的输入矩阵X,转为输出矩阵C。
将上面提到的C矩阵输入到Decoder中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。
最终完成文本翻译。
自注意力机制可以说是Transformer中最核心的内容,正是该机制能够让数据之间相互关联,而这也是区别于RNN的地方。
需要将输入矩阵X乘以相应的权重矩阵W,分别得到q,k,v。
self-attentionde的输出如下:
Q计算出单词之间的attention强度。
可以认为计算结果的第一行表示为第一个单词即为与其他单词的关联度(包括自身)。
得到了之后将之除以 防止内积过大,之后进行softmax操作,可以转化为概率的形式,即每一行相加为。
之后在于V矩阵相乘,得到了最终的输出Z。(其中注意力机制就是类似于数学期望)
可将输入矩阵X(假设最开始的特征为512),分成8个子矩阵(特征为64,长度不变)。分别对这8个矩阵进行注意力计算。最终拼接,即为Encoder的输出。
注:多头注意力机制最终的输出Z与输入矩阵X的维度是相同的。
其中 X表示 Multi-Head Attention 或者 Feed Forward 的输入,MultiHeadAttention(X) 和 FeedForward(X) 表示输出 (输出与输入 X 维度是一样的,所以可以相加)。
Add指 X+MultiHeadAttention(X),是一种残差连接,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分,在 ResNet 中经常用到
该模块主要是加了MASKed操作,因为在输入时需要考虑前面的输入,但是又不能提前知道后面的输入是什么,所以我们要进行Masked(掩盖)。
注意Decoder中第二个Multi-Head Attention的输入为上一个使用 Encoder 的编码信息矩阵 C 计算的。*(使用K,V)
根据 Encoder 的输出 C计算得到 K, V,根据上一个 Decoder block 的输出 Z 计算 Q (如果是第一个 Decoder block 则使用输入矩阵 X 进行计算),后续的计算方法与之前描述的一致。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。