本文属于《动手学深度学习》的白话解析笔记。
不带参数的nadaraya-waston核回归
在讲什么是nadaraya-waston核回归之前先来简单回顾一下attention。
简单来说就是key-value键值对作为输入,现在有一个query,跟你的key经过一顿操作之后就将重心放到了你的某个value值上了。也就是经过注意力池化的计算之后将注意力汇聚到某一处了。
那怎么能做到这一点呢?早在1964年,Nadaraya和 Waston就提出了一个公式:
$$
f(x) = \sum_{i=1}^n \frac{K(x - xi)}{\sum{j=1}^n K(x - x_j)} y_i
$$
其中的$K$就是一个核,学过SVM(支持向量机)的应该知道,它是可以计算$x$和$x_i$之间的距离的一个函数。(换言之你可以选择不同的核来计算二者之间的距离。)
在这里我们选定一个计算方法——高斯核:
$$
K(u) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{u^2}{2})
$$
带入上边的公式:
$$
\begin{aligned} 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 \end{aligned}
$$
看着上边的公式有没有那么一丝丝的眼熟。没错就是softmax。
$$
\hat{\mathbf{y}} = \mathrm{softmax}(\mathbf{o})\quad \text{其中}\quad \hat{y}_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)}
$$
当用$o$进行softmax计算$\hat y$时,就等于当前的$o$求幂,再用结果除以所有$o$求幂之后的总和。这样可以确保输出非负的同时确保结果总和为1。
现在我们上边的式子中的$-\frac{1}{2}(x - x_i)^2$就等价与softmax中的$o$,所以上边的公式就可以转化为:
$$
\begin{aligned} f(x) &= \sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}(x - x_i)^2\right) y_i. \end{aligned}
$$
- 在这里$x$就相当于attention中的query。
- $x_i$相当于attention中的key。
- $y_i$相当于attention中的value。
带参数的nadaraya-waston核回归
你以为上边就完了么!没有!因为上边那个方法只有在数据量足够大的时候才能达到比较好的效果。并且这个和我们平时学的不一样啊。参数呢!$w$呢! 作为优秀的炼丹人员,不学参数的模型不是好模型(我的谬论),所以我们得让他学参数!
$$
\begin{aligned}f(x) &= \sum_{i=1}^n \frac{\exp\left(-\frac{1}{2}((x - xi)w)^2\right)}{\sum{j=1}^n \exp\left(-\frac{1}{2}((x - x_i)w)^2\right)} y_i\end{aligned}
$$
给计算核加上一个参数即可$w$即可。之前说了softmax是对高斯核做求幂之后再除总和,所以在给高斯核并列加一个$w$,即给求幂函数内部加上一个$w$。
$$
\begin{aligned}f(x) &= \sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}((x - x_i)w)^2\right) y_i.\end{aligned}
$$
总结
- attention pooling(注意力汇聚、注意力池化)的作用就是根据$x$的位置对$y$进行加权。
- 从Nadaraya-Watson 核回归的注意力池化例子可以知道,注意力汇聚可以分为非参数型和带参数型,并且那个核我们可以根据实际需求进行选择。