Self-Attention:初步理解

Self-Attention 的基本结构与计算

Attention(注意力)实际上就是权重的另一种应用的称呼,其具体结构与初始输入的 content x1,x2,,xnX 紧密相关。其中, x1,x2,,xn 为维度相同(设为 d,即 xiRd for 1in)的向量。所谓 word embedding,实质是用低维的向量表示物体,但是,表示时需要注意,对于任意两种不同物体的 embedding,若两物体本身有着相似的属性(这个定义可以比较抽象,例如,绿巨人与钢铁侠、在地理上相近的两个物体、相似的声音等等都能称作具有某种相似的属性,具体需要看模型的任务和目的是什么),那么它们的 embedding 向量经过某种计算出来的结果,或 “距离” 需要很近。反之,如果两件物体风马牛不相及,或者在模型中我们极力希望将它们分开,那么它们的 embedding 相计算出的 “距离” 应当很远。

例如,在NLP任务中每个 xi 代表了一个 word embedding(原论文中每个word embedding 的维度 = 512,i.e., d=512)。我们的实际任务是,对于每一个 xi,分别计算其对应的 attention Ai,具体计算方法如下:

对于每一个 word embedding xiRd,分别计算

  • query: qi=xiWQRd
  • key:ki=xiWKRd
  • value:vi=xiWVRd

其中,WQ,WK,WV 分别为 d×d 的参数方阵,那么 qi,ki,vi 皆为 d 维行向量。对于 1in,可以合并写为矩阵形式,i.e.,

Xn×d=( x1  x2  xn )  Qn×d=XWQ=( x1  x2  xn )(|||w1Q,w2Q,,wdQ|||)=( q1  q2  qn )  Kn×d=XWK=( x1  x2  xn )(|||w1K,w2K,,wdK|||)=( k1  k2  kn )  Vn×d=XWV=( x1  x2  xn )(|||w1V,w2V,,wdV|||)=( v1  v2  vn )

如上所示,wiQ,wiK,wiVd×1 的列向量 for 1id

现在,对于 word embedding xi,已求得其对应的qi,ki,vi,因此 xi 的 attention 记作:

Ai(qi,K,V)=i=1nexp(qikiT)j=1nexp(qjkjT)vi

其中,qikiTqjkjT 代表了 query 与 key 的内积,结果为标量。则 Ai(qi,K,V) 的维度与最后乘上的 value vi 相同,即为 1×d 的行向量。由于一共有 n 个 word embedding (1in),对应地,最终也应有 n 个维度为 1×d 的attention。写作矩阵形式为:

A(X)=A(Q,K,V)=softmax(QKTd)V

A(X) 即为 n×d 的矩阵,softmax 定义为:

softmax(zi)=ezij=1nezj

注意,最终式中除以d 的原因是,维度 d 的增大会导致整个向量的方差增大,因此更容易出现极端值(即非常大与非常小的值),使 softmax 的梯度变得极小。

从 Nadaraya–Watson Kernel Regression 到 Attention

Attention 其实就是 Nadaraya–Watson Kernel Regression 在 Deep Learning 中的应用,核心思想完全一致,实际上这种思想在机器学习中随处可见,尤其在非参估计(Non-parametric estimation)中。

线性回归及其衍生(e.g. Lasso, Ridge and etc.)存在的一个缺陷是,如果我们不知道independent variables 与 dependent variables 之间联系的参数形式,那么就无法建立模型并对参数进行估计。因此,Kernel Regression 所解决的便是在没有模型假设的情况下对一个新的 test point x 进行 label 的预测。

一个顺应逻辑的想法是,将新的 test point x 的 local neighborhood X 中所包含的全部 observed data (or training data)的 label 的平均值视为 estimate y^,即:

y^=f(x)=average estimate y of observed data in a local neighborhood X of x

也就是说,对于新的 test data x, 它的 label 可以被估计为邻域中所有已知数据的 label 的平均值。当然,我们对于邻域的选择是灵活的,并且 “平均值” 也只是其中一种估计法。总得来说,我们有 Kernel Regression 的一般式:

y^=fn^(x)=i=1wi(x)yi

其中,wi(x) 为突显 local observation 的权重,定义为:

wi(x)=Kh(x,xi)j=1nKh(x,xj)

对于 Kernel Regression 中 “核” (即kernel,或 localization function) 的选择,一般来说有:

  • Gaussian Kernal: Kh(x,x)=e||xx||2h

  • Box Kernel: Kh(x,x)=I{||xx||h}

  • Triangle Kernel: Kh(x,x)=[1||xx||h]+

Kernel 的选择是灵活的,其本质只是衡量任意 observed data 对一个新数据点的预测值的贡献程度。因此通常满足:对于距待预测数据 x 越近的 xi,所得到的函数结果 Kh(x,xi) 应越大。

到这里我们可以很清晰地发现,attention 就是一个运用了 exponential function 作为 kernel 的权重运算结果。因此,attention 的计算也可以形象地写为:

  • 根据已知数据 xi 与相应的 label yi (1in) ,预测在 x 处的 label yx 即为要查询的 query,xi 即为 key,yi 即为 value,满足:

y=i=1α(x,xi)yiα(x,xi)=k(x,xi)jk(x,xj)

同时,这也揭示了为什么它的名字叫做 “attention(注意力)”,这个注意力就像 Kernel Regression 我们取的 local neighborhood,代表了我们在预测 x 的 label 时,注意力放在了结果权重大的 neighborhood 中,而对于 neighborhood 以外,权重相对很小,因此不需要过分关注。

Attention 结构的意义

现在我们知道:

A(X)=A(Q,K,V)=softmax(QKTd)V

其中 Q=XWQ,K=XWK,V=XWV

我们知道,XWQXWK,XWV 同理) 的本质是将 X 中的各行向量:x1,x2,,xn 变换到 WQ 中以各列向量:w1Q,w2Q,,wdQ为基所表示的向量空间中。所得新矩阵的第 m 列,为 XWQ 的第 m 个基(即 wmQ)上的投影。 那么, 对于公式中分子 QKT,本质上是变换到两个向量空间中的 X 的矩阵相乘,

QKT=XWQ(WK)TXT

从实际意义上可以理解为:

XXT=( x1  x2  xn )(|||x1T,x2T,,xdT|||)

以上的矩阵运算实际上是令 x1,x2,,xn 两两分别做内积(包括与自身),而向量内积:

ab=|a||b|cosθ

其中 θ 为向量 a,b 之间的夹角。因此,内积运算反映了两个向量相似度。当两个向量越相似,即夹角越小,i.e. θ0,cosθ1,导致内积越大,也就是其中一向量越能 “代表” 另一向量,通俗的解释即: “注意力在此处更集中”。

posted @   车天健  阅读(454)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示