Self-Attention 完整推导
分类: 注意力与Transformer · 难度: 中级 · 关联讲座: L05
Self-Attention 完整推导
本文从 Seq2Seq 注意力出发,完整推导 Self-Attention 的三步计算流程(打分→归一化→加权求和),再推进到 Transformer 中 Query-Key-Value 框架下的缩放点积注意力公式 Attention(Q,K,V),包含缩放因子 1/dk 的方差分析、完整的形状追踪和计算复杂度。
1. 三步注意力计算
📐 三步注意力计算:完整推导
变量定义:
- st∈Rd = decoder 在时间步 t 的隐状态(Query)
- hi∈Rd = encoder 第 i 个位置的隐状态(Key/Value)
- H=[h1,…,hn]∈Rd×n = 所有 encoder 隐状态
- ei∈R = 第 i 个位置的注意力分数(标量)
- α∈Rn = 注意力权重向量(概率分布)
- at∈Rd = 注意力输出(加权上下文向量)
推导过程:
第 1 步:计算注意力分数(三种等价变体)
点积注意力(Luong et al., 2015):
ei=stThi
缩放点积注意力(Vaswani et al., 2017):
ei=dstThi
缩放原因:stThi 的期望方差为 d(若 st,hi 各分量 i.i.d. 均值0方差1),d 缩放将方差归一化为1。
加性注意力(Bahdanau et al., 2015):
ei=vTtanh(W1hi+W2st),v∈Rda,W1,W2∈Rda×d
参数 v,W1,W2 通过反向传播学习,表达能力更强但参数更多。
第 2 步:Softmax 归一化
将 n 个原始分数归一化为概率分布:
αi=∑j=1nexp(ej)exp(ei),α∈Rn,∑i=1nαi=1,αi≥0
矩阵形式:α=softmax(e)
第 3 步:加权求和得上下文向量
at=∑i=1nαihi=Hα∈Rd
最终将 at 与 st 拼接,送入输出层:s~t=tanh(Wc[at;st]),用于预测 yt。
2. Attention(Q, K, V) 公式
📐 Attention(Q, K, V):完整推导
变量定义:
- X∈Rn×dmodel = 输入矩阵(序列长度 n,每个位置 dmodel 维)
- WQ∈Rdmodel×dk = Query 投影矩阵
- WK∈Rdmodel×dk = Key 投影矩阵
- WV∈Rdmodel×dv = Value 投影矩阵
- Q=XWQ∈Rn×dk,K=XWK∈Rn×dk,V=XWV∈Rn×dv
推导过程:
第 1 步:线性投影
每个输入向量 xi∈Rdmodel 通过三个独立线性变换得到 Q/K/V:
qi=xiWQ,ki=xiWK,vi=xiWV
矩阵形式同时处理所有位置:Q=XWQ,K=XWK,V=XWV
第 2 步:计算相似度矩阵
计算所有 Query 与所有 Key 的点积,得到 n×n 注意力分数矩阵:
E=QKT∈Rn×n,Eij=qiTkj
Eij 表示位置 i 对位置 j 的原始注意力分数。
第 3 步:缩放(关键步骤)
为什么需要除以 dk?
设 qi,kj 的各分量 i.i.d.,均值 0,方差 1,则:
Var(qiTkj)=Var(∑l=1dkqilkjl)=∑l=1dkVar(qil)⋅Var(kjl)=dk
所以 qiTkj 的标准差为 dk。不缩放时,dk 较大(如 64)的分数会使 softmax 饱和在接近独热分布的区域,梯度近乎为零。缩放后方差归一化为 1:
E~=dkQKT
第 4 步:Softmax 按行归一化
A=softmax(dkQKT)∈Rn×n
按行归一化:Aij=∑l=1nexp(E~il)exp(E~ij),每行之和为 1。
Aij 是位置 i 分配给位置 j 的注意力权重。
第 5 步:加权求和 Value 得输出
O=AV∈Rn×dv,Oi=∑j=1nAijvj
位置 i 的输出是所有位置 Value 向量按注意力权重的加权平均。
完整公式:
Attention(Q,K,V)=softmax(dkQKT)V
形状追踪(务必熟练):
| 矩阵 | 形状 | 说明 |
|---|
| Q | (n×dk) | |
| KT | (dk×n) | |
| QKT | (n×n) | 注意力矩阵,与序列长度平方成正比 |
| A=softmax(⋅) | (n×n) | 行归一化概率矩阵 |
| V | (n×dv) | |
| O=AV | (n×dv) | 最终输出 |
计算复杂度:
- QKT:(n×dk)⋅(dk×n)⇒O(n2dk)
- AV:(n×n)⋅(n×dv)⇒O(n2dv)
- 总:O(n2d)(n2 是瓶颈)