Transformer -- 笔记

BERT 就是 UNsupervised trained Transformer

Bert 只用到了 Transformer 结构中的 Encoder 部分,训练的时候不需要标注序列。

比如训练一个中英翻译模型,只收集中文语料就可以了,并不需要输入对应翻译之后的英文文本。

Transformer -- 笔记_第1张图片

Transformer 就是 用到了大量 Self-attention layer 的 Seq2seq model

Transformer -- 笔记_第2张图片

下面来看看 Self-attention layer 都做了哪些事情

因为传统的RNN不容易并行化 parallel  ,一种解决办法是 用CNN来取代RNN。

用CNN也可以做到RNN的那种效果:输入一个seq,输出也是一个seq

Transformer -- 笔记_第3张图片

但是这样存在的问题是 每一个CNN只能考虑非常有限的内容,比如上面的一个filter 可能只和3个vector相乘,而RNN可以考虑整个输入序列来决定输出。这里使 CNN可以考虑更长的序列的一个做法是multi-layer,上层的filter就可以考虑更长的序列信息。

Transformer -- 笔记_第4张图片

但是要叠很多层,才能看到较长的序列信息,这是CNN处理序列信息的一个缺点。

于是,Self-attention 闪亮登场~ ^_^

可以把 self-attention 看做是一个新的 layer,它也是输入一个seq,输出一个seq。

self-attention的特别之处是:它和 bidirectional-RNN有同样的能力,每一个输出向量能看到所有输入向量(input seq ,整个序列信息),但是 self-attention 可以并行计算每一个output vector。

Transformer -- 笔记_第5张图片

  • Attention is all you need : 意思是只用Attention就可以,不需要再用RNN 或者 CNN

Transformer -- 笔记_第6张图片

Attention有很多种计算方法:基本原理是 根据两个向量(输入两个向量),返回这两个向量的“相关”程度(衡量指标可以是一个 - 分数),Paper中用的是下面的 attention 计算方法。

Transformer -- 笔记_第7张图片

然后经 Soft-max 层 处理,注意这里的α1,1 - α1,4 都是scalar 常数

Transformer -- 笔记_第8张图片

然后把soft-max 之后的结果(常数)与对应的v向量相乘,并累加求和,就的到了一个输出变量(output vector) b1

Transformer -- 笔记_第9张图片

同理 求b2

Transformer -- 笔记_第10张图片

下面看看 Self-Attention 是怎么做到 parallel 的

其实主要也是用矩阵乘法来实现的并行

Transformer -- 笔记_第11张图片

然后计算α时也可以用矩阵来处理,见下下张

Transformer -- 笔记_第12张图片

整体拼接起来

注意: 

Attention 矩阵中的每一个 element

表示 input sequence 中每一个位置序列两两之间的 Attention

Transformer -- 笔记_第13张图片

计算输出vector组成的矩阵

Transformer -- 笔记_第14张图片

总览:

Transformer -- 笔记_第15张图片

Self-attention 的变形 Multi-head Self-attention

Transformer -- 笔记_第16张图片

Transformer -- 笔记_第17张图片

然后乘以Wo矩阵 降维

Transformer -- 笔记_第18张图片

Multi-head 中每一个head关注的点可以是不一样的,比如有一个head 关注的是local input seq 短距离的输入序列,有的head关注的是global 长距离的输入序列,不同的head 各司其职,共同实现输出序列的计算。

Positional Encoding - 位置编码

上面的计算可以发现,self-attention 没有考虑到位置信息,而位置信息一般在序列中还是蛮重要的,比如You go first,一般翻译成你先走,而不是你走先;

再比如:我喜欢苹果,因为它比较好吃。/ 我习惯苹果,因为它比安卓稳定。显然对句子的理解都是需要位置信息的。 

所以可以想办法把位置信息加进去。

Transformer -- 笔记_第19张图片

Transformer -- 笔记_第20张图片

下面看看 Seq2seq 中怎么使用Attention

Transformer -- 笔记_第21张图片

可以用self-attention 替换RNN

Transformer -- 笔记_第22张图片

Transformer 架构 -- 这里以机器翻译为例:

Transformer -- 笔记_第23张图片

Transformer -- 笔记_第24张图片

注意力权重的分布

Transformer -- 笔记_第25张图片

下面的结果表明:

当句子中的指代关系发生变化时,Attention 的值也会相应发生变化。

比如:

这只动物没有穿过马路,因为它太累了。 (动物累)

这只动物没有穿过马路,因为它太宽了。(马路宽)

Transformer -- 笔记_第26张图片

Multi-head Attention 特点

Transformer -- 笔记_第27张图片

应用:输入 文档的集合,输出类似Wikipedia的结果

比较令人amazing的地方是 输入序列长度 高达10的6次方

Transformer -- 笔记_第28张图片

并列多个Transformer

Transformer -- 笔记_第29张图片

Transformer 还可以用在图像上

Transformer -- 笔记_第30张图片

你可能感兴趣的:(自然语言处理)