Skip to content

注意力机制与 Transformer ​

注意力机制 ​

鸡尾酒会效应 ​

当一个人在吵闹的鸡尾酒会上和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而忽略其他人的声音。

同时,如果未注意到的背景声中有重要的词(比如他的名字),他会马上注意到。

如何实现 ​

  • 自下而上 — 汇聚(pooling)
  • 自上而下 — 会聚(focus)

人工神经网络中的注意力机制 ​

注意力模型 ​

软性注意力机制(soft attention mechanism) ​

按照概率混合所有词

  1. 计算注意力分布 α:
αn=p(z=n|X,q)=softmax(s(xn,q))=exp⁡(s(xn,q))∑j=1Nexp⁡(s(xj,q))

其中 s(xn,q) 为打分函数。

  1. 根据 α 来计算输入信息的加权平均:
att(X,q)=∑n=1Nαnxn=Ez∼p(z|X,q)[xz]

注意力打分函数 s(x,q):

模型打分函数
加性模型s(x,q)=vTtanh⁡(Wx+Uq)
点积模型s(x,q)=xTq
缩放点积模型s(x,q)=xTqD
双线性模型s(x,q)=xTWq

注意力机制的变体 ​

  • 硬性注意力(hard attention)
  • 键值对注意力(key-value pair attention)
    • 用 (K,V)=[(k1,v1),⋯,(kN,vN)] 表示 N 个输入信息
    • att((K,V),q)=∑n=1Nαnvn=∑n=1Nexp⁡(s(kn,q))∑jexp⁡(s(kj,q))vn
  • 多头注意力(multi-head attention)
    • 用多个查询 Q 并行输出多组信息
    • att((K,V),Q)=att((K,V),q1)⊕⋯⊕att((K,V),qM)
  • 结构化注意力(structural attention)
    • 层次化注意力
  • 指针网络(pointer network)
    • 我们可以只利用注意力机制中的第一步,将注意力分布作为一个软性的指针(pointer)来指出相关信息的位置。

自注意力模型 ​

输入序列为 X=[x1,⋯,xN]∈RDx×N

  • 首先生成三个向量序列:
    • Q=WqX∈Rdk×N
    • K=WkX∈Rdk×N
    • V=WvX∈Rdv×N
  • 计算 hn:hn=att((K,V),qn)
  • 如果使用缩放点积来作为注意力打分函数,输出向量序列可以简写为:
H=V⋅softmax(KTQDk)

qkv

你可以尝试用自注意力机制取代 RNN 所做的任何任务。

Transformer Encoder ​

除了自注意力机制还用到了:

位置编码 ​

Positional Encoding

PE(pos,2i)=sin⁡(pos/100002i/d)PE(pos,2i+1)=cos⁡(pos/100002i/d)

层归一化 ​

Add & Norm:

LayerNorm(X+MultiHeadAttention(X))LayerNorm(X+FeedForward(X))
  • Add — 残差连接
  • Norm — 将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛

Transformer-Decoder ​

Masked 多头注意力机制,在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。

复杂度分析 ​

模型每层复杂度序列操作数最大路径长度
CNNO(kLd2)O(1)O(logk⁡(L))
RNNO(Ld2)O(L)O(L)
TransformerO(L2d)O(1)O(1)
  • k:卷积核大小
  • L:序列长度
  • d:维度

fc