白话图解attention | 手动推导 | 恩,我居然手写的 #yyds干货盘点#

Posted LolitaAnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了白话图解attention | 手动推导 | 恩,我居然手写的 #yyds干货盘点#相关的知识,希望对你有一定的参考价值。

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

什么是Attention?

既然要讲attention,那肯定得介绍一下attention。
深度学习里经常说的attention是什么呢?我就不讲那些能百度到概念了,就大白话简单给大家举个例子。

上边这一排块块,你肉眼去看,最先注意到哪一个?不出意外正常人最先看到的应该是●,而忽略掉■。
那我现在跟你说让你进去找最细长的长方形块块,那你肯定是找到倒数第二个■。

现在给几个专业术语:

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

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

Attention图解

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

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

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

推导

  • 从上边图我们可以找到一个范式。

    $f(x) = \\sum_{i=1}^n \\alpha(x, x_i) y_i$
    就是对$x$和$x_i$进行一顿$\\alpha$操作,然后再和输入$y_i$运算,得到最终的输出。

  • Nadaraya和Waston提出了一个好想法,根据输入的位置对输出 $y_i$ 进行加权:

    $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),其定义为:

      $K(u) = \\frac{1}{\\sqrt{2\\pi}} \\exp(-\\frac{u^2}{2})$
  • 把高斯核带入Nadaraya-Watson 核回归可得:

    $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$

    • 看着中间这一块有没有眼熟?
    • 没错,就是softmax

      $\\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回归之后:

    $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 函数中进行运算。通过上述步骤,我们将得到与键对应的值的概率分布(即注意力权重)。最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。


最后附一个演算纸图吧。

以上是关于白话图解attention | 手动推导 | 恩,我居然手写的 #yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章

超详细图解Self-Attention的那些事儿

分享《白话大数据与机器学习》PDF+《图解机器学习》PDF

分享《白话大数据与机器学习》PDF+《图解机器学习》PDF

分享《白话大数据与机器学习》PDF+《图解机器学习》PDF+高杨 许永伟

翻译: 详细图解Transformer多头自注意力机制 Attention Is All You Need

翻译: 详细图解Transformer多头自注意力机制 Attention Is All You Need