NLP基础(七):Transformer模型和Self Attention自注意力机制

本文介绍了Transformer模型的结构,重点讲解了Self Attention自注意力机制的计算过程,包括多头注意力机制,以及Positional Encoding、FFN和Linear & SoftMax等其他关键组件。Transformer模型的优势在于并行计算和处理长距离依赖,但也存在无法有效利用时间序列信息等缺点。

1.模型结构

Transformer模型分为左右两部分,和Seq2Seq模型的结构相似,由Encoder和Decoder构成。并且Encoder和Decoder由N=6个相同的layer组成,Nx表示这里是x6个。具体的模型结构如下图:

Transformer模型抽象化之后为下图,所有的编码器在结构上都是相同的,但它们没有共享参数。每个编码器都可以分解成自注意力(self-attention)和前馈(feed-forward)神经网络两个子层,解码器较编码器多了Encoder-Decoder Attention层。

编码器最终的输出键向量Key和值向量Value传输至解码器的每一层,Encoder-Decoder attention层自带Query矩阵。

2.Self Attention

计算自注意力的第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量。也就是说对于每个单词,我们分别创建一个64维的查询向量Query、键向量Key和值向量Value。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的。
Self Attention
首先分别将 q 1 q_1 q1 k 1 , k 2 , . . . , k n k_1,k_2,...,k_n k1k2...kn进行点乘计算分数,将分数除以 d k \sqrt {d_k} dk 即8用于缩放,然后生成softmax分数。最后使用softmax分数为权重对所有单词的表示(值向量)即 v 1 , v 2 , . . . , v n v_1,v_2,...,v_n v1v2...vn进行加权求和得到 z 1 z_1 z1。重复此动作,计算出 z 1 , z 2 , . . . , z n z_1,z_2,...,z_n z1z2...zn。计算步骤如下:

qkv示意图
计算公式为:

在这里插入图片描述

3.多头注意力机制

为了提升注意力层的性能,扩展了关注不同位置的能力,给与了多个表示子空间用不同的权重矩阵做运算,得到不同的Z矩阵。

多头注意力
我们做与上述相同的自注意力计算,只需八次不同的权重矩阵运算,我们就会得到八个不同的Z矩阵。
Z矩阵
最后把这些Z矩阵拼接在一起,然后用一个附加的权重矩阵 W 0 W_0 W0与它们相乘。

Z矩阵合并
把多头注意力机制的计算流程集中起来,可以看做下图:
合并

3.其他机制

3.1 Positional Encoding

自然语言序列需要编码表示单词顺序,而Transformer不像RNN是带有单词顺序的,因此需要在输入层词嵌入加上位置编码,增加的编码如下所示,其中pos表示单词的位置, d m o d e l d_{model} dmodel表示词向量的维度,i为从0到 d m o d e l / 2 − 1 d_{model}/2-1 dmodel/21的数:

公式

在这里插入图片描述
假设 d m o d e l = 512 d_{model}=512 dmodel=512,则第一个单词的向量表示为:
示例

3.2 FFN

encoder和decoder中的每一层都包含了一个全连接前向网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出,公式如下:

FFN

3.3 Linear & SoftMax

最后将输出映射到vocab size维度大小的向量Softmax将得分转化为对应词概率最大的输出。
Linear and SoftMax

4.优缺点

4.1 优点

1)不对数据的时间和空间关系做假设,可以处理一组对象

2)层输出可以并行计算,不像RNN需要序列计算

3)远距离项可以影响彼此输出,无需多步RNN或各种卷积层

4)可以学习长距离的依赖

4.2 缺点

1)对于时间序列,一个单位时间的输出是从整个历史记录计算的,并不是仅从输入和当前的隐含状态得到,可能效率会降低

2)如果输入数据有时间或空间的关系,则必须加上位置编码,否则模型会有效地看到一堆单词

参考资料
[1]Attention Is All You Need
[2]【NLP】Transformer详解
[3]图解Transformer(完整版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值