Bert---进一步理解transformer结构

0 接上一篇Transformer结构

https://blog.csdn.net/jinselizhi/article/details/100716623
Bert---进一步理解transformer结构_第1张图片
输入两个词,通过wordembedding变成向量,然后通过self-attention变成考虑上下文的向量。
然后再接全连接层、接着是第二个encoder。
这里的self-attention画的一个大的框:计算z1 是要依赖于整个x1、x2、…,算z2也是一样。

1 从self-attention的计算开始

把每个词变换成三个向量 Q、K 和 V

Bert---进一步理解transformer结构_第2张图片
对于x1乘以 W_Q (变换矩阵)得到q1

得到三个向量 q1,k1,v1之后就可以做一个编码了
Bert---进一步理解transformer结构_第3张图片
接下来,编码词 x1 的语义 z1
z1 = softmax(q1 * k1 , q1 * k2 ) * (v1, v2) 加权求和
query 查询 用来去查询别的向量
key 指被查询的向量
q1 * k2 是指 编码第一个词的时候应该花多少注意力在第2个词身上
value 指这个词真正的语义
通过加权求和下来 可以得到结合上下文的 这个词x1 的语义 z1 。

1.1 与普通attention的对比

Bert---进一步理解transformer结构_第4张图片
可以理解成 普通attention 是self-attention 一种特例。

1.2 通过矩阵形式一次性计算 Q、K 和 V

Bert---进一步理解transformer结构_第5张图片

1.3 实际上在transformer是multi-heads

多个attention(Q、K 和 V)
一个head 可以理解成 一组 变换矩阵 (W_Q,W_K,W_V)
Bert---进一步理解transformer结构_第6张图片
理解: 一组矩阵用来做指代消解,一组矩阵用来关注上下位的,一组用来关注首都-国家对应关系的,
这个变换矩阵是 通过训练数据学习出来的,所以不同的head可以学习到不同的语义关系。
然后得到多组 q、k、v,每一组都可以做一个attention的计算。
transformer原始论文有8个。
所以比如thinking这个单词向量,每一个head都可以编码出三维的向量,每一个考虑某一种上下文的。最后拼成 24维的向量。 看起来有些冗余,所以接着做了一步操作。

  • (24*4)的向量进行压缩,最后得到 4维的向量 z。
    Bert---进一步理解transformer结构_第7张图片

2 transformer另一个内容:位置编码

因为 self-attention是不考虑位置关系的。所以编码下面内容:
北京到上海的机票 上海到北京的机票。 编码后的内容是一样的。
而实际上是不一样的,所以引入了 位置编码。
Bert---进一步理解transformer结构_第8张图片
和之前的改变就是 在word embedding中加入了位置编码(也是训练中学习出来的),位置编码的定义有多种,其中一种是绝对位置编码(gpt、bert使用),还有相对位置编码(transformer原始论文使用)。

3 encoder完整结构

结合之前的讲述,加上残差连接和layernorm,encoder完整结构如下:
Bert---进一步理解transformer结构_第9张图片

4 decoder完整结构

Bert---进一步理解transformer结构_第10张图片
decoder和encoder很像,只不过增加了encoder和decoder之间的普通attention
所以信息流除了 从上往下之外,还会引入 从encoder所有的 最后一个时刻的输出 会引入到 普通的attention里面。

5 decoder mask

decoder另外一个不一样的地方:
decoder不能利用未知信息 mask matrix
解释: 比如在翻译第二个词,可以看第一个词,但不能看第三个词,因为第三个词还没翻译出来。
encoder可以,因为整个句子是直接已知的。
Bert---进一步理解transformer结构_第11张图片
解释:翻译第 i 个词时,可以看前面 i 个词。

6 小结

tranformer 通过 self-attention、 position embedding 解决了 rnn的两个问题:
1) 没办法大量的并行计算的问题,可以看到transformer的层次会很深,6-12-16-24层
2) 双向信息流的问题,transformer 编码时可以通过考虑前面和后面的信息

但是还没有解决一下问题:
对于其他任务(机器翻译除外),没有那么多语料
1) word embedding 无上下文
2) 监督数据太少 (rnn 、lstm这些模型是有上下文的,但是缺少标注的监督数据驱动)

解决办法:
contextual word embedding

  • 无监督
  • 考虑上下文的embedding

7 ELMo

18年提出,比较成功,第一个上下文相关的word embedding。

8 学习资料

https://v.qq.com/x/page/j0855zl9a9r.html

你可能感兴趣的:(算法)