文章目录
一、自注意力机制本质是一种动态权重分配机制
对于序列中的每个词元,自注意力会根据 “词元间的语义相关性”,为其他词元分配不同的权重,最终通过加权求和生成该词元的上下文感知表示。
二、如何计算权重
自注意力权重的计算依赖三个关键向量 ——Query(查询,Q)、Key(键,K)、Value(值,V),这三个向量共同构成了 “语义匹配 - 信息提取” 的逻辑,类比于信息检索:
-
Query:当前词元的检索需求,即 “我想找和我相关的信息”;
-
Key:所有词元的信息标签,用于与 Query 匹配,判断 “我是否符合你的需求”;
-
Value:所有词元的具体信息内容,当 Key 与 Query 匹配时,Value 会被赋予相应权重并参与最终计算。
以神经网络生成特征向量的方式得到 Q、K、V
大家都说 Q、K、V 由输入序列的嵌入表示(Embedding)通过线性变换生成,其实就是神经网络全连接层计算特征向量:
Q = X ⋅ W Q Q = X \cdot W_Q Q=X⋅WQ
K = X ⋅ W K K = X \cdot W_K K=X⋅WK
V = X ⋅ W V V = X \cdot W_V V=X⋅WV
如下图“Thinking Machines”(输入序列长度为 2)的例子所示, X 1 X_1 X1与左侧 W Q W_Q WQ做矩阵运算了就得到 q 1 q_1 q1, X 2 X_2 X2与左侧 W Q W_Q WQ做矩阵运算了就得到 q 2 q_2 q2, k , v k,v k,v同理。
而这里的 W Q W_Q WQ、 W K W_K WK、 W V W_V WV都是神经网络中全连接层的可学习参数,通过反向传播进行更新。
三、自注意力的完整计算流程:四步生成上下文表示
步骤 1:计算注意力分数(语义匹配度)
注意力分数用于衡量 “当前词元的 Query 与其他词元的 Key 的匹配程度”,计算方式为Query 与 Key 的点积:
S c o r e ( q i , k j ) = q i ⋅ k j T Score(q_i, k_j) = q_i \cdot k_j^T Score(qi,kj)=qi⋅kjT
注意先不要深究为什么有效,这里是不是已经计算得出了一个值!!!而论文为了使这个值有意义,就说当前词元的 Query 与其他词元的 Key (自注意力的话其他词元就是自己)的匹配程度。【出于这个值要表示匹配程度的思想,后续进行了步骤二分数缩放和步骤三softmax转为概率值的操作】
对 “Thinking Machines” 序列:
-
第 1 个词元 “Thinking” 的 Query 向量 q 1 q_1 q1与自身 Key 向量 k 1 k_1 k1点积: q 1 ⋅ k 1 q_1 \cdot k_1 q1⋅k1;
-
第 1 个词元 “Thinking” 的 Query 向量 q 1 q_1 q1与第 2 个词元 “Machines” 的 Key 向量 k 2 k_2 k2点积: q 1 ⋅ k 2 q_1 \cdot k_2 q1⋅k2;
步骤 2:分数缩放(Scaling)
为避免 Q/K 维度 d k d_k dk过大导致点积结果数值过大,进而使 Softmax 函数进入 “梯度消失区域”(Softmax 对大数值敏感,输出会趋近于 0 或 1,梯度接近 0),需对分数进行缩放:
S c a l e d _ S c o r e = S c o r e ( q i , k j ) d k Scaled\_Score = \frac{Score(q_i, k_j)}{\sqrt{d_k}} Scaled_Score=dkScore(qi,kj)
对 “Thinking Machines” 的分数缩放后:
* 112 / 8 = 14 112 / 8 = 14 112/8=14, 96 / 8 = 12 96 / 8 = 12 96/8=12;
- 缩放后的分数矩阵为 [ 14 12 ] \begin{bmatrix} 14 & 12 \end{bmatrix} [1412](仅展示 “Thinking” 对其他词元的分数)。
步骤 3:Softmax 归一化(权重分配)
通过 Softmax 函数将缩放后的分数转换为 “注意力权重”,确保权重总和为 1,且数值越大表示该词元对当前词元的贡献越大:
对 “Thinking” 的缩放分数进行 Softmax:
S o f t m a x ( 14 , 12 ) = ( e 14 e 14 + e 12 , e 12 e 14 + e 12 ) ≈ ( 0.88 , 0.12 ) Softmax(14, 12) = \left( \frac{e^{14}}{e^{14}+e^{12}}, \frac{e^{12}}{e^{14}+e^{12}} \right) \approx (0.88, 0.12) Softmax(14,12)=(e14+e12e14,e14+e12e12)≈(0.88,0.12)
步骤 4:加权求和(生成上下文表示)
将注意力权重与对应的 Value 向量相乘,再求和,得到当前词元的自注意力输出(包含全局上下文信息的特征向量):
其中 v j v_j vj是第 j j j个词元的 Value 向量。
对 “Thinking” 这个词元,自注意力的输出结果:
A t t e n t i o n _ O u t p u t ( 1 ) = 0.88 ⋅ v 1 + 0.12 ⋅ v 2 Attention\_Output(1) = 0.88 \cdot v_1 + 0.12 \cdot v_2 Attention_Output(1)=0.88⋅v1+0.12⋅v2