Transformer模型
Transformer模型及其实现
历史:谷歌团队在2017年提出的经典NLP模型(目前很火的bert模型就是基于此模型)。
特点:Transformer 模型使用了 Self-Attention 机制,不采用 RNN 的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息
所有的大语言模型都是基于transformer结构,区别在于:
- mask策略不同。比如bert除了mask的字符,其他所有的相互可见;gpt则是只能看到mask前面的字符;清华的glm则是综合两者。
- 训练任务目标不同。比如bert是预测mask的词,而gpt目标是预测下一个会出现的词(生成式)。清华glm则是用gpt的方式来做bert的任务。
参考:
Transformer模型详解(图解最完整版)
李宏毅老师讲解的Transformer视频:here(youtube视频,2019,需梯子)
视频笔记:
Transformer—seq2seq model with "self-attention"
seq2seq model——自编码模型,包括编码器和解码器
自注意力机制
1 出现原因:
最开始处理seq2seq的RNN(如下图)很难做到并行(Parallel),比如想预测$b4$就得先看$a1、a2、a3$计算出$b1、b2、b^3$,后来有人提出利用卷积网络来进行并行处理sequence,,但是CNN每个卷积单元能处理的长度有限,当遇到较长的sequence时就不得不加深网络深度。
于是就有人提出自注意力机制self-Attention,它是一种新的layer,其输入输出跟RNN是一样的,其特别之处在于它跟双向LSTM类似,每个输出都看过整个输入的sequence,并且并行计算出$b1到b4$,RNN能做的它都能做,可以说取代RNN了。
2 原理:
- 每个输入的x都先乘一个矩阵W得到a1到a4,再各自分别乘以三个矩阵得到三个向量:query(q)、key(k)和value(v),q用来对每个k做attention操作,v是被抽取出来的信息
- attention的输出\alpha_{1,1}、\alpha_{1,2}、\alpha_{1,2}、\alpha_{1,4}是一个分数,表示q和对应的k有多匹配,attention操作有多种做法。下面以原paper中的Dot-Product Attention方法为例:
ps.除以根号d的原因是:直观看q*k的值会随着dim变大而变大,所以除一下用来平衡,至于为什么是根号,待考究。
- 做soft-max操作
- 最后一步,把softmax的结果跟原来对应的value(vi)相乘再累加就得到输出b1,可以看出其跟输入的a1、a2、a3、a4都有关系,而且如果不想考虑所有sequence,只想考虑局部的sequence,只需将后面其他的项化成零即可,所以可以“attention”选择任意部分的输入来生成当前某个b字符,这就是attention机制的根本所在。并行则体现在b1到b4可以同时生成。
从矩阵运算角度看一下整个过程:
其中最后O矩阵里面就是最后的b1、b2、b3、b4。
3 其他
从上面详细生成bi过程可以发现,它对任意输入的ai都是一视同仁的,也就没有位置关系信息的加入,这显然不是我们想要的。原始paper中提出通过人工定义(不是从数据中学习的)ei在计算q、k、v之前加到ai里面来表示位置信息。
seq2seq里面的注意力机制
seq2seq模型:
输入输出都是RNN,一个编码器Encoder,一个解码器Decoder,其中编码器部分的双向RNN和解码器的RNN(蓝框部分)已经可以直接用attention层取代。
Transformer整体模型
1 Endoder层
先看左边的encoder部分,输入字符会通过Input Embedding(嵌入技术,将数据转换为向量vector,可参考:
嵌入学习embedding
转换为向量,然后跟positional encoding相加输入到灰色区块,灰色区块会重复n次(N*),其中第一个Muti-Head Attention层就是一个self-attention层,然后它的输出会经过一个add & Norm层,这一层是把Muti-Head Attention层的输入a和输出b加起来得到b'(如下图),再做layer 标准化(Normalization,参考原论文Layer Normalization)
之后进入前馈层,前馈层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数。这一层也会加一个Add & Norm层。
2 Decoder层(右边)
Decoder block 结构,与 Encoder block 相似,所以具体流程不再赘述,但是存在一些区别:
- 包含两个 Multi-Head Attention 层。
- 第一个 Multi-Head Attention 层采用了 Masked 操作,简单来说通过防止某个位置的词看到他后边的信息来解决标签泄露的问题,以实现并行训练。mask机制可参考:here
- 第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。
- 最后有一个 Softmax 层计算下一个翻译单词的概率。
以上就是整个Transformer模型。
标签:Transformer,Attention,RNN,模型,attention,b1 From: https://www.cnblogs.com/chenhaobk/p/17587364.html