为什么要手写呢,因为我看人家做的视频风格好可爱,我也想试试,虽然我写完以后感觉不怎么样。不过写都写了,就发出来吧。

什么是Attention?

既然要讲attention,那肯定得介绍一下attention。
深度学习里经常说的attention是什么呢?我就不讲那些能百度到概念了,就大白话简单给大家举个例子。
IMG_20211208_224548.jpg
上边这一排块块,你肉眼去看,最先注意到哪一个?不出意外正常人最先看到的应该是●,而忽略掉■。
那我现在跟你说让你进去找最细长的长方形块块,那你肯定是找到倒数第二个■。

现在给几个专业术语:

  • 上边那一排块块我们称之为环境(value)
  • 随意扫过去一眼,不用特别注意哪一个,你直接能看到最显眼的那个称之为不随意线索(key)
  • 告诉你要进去找最接近长方形的块块,你会有意地去看哪个是细长长方形,这种有意寻找的条件就叫随意线索(query)

注意: 比较拗口哦,名叫“随意”却并不随意,这里的随意指的是“跟随主观意志”。

Attention图解

画的不好,凑合看一下子下图。(我以后还是用软件画,不要搞这么些吃力不讨好的东西。)

环境和不随意线索是作为键值对key-value存在的。value作为用户的输入。如果中间的attention池化层不存在的话,左边 $x_i$ 直接到右边的 $y_i$ ,挑选的肯定是特征最强的那个元素作为输出。

现在在其中加入一个query。将其进行attention池化。受到query的影响,选择 $y_i$ 的时候偏向可能会发生变化。

IMG_20211208_222135.jpg

推导

  • 从上边图我们可以找到一个范式。
    QQ截图20211208223810.png
    $f(x) = \sum_{i=1}^n \alpha(x, x_i) y_i$
    就是对$x$和$x_i$进行一顿$\alpha$操作,然后再和输入$y_i$运算,得到最终的输出。

  • Nadaraya和Waston提出了一个好想法,根据输入的位置对输出 $y_i$ 进行加权:
    QQ截图20211208223804.png
    $f(x) = \sum_{i=1}^n \frac{K(x - xi)}{\sum{j=1}^n K(x - x_j)} y_i$

    • 其中 $K$ 是 (kernel)。上边这个式子也被称为Nadaraya-Watson 核回归(Nadaraya-Watson kernel regression)。
    • 在这里这个核函数用一下高斯核(Gaussian kernel),其定义为:
      QQ截图20211208223921.png
      $K(u) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{u^2}{2})$
  • 把高斯核带入Nadaraya-Watson 核回归可得:
    QQ截图20211208224226.png
    $f(x)= \sum_{i=1}^n \frac{\exp\left(-\frac{1}{2}(x - xi)^2\right)}{\sum{j=1}^n \exp\left(-\frac{1}{2}(x - x_j)^2\right)} y_i$

    • 看着中间这一块有没有眼熟?
      QQ截图20211208224226.png
    • 没错,就是softmax
      QQ截图20211208223824.png
      $\hat{y}{i}=\operatorname{softmax}\left(O{i}\right)$
      $\hat{y}{i}=\frac{\exp \left(O{i}\right)}{\sum{j} \exp \left(O{j}\right)}$
  • 带入softmax回归之后:
    QQ截图20211208223938.png
    $f(x)=\sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}(x - x_i)^2\right) y_i$

总结

将上边三个式子归纳到一起:

$$\begin{aligned} f(x) &=\sum_{i=1}^n \alpha(x, x_i) yi\ &= \sum{i=1}^n \frac{\exp\left(-\frac{1}{2}(x - xi)^2\right)}{\sum{j=1}^n \exp\left(-\frac{1}{2}(x - x_j)^2\right)} yi \&= \sum{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}(x - x_i)^2\right) y_i. \end{aligned}$$

使用高斯核来对查询和键之间的关系建模。可以将上式中的高斯核的指数部分视为注意力评分函数(attention scoring function),简称评分函数(scoring function),然后把这个函数的输出结果输入到 softmax 函数中进行运算。通过上述步骤,我们将得到与键对应的值的概率分布(即注意力权重)。最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。
image.png


最后附一个演算纸图吧。

IMG_20211208_222212.jpg