NLP&NLU

transformer笔记

2020-02-18  本文已影响0人  柴柴总

transoformer结构是大名鼎鼎的论文《attention is all you need》提出的,基于seq2seq的encoder deconder框架,其创新之处在于放弃了RNN结构,由于每个位置的attention计算都是相对独立的,因此其方便GPU并行计算,加快训练速度

图1 transformer的总体结构 图来自原论文 attention is all you need
左边的红框框起来的部分是encoder,右边红框是decoder,把encoder和decoder都看成一个整体忽略里面的计算就得到了下面的图
简化版transformer

一个大的encoder里实际上包含了几个encoder,decoder也是同理,论文中使用了6个encoder
encoder结构
每个encoder里实际包含两个子层,全连接网络和自注意力,注意6个encoder的权重并不共享
当encoder和decoder都只有一个时transformer长这样

在宏观上self attention可以理解为对输入x1,x2进行信息的杂糅,得到z1,z2
self attention的具体计算过程
self attention是将输入,的向量转化为向量,。
首先要把转化为三个向量,,,要通过转化一个向量为另一个向量可通过向量乘矩阵(,,是向量,是矩阵),上图中, ,,同理,可以看到,和分享同一个,通过共享权重,,实际上已经做了信息交换,得到了,,(1<=t<=单词个数)之后上图的右半部分展示了接下来的计算,依旧以的计算过程为例

假设

对这两个结果除以 论文中,,指向量(1<=t<=单词个数)
那么分别得到 14,12,将这两个值经过softmax,得到0.88,0.12,这就是和的值


上述计算过程,把所有向量写成矩阵的形式,就变成了如下的等式

再扩展一下,对所有集合——矩阵

矩阵形式
多头注意力(multi attention)
产生多个不同的Q K V, 不同的QKV会产生不同的Z,将其全部拼接起来再乘一个矩阵(训练过程更新参数)得到最终的Z

这就是self attention所做的

decoder部分比encoder多了一层Encoder decoder attention
在encoder decoder attention 层中,k,v的计算来自encoder的部分的输出(用m表示),即,

参考资料

  1. 贪心学院直播课 transformer
  2. https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/
  3. https://blog.csdn.net/qq_37212752/article/details/87713815
  4. https://www.jianshu.com/p/5bd1ff4f71b0
上一篇下一篇

猜你喜欢

热点阅读