动手学习深度学习(23)自注意力机制(self attention)

茴香豆 Lv5

在深度学习中,经常使用CNN或RNN对序列进行编码。使用注意力机制之后,每个查询都会关注所有键值对并生成一个注意力输出。由于查询、键、值来自同一组输入,因此被称为自注意力。自注意力适合处理长文本,但是复杂度相对会更高。

  • 给定序列 x_1,...,x_n, \forall x_i \in \mathbb{R}^d
  • 自注意力池化层将 x_i 当作key,value,query来对序列抽取特征得到 y_1,...,y_n ,这里 y_i=f(x_i,(x_1,x_1),...,(x_n,x_n)) \in \mathbb{R}^d

位置编码

  • 跟CNN/RNN不同,自注意力并没有记录位置信息。

  • 位置编码讲位置信息注入到输入里,使得自注意力能够记忆位置信息。假设长度为 n 的序列是 X\in \mathbb{R}^{n \times d} ,那么使用位置编码矩阵 P\in \mathbb{R}^{n \times d} 来输出 X + P 作为自编码输入。

  • P 的元素如下计算:

    p_{i,2j} = sin(\frac{i}{10000^{2j/d}}), p_{i,2j+1} = cos(\frac{i}{10000^{2j/d}})

计算过程

计算过程如下:需要学习的参数为 W^q,W^k,W^v

A矩阵中存储的即为attention的分数,A‘为attention matrix

计算输出O

  • Title: 动手学习深度学习(23)自注意力机制(self attention)
  • Author: 茴香豆
  • Created at : 2023-02-13 15:37:21
  • Updated at : 2023-02-15 16:03:50
  • Link: https://hxiangdou.github.io/2023/02/13/DL_23/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
动手学习深度学习(23)自注意力机制(self attention)