自注意力模型 Transformer

  • 开山鼻祖:Attention is All You Need

  • 应用领域

    • NLP 语言模型
    • CV 界新秀
  • 解决问题

    • 输入是一个序列,我们需要调用多个 encoder 来进行编码,同时需要多个 decoder 进行解码

    • encoder 之间结构相同;decoder 之间结构相同;参数各不相同;encoder 与 decoder 结构不同

    • 利用 self attention layer 同时计算出输出结果 (RNN 是分步骤算出来的)

    • 输入序列为 x1,x2,x3,x4x^1, x^2, x^3,x^4 具有一定的联系

    • 将输入子向量分为 q,k,vq,k,v 三个部分向量

      • qq: query 查找,来找到 xx 和相邻几个向量的关系

        • qi=Wqaiq^i = W^q a^i
      • kk: key 向量,作为被查向量提供核心信息

        • ki=Wkaik^i = W^k a^i
      • vv: 抽取出来的数据

        • vi=Wvaiv^i = W^va^i
  • 工作流程

      1. 输入:由 词汇嵌入 (word embedding) 和 位置嵌入 (position embedding) 相加得到
      • 位置嵌入不采用 RNNRNN 的思路

      • RNNRNN 只能一个个字处理,如果输入一句话,就会失去位置效果,机器无法理解

      • 位置嵌入使用的是 cos\cossin\sin 奇数偶数位置间隔的效果

        • 这样借助三角函数和差化积等公式可以将不同位置的字组成线性组合关系
      1. 注意力机制:对于人类而言,看到一张海报,我们看的是“最引人注目”的
      • 公式 Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V

      • 来源是上一步得到的嵌入求和向量

      • 通过乘以 Wq,Wk,WvW^q,W^k,W^v 矩阵获得各自的新矩阵

      • 除以 dk\sqrt{d_k} 避免 QKTQK^T 过大导致梯度消失问题,同时遵守方差为 1

        • dkd_k 表示上一个 KK 矩阵的维度
      • 拿每一个 query 去对每个 key 做 attention

        • 得到一个序列 αi,j\alpha_{i,j}, ii 表示 qq 的值, jj 表示kk 的值

          • $\alpha_{i,j} = \frac{q^i\cdot k^j}{\sqrt{d}} $, ddqqkk 的维度
        • attention 目标: 体现两个向量有多少匹配,输出为分数形式 通过

        • 通过 softmax 层得到 hat 层 αi,j^=expαi,jΣjexpαi,j\hat{\alpha_{i,j}} = \frac{\exp{\alpha_{i,j}}}{\Sigma_j \exp \alpha_{i,j}}

          • 对于每一个 qq 的取值是具有归一性的
        • 获得 中间 b 层 bi=Σjα^i,jvjb^i = \Sigma_j \hat \alpha_{i,j}v^j

          • 对于某一个 query q1q^1 我们只有唯一对应的 b1b^1
          • 如果强迫只考虑 local 的信息,我们可以将其他部分的系数变为 0
        • 如何获得 qq?

          • 已知 [q1,q2,q3,q4]=Wq[a1,a2,a3,a4][q^1,q^2,q^3,q^4] = W^q[a^1,a^2,a^3,a^4], 那么我们可以将这个合成为一个矩阵

          • Q=WqAQ = W^q A , 同理我们也可以获得 KK 的结果

          • 通过组合我们可以获得 bbQ,K,VQ,K,V 的矩阵关系

            • A=KTQsoftmaxA^VA^=OA = K^T Q\Rightarrow softmax \Rightarrow \hat A\Rightarrow V\hat A = O
      • 多个输入导致不同结果 multi-head self-attention

        • 这个时候哦 qi,1q^{i,1} 只和上标后者为 1 的进行计算(计算方法和上面单个的相同),得到 bi,1b^{i,1}
        • 那么我们对于一个 ii 就会形成一个序列 bi,1,,bi,100b^{i,1},\cdots, b^{i,100}
        • 同时我们也可以将这个序列组合成一个数,通过一个矩阵 WOW^O
        • 不同的 bi,jb^{i,j}jj 可以让过程关注不同角度、不同时间,也就是说可以类似于随机森林,三个臭皮匠
      • 经典模型