1. 自注意力机制 self-attentionSelf-Attention 解决什么想象你在读这句话小明把苹果给了小红她很高兴。问她指的是谁你需要回头看句子找到她和哪个词最相关人脑会自动建立这种联系Self-Attention 就是让模型具备这种回头看并建立联系的能力。具体举个例子走一遍输入句子已转成向量[我] [喜欢] [深度学习]第一步生成 Q、K、V每个词都变出 3 个分身第二步计算相关性注意力分数用点积计算每对词的相关程度第三步Softmax 归一化把每行变成概率每行和为1第四步加权求和生成新表示以喜欢为例它的新向量 结果喜欢这个词现在携带了深度学习的信息可视化流程图Self-Attention 让每个词都能偷看其他所有词并根据重要性加权融合信息从而理解上下文。1. Q,K,V 的理解数学定义注意力计算步骤2 self-attention 中self的理解一个类比开小组会成员A想说我觉得方案X不错↓他在心里问Q谁的意见和我相关↓对比其他三人的专业领域K- 成员B财务专家 → 相似度 0.3- 成员C技术专家 → 相似度 0.8 ✅- 成员D市场专家 → 相似度 0.5↓最终A的发言 融合三人的观点但重点参考C的技术意见V关键每个成员都这样做 → 全员建立了内部关联“self”的精髓不是从外面去找信息而是自己人之间互相找关系传统RNN: A → B → C → D (像传话越来越远越模糊)Self-Attention:A ←→ B ←→ C ←→ D (像开视频会议所有人互相直接交流)↓每个位置都能看到所有位置通过Q去查K加权融合V序列内部自发建立全局关联— 这就是Self-Attention的核心3. softmax的处理归一化 → 变成注意力权重原始分数问题- 数值范围不定可能很大或很小- 无法直接作为权重使用Softmax解决- 压缩到 (0,1) 区间- 所有权重之和 1像概率分布- 大的更大小的更小突出重要信息Softmax把相似度分数变成注意力概率让模型决定我该花多少精力关注每个位置4.位置编码 positional encoding1.为啥需要位置编码Self-Attention 的致命缺陷没有位置概念核心问题Self-Attention 是全连接对称的每个位置都平等地看到其他所有位置 →完全不知道谁在左边、谁在右边就像把一句话的词全部打乱放进袋子模型无法区分猫追老鼠和老鼠追猫2. 位置编码的解决方案原始做法transformer论文加位置信息输入 词向量(a) 位置向量(pe)a1 pe1 ──┐a2 pe2 ──┼──→ Self-Attention → 带位置感知的输出a3 pe3 ──┤a4 pe4 ──┘关键通过正弦/余弦函数生成位置编码让模型学习距离和相对位置3.现在的主流方案# RoPE (Rotary Position Embedding) - 目前最流行# 不直接加而是通过旋转Query和Key来注入位置信息def apply_rope(q, k, pos):# 把q,k在复数空间旋转角度pos*θ# 这样 q·k 自然带有相对位置信息return rotate(q, pos), rotate(k, pos)位置编码不重要 那种手工设计的正弦函数不重要了位置信息很重要 模型必须知道词的顺序只是现在用更好的方式如RoPE来实现以前纸质地图 指南针正弦PE现在GPS实时定位RoPE但知道自己在哪这件事永远重要2. Multi-Head Attention上一小节的selfhead attention可以看作是single head attention。案件有4个嫌疑人a1, a2, a3, a4每个嫌疑人有512个特征指纹、DNA、证词、监控...8个侦探分工- 侦探1Head 1只看前64个特征指纹相关- 侦探2Head 2只看第65-128个特征DNA相关- 侦探3Head 3只看第129-192个特征证词相关...- 侦探8Head 8只看最后64个特征监控相关每个侦探都要1. 分析4个嫌疑人全部a2. 但只用自己负责的64个特征部分qkv3. 独立判断谁和谁有关联内部做attention4. 最后8个侦探开会综合所有角度拼接输出1.第一步骤输入 → a1, a2, ..., amm个词生成QKV → 每个a乘W1,W2,W3得q,k,v完整512维切分 → 每个q,k,v切成h份每份64维分头 → 每个head拿全部m个词的部分qkv并行计算 → h个头各自做attention拼接 → 合并所有头的输出同一个W不同的a → 不同的qkv → 切开分头 → 并行计算 → 拼回输出2.第二步骤之后将b1--bm *w 做一个全连接得到新的b1-bm每个head内部做attention得到b最后把所有head的b融合每个head独立算attention得b → 所有head的b拼接 → 融合成最终输出最后得到的b是啥b 每个词的新表示融合了上下文信息具体的解释举例b₁ 0.245×v¹ 0.015×v² 0.245×v³ 0.496×v⁴↑ ↑ ↑ ↑我的value 喜欢的value 深度的value 学习的value×0.245 ×0.015 ×0.245 ×0.496↑ ↑ ↑ ↑注意力权重 注意力权重 注意力权重 注意力权重最高一句话总结b 每个词读完整个句子后的新理解不是关联度价值而是关联度注意力权重决定怎么混合价值v是被混合的原料b是混合后的最终产品新的词向量看到我时你会自动联系后面的学习b₁ 就是我这个词在你大脑里的新印象带上下文的那种3. 第三步骤 concat拼接Head 1 输出[b₁₁, b₂₁, b₃₁, b₄₁] → 形状 [4, 64]Head 2 输出[b₁₂, b₂₂, b₃₂, b₄₂] → 形状 [4, 64]...Head 8 输出[b₁₈, b₂₈, b₃₈, b₄₈] → 形状 [4, 64]拼接方式横着拼特征维度拼接[b₁₁ | b₁₂ | b₁₃ | ... | b₁₈] → b₁ 的新向量512维[b₂₁ | b₂₂ | b₂₃ | ... | b₂₈] → b₂ 的新向量512维[b₃₁ | b₃₂ | b₃₃ | ... | b₃₈] → b₃ 的新向量512维[b₄₁ | b₄₂ | b₄₃ | ... | b₄₈] → b₄ 的新向量512维结果[4, 64×8] [4, 512]为啥要这样拼接横着拼特征维度→ 保留所有head的信息→ 再投影让模型学习组合 → 得到更丰富的表示8个专家写报告 → 把8份报告订在一起 → 领导看全部再综合决策