论文解读8——Attention Is All You Need

目录

  • 1、文章贡献
  • 2、attention机制
    • 2.1 self-attention
    • 2.2 multi-head attention
  • 3、transformer

论文解读8——Attention Is All You Need_第1张图片

在上篇GAT中attention机制功不可没,也是在那篇中发现不是很懂注意力机制背后的运算,于是找了这篇原文,后来发现……其实原文中的attention写的也是云里雾里—_—

推荐b站李宏毅老师讲解的注意力机制,对小白非常友好,听完真的醍醐灌顶,再推荐一篇总结的很到位的attention详解:https://blog.csdn.net/qq_37541097/article/details/117691873
感觉明白了一大半,回头再去看这篇原文,曾经被吃掉的脑子又回来了
没办法真的太菜理解一篇文献还是那么艰难(在努力了)—_—

1、文章贡献

提出了一个完全基于注意力机制的网络结构 transformer 来处理序列相关问题,跟以往不同,没有用到CNN和RNN的结构,将 encoder-decoder 中的循环层替换成了multi-head attention机制,且能够实现并行化操作提高模型效率。

下面就只写一写有关模型结构的理解,其余实验的部分就不讲了

2、attention机制

2.1 self-attention

文中用的是点乘形式的self-attention

  • 假设有2个输入特征 x1 和 x2,通过input embedding转化成向量 a1 和 a2
  • 对a1和a2分别通过Wq、Wk、Wv矩阵线性映射成query、key、value(对应图中q、k、v),其中每个query负责跟其他节点(包括自己)的key值进行匹配(就是相乘得到一个系数);每个key来被query匹配;每个value代表从a向量中提取的信息
  • 将每个query跟其他节点(包括自己)的key相乘,即计算出其他节点与该节点的重要性系数α
  • 将上步算出的α值除以根号dk后经过softmax得到归一化后的α’ (dk代表向量k的长度,除以dk是防止qk相乘后的值太大输入softmax中会很小)
  • 将每个 α’ 乘上之前提取的特征value求和后便得到论文中写的 self-attention公式
    论文解读8——Attention Is All You Need_第2张图片

2.2 multi-head attention

多头注意力机制主要是通过聚合独立的不同的head来学习信息,和self-attention区别是在生成query后

  • 也是假设有2个输入特征,此外多头的head也以2个为例
  • 在生成query、key、value后,多头注意力机制主要是考虑到不同的线性映射计算出的不同相关性可能会有更好的效果,于是根据head的不同要求数再次分别用k个不同的线性映射生成k个query、k个key、k个value(图上只画了2个)
  • 后面的操作和self-attention类似,对应的qk相乘生成系数α(这里每次考虑的q、k、v下标1、2分开计算,即q11和k11相乘的时候无需考虑q12和k12,因为算的是不同的head)
  • 最后将算出的head拼接起来通过一个线性映射就能得到论文中给出的两行multi-head公式(就这么两行……)
    论文解读8——Attention Is All You Need_第3张图片

3、transformer

模型整体结构是由 encoder 和 decoder 组成

  • 首先考虑 encoder
  • 将输入特征通过input embedding向量化后,通过一个positional encoding进行位置编码(主要是因为模型中没有循环层和卷积层,输入特征之间是并行的,也就没有顺序可言,然而有些序列需要考虑顺序比如语句)
  • 位置编码后的向量通过多头注意力机制,同时加上了残差连接,通过layer norm标准化后作为前馈全连接层的输入
  • 前馈层中加入残差连接后通过layer norm就得到encoder模块的一个输出
  • 其次是decoder
  • decoder结构比encoder多的地方无非是第一个多头机制后的masked以及中间那两层混合输入的多头机制
  • 先说masked,它的作用像是在进行解码的时候遮住了后面顺序的向量,只考虑前面已经出现的特征(因为解码的时候是一个一个输出的,在解前面特征的时候没有办法把后面未解码的部分考虑进来,这和encoder不一样)
  • 再看中间那一块,多头机制输入的三个箭头里,左边两个输入来自encoder的输出,最右边的输入由decoder自己提供(用decoder产生的query来匹配encoder中产生的key和value得到输出)
  • 最后通过线性层和softmax得到decoder模块的输出
    论文解读8——Attention Is All You Need_第4张图片

你可能感兴趣的:(论文解读,深度学习,人工智能,神经网络)