Transformer架构-self-attention(注意力机制原理)

前言

在传统的RNN网络时,x1会用到x0的特征,x2会用到x1的特征,下一步都会用到前一步结果。RNN比较大的问题就是没办法做并行操作。
Transformer架构-self-attention(注意力机制原理)_第1张图片self-attention机制来进行并行计算,使用并行,则它的层数可以增加,速度也可以变快,Transformer就是做了并行机制。在输入和输出都相同,输出结果是同时被计算出来的,现在已经基本取代RNN

self-attention

注意力机制:不同的词重要性不一样,在不同的任务中侧重点不一样,重要的词需要特别关注。比如下面两句话,第一句话的it指代的是动物,第二句话指代的是street,那么计算机是如何知道这两句话中it指代的是不同的东西呢,这时候就需要注意力机制。
比如这两句话作测试
The animal did’t cross the street because it was too tried
The animal did’t cross the street because it was too narrow
这两句话it分别代表不同的含义

从着这张图可以看到it对不同词的重要性是不同的,最重要的那个词就说it最关心的,从下图可以看到it最关心的是animal所以it指代的应该就说animal
Transformer架构-self-attention(注意力机制原理)_第2张图片

self-attention该如何计算

第一步先把词通过Embedding转换成词向量,我们要做的事情是在每一词进行编码的时候要考虑全文中每个词对它的影响。这里需要训练三个矩阵:Q是query,要去查询的;K是key,等着被查的,V是value,实质的特征信息。
Transformer架构-self-attention(注意力机制原理)_第3张图片
Q矩阵的作用是,当我在编码第n个词的时候,需要在全文中查找每一个词和我第n个词的关系以及重要性
K矩阵的作用是,每个词都会有个key, 比如我要用第一个词查第二个词就说q1 * k2,用第一个词在查第三个词就说q2 * k3
v矩阵的作用是,表示查询结果 q * k 表示求q,k内积,内积越大表示关系越近,当不相关的时候表示两个向量线性无关,则内积结果是0,表示这两个词向量没什么关系
最后得到的结果只是一个分值,我们想要的效果是,每个词向量关系程度的比值,这时候就要用到softmax,最终的得分值经过softmax就是最终的上下文结果

softmax回忆

比如exp(3.2)后得到24.5 再用 24.5 / (24.5 + 164 + 0.18 ) 最后得到0.13 表示所占的比例是0.13
分别做两个操作 exp normalize
cat 3.2 24.5 0.13
car 5.1 164.0 0.87
frog -1.7 0.18 0.00

这里计算词向量的分值计算公式是

s o f t m a x ( q ∗ k d k ) softmax(\frac{q*k}{\sqrt{d_k}}) softmax(dk qk)
一般我们向量维度越长内积算完后会越大,向量维度越大和我们的重要性程度没有关系,我们需要排除向量维度对我们的影响,所以需要除一个根号d。最后算出每个向量的权重再把他们组合到一起,比如v1是0.13,v2是0.87组合到一起就说0.13 * v1 + 0.87 * v2。每个词的Q都会跟整个序列中的每一个K计算得分,然后基于得分再分配特征。比如你好吗,这个词在不同的上下文的得分值都会不一样,所以在不同的上下文的语义也是不一样的。

Attention整体计算流程:

Embedding把每个词转换成词向量,每个词向量中都有q, k, v
每个词的q都会跟每一个K计算得分
Softmax后就得到整个加权结果
此时每个词看的不只是它前面的序列而是整个输入序列
同一时间计算出所有词的表示结果

这里只是设计到了矩阵运算,所以可以采取并行操作

multi-headed机制

通过不同的head得到多个特征表达,比如第一组q,k,v得到一组特征z0,第二组q,k,v得到一组特征z1,n组会有zn个但是这里一次只取八个头,z0到z7。然后再将这些所有的特征拼在一起,做一个全连接层来降维。加上多个头表示不同特征,每个特征组合在一起,在全接连降维,这种特征可能更好,因为我们综合了多种特征提取得出来的结果。
Transformer架构-self-attention(注意力机制原理)_第4张图片

位置信息标达

self-attention中每个词都会考虑整个序列的加权,所以其出现位置并不会对结果产生什么影响,相当于放哪都无所谓,但是这跟实际并不符合,所以我们希望模型能对位置有额外的认识。做法是在Embedding后再加上一个位置编码。

总结

如何训练BERT

BERT - Bidirectional Encoder Representations from Transformers
方法1:句子中有15%的词汇被随机mask掉,去预测被mask掉的词是什么,基于这种方法来对特征进行编码
方法2:预测两个句子是否应该连在一起,[seq]:两个句子之前的连接符,[cls]:表示要做分类的向量

BERT主要就是训练transformer中的编码阶段

你可能感兴趣的:(#,Transformer,transformer,人工智能,深度学习)