AI摘要
此内容由 AI 根据文章正文生成,并已由人工审核
Self-Attention的核心是让每个token根据与上下文中其他token的相关性,动态调整自身的向量表示。它通过生成Query、Key和Value,计算Query与所有Key的点积相似度,经Softmax归一化后得到注意力权重,再对Value加权求和,从而融合上下文信息。这一机制使词向量从静态变为动态,例如“苹果”在不同语境中会有不同含义。整个过程可并行矩阵计算,是Transformer高效的关键。
Self-Attention 本质:
每个 token 根据“相关性”动态聚合其它 token 的信息
比如:
苹果很好吃和:
苹果发布了新手机“苹果”的向量应该不同。Attention:就是动态修改 token 表示。
从一句话开始我们用:
小明 喜欢 苹果假设:Token 化后:
[小明] [喜欢] [苹果]Embedding 后:假设每个词变成 4 维向量:
小明 = [1,0,1,0]
喜欢 = [0,1,1,0]
苹果 = [1,1,0,1]注意:这还只是:初始静态向量。
进入 Self-Attention Transformer 不会直接用 embedding。
而是:先生成Q K V
QKV 怎么来的?其实就是:三个线性层(矩阵乘法)
论文里:每个 token:会分别乘
WQ
WK
WV得到:
Q
K
V也就是:
Q = XWQ
K = XWK
V = XWV这里:X:是 embedding。
Q K V 人话理解(最重要)
Query(Q)
“我想找什么?”Key(K)
“我有什么特征?”Value(V)
“我真正携带的信息”真正开始 Attention假设:现在处理
喜欢它的 Query:会去和所有 Key 比较。
也就是:
喜欢Q分别和:
小明K
喜欢K
苹果K做相似度计算。
计算相关性 本质:点积
结果可能:
喜欢 ↔ 小明 = 8
喜欢 ↔ 喜欢 = 5
喜欢 ↔ 苹果 = 7说明:
喜欢 和 小明 关系大
喜欢 和 苹果 关系也大为什么点积能表示“关系”?因为:向量方向相似:点积就大。
比如:
狗 和 猫方向接近。
狗 和 汽车方向差很多。所以:Attention 本质:“语义相关性匹配”
为什么除 √dk?论文专门解释:
因为:维度大时:点积数值会非常大。
比如:
512维点积可能:
100
200
300Softmax 后:
直接:
[0.999999, 0.000001]梯度炸了。
所以:除:√dk让数值稳定。
Softmax 登场
Attention 不是直接用分数。
而是:
Softmax(score)比如:原始:
[8,5,7]变成:
[0.7,0.1,0.2]这就是:注意力权重
意思:
70%关注小明
10%关注自己
20%关注苹果加权求和 Value
也就是:
0.7 × 小明V
+
0.1 × 喜欢V
+
0.2 × 苹果V最终:得到:新的“喜欢”注意:现在:这个“喜欢”:已经不是原始 embedding。
而是:“结合上下文后的喜欢”
这就是:上下文感知(Contextual Representation)
这就是 Transformer 最伟大的地方
以前:词向量:静态
比如 Word2Vec:
苹果 永远是同一个向量Transformer:动态向量
苹果很好吃和:
苹果发布会里面:“苹果” 完全不同。
因为:Attention 动态融合上下文。
Self-Attention 真正流程
输入 Token
↓
Embedding
↓
生成 Q K V
↓
Q 和 K 算相关性
↓
Softmax
↓
得到注意力权重
↓
加权 Value
↓
得到新的 token 表示整个句子一起算
注意:不是:一个词一个词。
Transformer:整句话一起矩阵计算
这里:Q K V:都是矩阵。
为什么 GPU 特别喜欢 Transformer?
因为:全是矩阵乘法
GPU:最擅长:大规模并行矩阵运算
RNN:必须:一步一步
Transformer:整句话一次算完
这就是:AI 爆炸的真正原因之一。
Multi-Head Attention 到底为什么牛?
论文第5页:
单个 Attention:
只能看一种关系。
Multi-Head:
相当于:
多个专家同时分析句子
比如:Head1看:主谓关系 Head2看:时间关系 Head3看:语义关系
Head4看:代词指代
不同 head:真的学出了不同能力。
为什么叫“Self” Attention?
因为:Q K V:都来自:同一句话自己
比如:
小明 喜欢 苹果自己内部互相关注。
所以:叫Self-Attention
Encoder 和 Decoder Attention 区别
Encoder Self-Attention可以看:
全部 token因为输入完整已知。
Decoder Self-Attention必须:Mask 不能偷看未来。
Mask 到底是什么?
比如:生成:
我 爱 北 京预测:
北时:不能看到:
京所以:未来位置:会被
-∞Softmax 后:概率≈0。
这就是:Causal Mask
Attention 动画级流程
假设一句话:
小明 喜欢 苹果第一帧:文字被切成 token
[小明] [喜欢] [苹果]第二帧:每个 token 变成向量
小明 → embedding
喜欢 → embedding
苹果 → embedding第三帧:每个 token 生成三张“身份卡”
Q:我想找谁
K:我有什么特征
V:我真正携带的信息第四帧:以「喜欢」为中心,它会问:
我“喜欢”应该重点看谁?于是它拿自己的 Q 去匹配所有 K:
喜欢Q · 小明K
喜欢Q · 喜欢K
喜欢Q · 苹果K第五帧:得到注意力分数
小明:高
喜欢:低
苹果:高第六帧:Softmax 变成权重
小明:0.45
喜欢:0.10
苹果:0.45第七帧:加权融合 V
新的“喜欢”
=
0.45 × 小明V
+
0.10 × 喜欢V
+
0.45 × 苹果V第八帧:得到上下文后的新向量
喜欢已经不是原来的“喜欢”,而是:
“小明喜欢苹果”语境里的喜欢手算一遍 QKV
我们简化成 2 维向量。输入 X:
小明 = [1, 0]
喜欢 = [0, 1]
苹果 = [1, 1]为了好算,先假设:
WQ = WK = WV = 单位矩阵所以:
Q = K = V = X也就是:
小明 Q/K/V = [1,0]
喜欢 Q/K/V = [0,1]
苹果 Q/K/V = [1,1]现在计算「喜欢」关注谁。「喜欢」的 Q:
[0,1]分别点乘所有 K:
喜欢Q · 小明K = [0,1] · [1,0] = 0
喜欢Q · 喜欢K = [0,1] · [0,1] = 1
喜欢Q · 苹果K = [0,1] · [1,1] = 1得到分数:
[0, 1, 1]假设先不除 √dk,Softmax 后大概是:
[0.16, 0.42, 0.42]意思是:
喜欢 关注 小明:16%
喜欢 关注 喜欢:42%
喜欢 关注 苹果:42%然后加权 V:
新喜欢 =
0.16 × [1,0]
+
0.42 × [0,1]
+
0.42 × [1,1]逐项算:
0.16 × [1,0] = [0.16, 0]
0.42 × [0,1] = [0, 0.42]
0.42 × [1,1] = [0.42, 0.42]相加:
新喜欢 = [0.58, 0.84]原来的「喜欢」是:
[0,1]现在变成:
[0.58,0.84]这说明:Attention 已经把「苹果」的信息融合进了「喜欢」里。这就是“动态语义”。
你先记住一句话 Attention 不是查一个词的意思,而是根据整句话重新改写每个词的向量。
#
1 本文章标题: Self-Attention 本质
2 本文章地址: https://www.yf2029.com/articles/self-attention-%E6%9C%AC%E8%B4%A8
3 本站文章内容仅供学习、交流与界面验证参考,如有版权或引用问题,请联系站点维护者处理。
4 本站不对文中外部链接、第三方资源或读者据此操作产生的结果承担保证责任。
评论
登录后即可发表评论和回复。