天天看点

NLP之BERT:transformer

文章目录

    • transformer整体模型
    • Self-Attention
      • 传统的word2vec
      • self-attention
      • self-attention如何计算
      • self-attention的multi-headed机制
    • Transformer多层堆叠
    • 位置信息的表达
    • Add & Normalize

transformer整体模型

transformer做了一件什么事情呢?

NLP之BERT:transformer

为什么要提出transformer,RNN有什么问题?

传统的RNN

NLP之BERT:transformer

每一个 X i X_i Xi​的计算都需要依赖之前的计算所得到的中间结果。

transformer

NLP之BERT:transformer

使用Self-Attention机制来并行计算,输出结果是同时被计算出来的。

Self-Attention

传统的word2vec

NLP之BERT:transformer

需要先训练好词向量,再将语料库转换成词向量,输入到RNN的模型基本不变。但实际情况中,同样的词在不同的语境中含义有可能不同,而且这在自然语言处理当中非常常见。

transformer是通过self-attention来做到这一件事情的

self-attention

对于输入的数据,如何才能让计算机关注到想要关注的有价值的信息.

也就是说,计算机如何通过上下文,有侧重地选出最重要的信息。

NLP之BERT:transformer

同样的it,第一句话指代animal,第二句话指代street。

对于animal,用上下文融合信息,每个单词都往animal里加信息,只是每个词往animal加入的信息多少不一样。

最后达到的效果,用热度图来表示就是:

NLP之BERT:transformer

这就是self-attention要做的事情。也就是说当对词进行编码的时候,不仅仅要考虑当前的词,还要考虑当前词所处的上下文语境,将上下文语境融入要编码的词向量中。

self-attention如何计算

NLP之BERT:transformer

构建三个矩阵来分别查询当前词跟其它词的关系,以及特征向量的表达

NLP之BERT:transformer

self-sttention如何计算?

NLP之BERT:transformer

三个需要训练的矩阵:

Q: query,要去查询的

K: key,等着被查的

V: value,实际的特征

NLP之BERT:transformer

q与k的内积越大,表示它们越匹配。

最后的Score经过softmax,就是最终上下文结果

NLP之BERT:transformer

要除 d k \sqrt{d_k} dk​

​的原因是要刨除向量维度大小的影响

softmax的做法:

NLP之BERT:transformer

单独抽离出来看看每个词的Attention计算:每个词的Q会跟整个序列中的每一个K计算得分,然后基于得分再分配特征

NLP之BERT:transformer

再来整体看一下self-attention的计算流程

NLP之BERT:transformer

z 1 = 0.88 v 1 + 0.12 v 2 z_1=0.88v_1+0.12v_2 z1​=0.88v1​+0.12v2​, d k = 8 \sqrt{d_k}=8 dk​

​=8是假设的维度

self-attention的multi-headed机制

通过不同的head得到多个特征表达,

将所有特征表达拼接在一起,

可以通过再一层全连接来降维全连接是神经网络里的概念(大概是通过乘一个全连接矩阵来降维)

NLP之BERT:transformer

那么,transformer是如何得到多个ATTENTION HEAD的呢?

实际上是通过乘以不同组的 W Q , W K , W V W^Q, W^K, W^V WQ,WK,WV矩阵来实现的。

NLP之BERT:transformer

不同的multi-headed,结果不同,得到的特征向量也不同

NLP之BERT:transformer

再把不同的head经过Cancat、Linear处理,得到Self-Attetion的一个最终输出

NLP之BERT:transformer

回顾之前的transformer整体结构

NLP之BERT:transformer

self-attetion得到结果过后,再进行Feed Forward处理,结果仍然是向量,输出结果在下图表示为 r 1 r_1 r1​, r 2 r_2 r2​

NLP之BERT:transformer

Transformer多层堆叠

transformer的输入和输出都是向量,可以将多个transformer堆叠,每层计算方法都是相同的。

位置信息的表达

self-attention中每个词都会考虑整个序列的加权,所以其出现位置并不会对结果产生什么影响,相当于词放在序列中的任何位置都无所谓,这跟实际有些不符,所以我们希望模型能对位置有额外的认识。

NLP之BERT:transformer

POSITIONNAL ENCODING(位置信息的编码)方法很多,常用的有正余弦函数。

Add & Normalize

(如下图中的Add&Normalize板块所示)

Normalize(归一化):

NLP之BERT:transformer

ADD:

ADD是将self-attention前的数据与self-attention之后的数据相加,

需要将self-attetion前的的数据连接到Add&Normalize层,

采用基本的残差连接的方式

NLP之BERT:transformer

transformer中的连接见下图的虚线

做这一步的目的是因为不敢保证经过处理后的特征一定比原始的特征好。这样处理就能保证至少不比原来差。

添加位置信息、Add&Normalize之后的图示:

NLP之BERT:transformer

继续阅读