从矩阵乘法到核函数:一次对Attention机制的回溯
在线性代数的学习中,我建立的第一个核心认知是:矩阵乘法等于线性变换的复合。
比如我们有两个矩阵 和 ,以及一个向量 ,那么 的含义是,先对 进行 变换,再对结果进行 变换,即:
当我看到自注意力中的 QK^T 时,我的第一反应也是讲这个过程理解为线性变换。
问题的“症结”:Attention中的QK^T
让我们回顾一下自注意力的核心公式:
如果按照“变换复合”的思路,QK^T似乎是想表达“先做一个 变换,再做一个 变换”。但这个解释在维度上和语义上都讲不通。
假设 是 矩阵( 个Query向量), 也是 矩阵( 个Key向量)。那么 是 矩阵。QK^T 的结果是一个 的矩阵。
这 矩阵的物理意义是什么?它显然不是一个“变换”,而是 个Query和 个Key之间的两两相似度。
我们仔细看一下 中第 行第 列的元素 :
这里的 是 的第 行, 是 的第 行。
QK^T 这个矩阵乘法,其目的根本就不是为了“复合变换”,而是用一种批量计算的方式,高效地算出每个 向量与每个 向量的点积(Dot Product),而这里的批量计算,是由硬件来保证的。
这个 矩阵,实际上是“相似度矩阵”或“注意力得分矩阵”。
重新审视Attention:从线性核到非线性核
QK^T 的本质是在计算相似度,而它选择的相似度度量方式,正是点积, 而点积是一种线性核。
所以,原始的自注意力机制 ,本质上是在使用线性核来计算 和 之间的相似度。
现在,我们可以把所有的线索串联起来了。
- 矩阵乘法:可以有两种语义。一种是“变换的复合”(如 ),另一种是“批量相似度计算”(如 )。
- 自注意力:
QK^T采用了第二种语义,即批量计算相似度。 - 线性核:
QK^T所使用的相似度 ,是核函数家族中的“线性核”。 - 核函数:是点积的非线性推广,允许我们在高维(隐式)空间中度量相似性。
那么,一个自然而然的推论是:
我们可以将自注意力中的线性核 ,替换为任意的非线性核 。
这就得到了核化注意力(Kernelized Attention):
其中 是一个 的矩阵,其元素 为 。
这个 可以是更复杂的核,例如:
- 多项式核:
- 高斯核/RBF核:
事实上,近年来一些高效的Transformer变体(如 Performer、Linear Transformer)正是利用了核函数的特性。