尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Transformer注意力机制公式图解:从缩放点积到多头注意力

Transformer注意力机制公式图解:从缩放点积到多头注意力 注意力的核心可以概括为用 Query 和 Key 计算“该关注谁”再用得到的权重对 Value 加权求和。1. Q、K、V 分别在做什么可以先把一个位置上的三个向量理解为Query查询当前位置想寻找什么信息Key键每个位置用什么特征参与匹配Value值该位置真正提供给输出的内容。1.1 为什么 Q、K、V 能承担这些角色Q 并不是天然的“问题”K 也不是天然的“关键信息”。它们的名称来自各自在计算中的作用对当前位置 i模型用 qᵢ 与每个位置 j 的 kⱼ 做点积得到匹配分数分数越高表示当前位置 i 越应该从位置 j 获取信息分数经过缩放和 Softmax 变成权重再用这些权重汇总各位置的 vⱼ。因此qᵢ 承担的是“发起匹配”的角色kⱼ 承担的是“接受匹配”的角色vⱼ 承担的是“传递内容”的角色。QKᵀ 本身不是凭空产生了注意力含义它只是一次性算出所有 Query 与所有 Key 的两两点积这些点积经过缩放、Mask 和 Softmax 后才成为真正用于汇总 Value 的注意力权重。在自注意力中Q、K、V 都由同一输入经过三组不同的线性投影得到。网络结构预先规定了“查询—匹配—取值”这条信息流训练数据、损失函数和反向传播则不断调整三组投影参数使点积较高的位置逐渐对应“对当前任务有帮助的信息”。可以把注意力机制看成一种适合承载和传递信息的可学习结构结构规定信息怎样流动训练决定具体寻找什么、匹配什么以及传递什么。模型并没有被人工告知某个头必须学习指定的关系这些行为是在优化任务目标的过程中形成的。图中讨论的是长度为 n 的自注意力因此 Q、K、V 的行数相同。注意力权重矩阵的形状是“Query 数 × Key 数”输出矩阵的形状是“Query 数 × Value 维度”。最重要的读矩阵方法QKᵀ 的第 i 行第 i 个 Query 与所有 Key 的匹配分数注意力权重矩阵 A 的第 i 行第 i 个 Query 对各个 Key 的注意力分配行和为 1输出矩阵 AV 的第 i 行为第 i 个 Query 位置生成的新表示即对所有可见位置的 Value 做加权求和。因此注意力不会改变“第几行对应第几个 Query 位置”这一点它改变的是该位置的表示使其融入上下文信息。以本文后面的两位置示例为例注意力权重矩阵为A [0.076 0.924] [0.018 0.982]它应当按行阅读第一行属于第一个 Query。它对第一个 Key 的权重是 0.076对第二个 Key 的权重是 0.924因此第一个输出为0.076 × V₁ 0.924 × V₂第二行属于第二个 Query。它对两个 Key 的权重分别是 0.018 和 0.982因此第二个输出为0.018 × V₁ 0.982 × V₂。2. 为什么点积要除以 √dₖ理解缩放因子前需要先区分两个不同的维度**dₖ**每个 Query、Key 向量包含多少个特征也是计算一次点积时参与累加的项数**Key 的位置数**一个 Query 要与多少个 Key 比较也就是 Softmax 在一行中接收多少个分数。假设每个 Query 和 Key 都是 64 维即 dₖ 64Q 的形状Query 位置数 × 64 K 的形状Key 位置数 × 64 QKᵀ 的形状Query 位置数 × Key 位置数QKᵀ 中的每一个元素都是一个标量分数。例如第 i 个 Query 与第 j 个 Key 的分数是 64 对特征乘积的总和score(i, j) qᵢ₁kⱼ₁ qᵢ₂kⱼ₂ … qᵢ₆₄kⱼ₆₄随后Softmax 处理 QKᵀ 的一整行。如果序列中有 128 个 Key那么 Softmax 接收的是 128 个分数如果只有 10 个 Key它就接收 10 个分数。Softmax 接收多少个元素由 Key 的位置数决定与 dₖ 64 没有必然关系。那么 dₖ 为什么会影响 Softmax因为它决定了每个分数由多少项相加得到。若 q 和 k 的各维元素近似独立、均值为 0、方差为 1那么每一项乘积的方差约为 11 维点积方差约为 1 64 维点积方差约为 64标准差约为 8也就是说dₖ 64 时点积分数的典型波动尺度会从 1 增长到 √64 8。Softmax 对分数之间的差距非常敏感。同样是三个分数尺度放大后会产生截然不同的结果Softmax([0, 1, 2]) ≈ [0.090, 0.245, 0.665] Softmax([0, 8, 16]) ≈ [0.0000001, 0.000335, 0.999665]第二组分数使 Softmax 几乎只选择一个位置其余位置的权重和相关梯度都非常小。如果这种尖锐分布只是由特征维度增大造成而不是由模型真正学到的强相关性造成就会妨碍训练。因此需要将 QKᵀ 中的每一个点积分数都除以 √dₖ。当 dₖ 64 时除数是 √64 8缩放前分数的方差约为 64标准差约为 8 缩放后分数的方差约为 1 标准差约为 1这里除以 √dₖ 而不是 dₖ是因为要归一化的是点积分数的标准差。若直接除以 64分数会被压得过小Softmax 又容易接近平均分配。一句话总结dₖ 64 表示每个点积分数累加了 64 项不表示 Softmax 一定接收 64 个元素。除以 √64是为了抵消这 64 项累加带来的数值波动使进入 Softmax 的分数保持在较稳定的尺度。方差约为 1 的推导依赖独立、零均值、单位方差等理想化假设真实网络不会始终严格满足这些条件。缩放的实际作用是控制注意力分数的量级减轻 Softmax 仅因特征维度增大而过早饱和它有助于稳定训练但不能单独解决模型中的所有梯度问题。3. 单头自注意力完整计算流程下面用两个输入向量演示一次完整计算。示例中的权重是为了便于手算而给定的在真实训练中Q、K、V 的三组投影矩阵都是通过反向传播学习的参数。3.1 生成 Q、K、V输入分别乘以三组投影矩阵得到 Query、Key 和 Value。3.2 计算并缩放匹配分数QKᵀ 中的每个元素表示一个 Query 与一个 Key 的点积匹配分数再用 √dₖ 对分数进行缩放。3.3 按行进行 SoftmaxSoftmax 应用于每一行使同一个 Query 对所有 Key 的权重之和为 1。3.4 用权重汇总 Value最后将每一行注意力权重与 V 相乘得到对应 Query 位置的新表示。重点第 i 个输出仍对应第 i 个 Query。它不是把所有词压成一个全局向量而是为每个 Query 分别生成一个上下文化表示。“所有位置”应理解为所有可见位置。编码器自注意力通常可见整段输入因果掩码会屏蔽未来位置Padding Mask 也会排除填充位置。3.5 为什么还需要多头注意力单头自注意力已经能够形成复杂的注意力模式但每个 Query 最终只产生一张注意力分布并在同一个 Value 子空间内汇总信息。当模型需要同时表示语法依赖、语义关联、指代关系等不同特征时这些模式需要共享同一套投影参数彼此可能相互牵制。多头注意力让多个头使用独立投影分别生成注意力分布和上下文表示再将结果统一融合。这样模型便拥有多个可以并行学习的表示子空间更容易形成互补的关注模式。4. 多头注意力并行观察再统一融合每个头都有独立的 Q、K、V 投影矩阵因此可以在不同的表示子空间中形成不同的注意力模式。各头的输出不是取平均而是先拼接再通过输出投影矩阵 Wᴼ 做一次可学习的线性融合。每个头的 Key 和 Value 维度通常设为“模型维度 ÷ 头数 h”。这意味着每个头会把完整输入投影到一个较低维的子空间而不是把输入向量的原始坐标机械地切成 h 段。4.1 每个头独立投影 Q、K、V下面的示例使用两个头。两套独立参数让同一输入产生两组不同的 Q、K、V。4.2 每个头独立计算注意力每个头内部仍然执行相同的“点积—缩放—Softmax—加权求和”流程但得到的权重矩阵和输出可以不同。4.3 拼接并做输出投影各头输出沿特征维拼接然后乘以可学习的输出投影矩阵 Wᴼ回到原来的模型维度。多头的价值不是保证每个头一定学会“语法”“语义”等预先指定的分工。我觉得是设计一个适合承载和传递信息的结构神经网络和损失函数会帮你让参数执行对应任务。多头提供的是多个可并行学习的投影子空间和注意力分布使模型更容易同时表示不同位置、不同特征之间的关系。5. 注意力在 Transformer 中的三个位置以原始 Encoder–Decoder Transformer 为例注意力主要出现在三处位置Query 来源Key / Value 来源可见范围编码器自注意力编码器上一层输出同一份编码器输出通常可看见全部非填充输入位置解码器自注意力解码器上一层输出同一份解码器输出使用因果掩码只能看见当前位置及之前的位置编码器—解码器注意力解码器当前表示编码器最终输出每个目标位置可关注源序列的全部非填充位置三者使用的是同一套注意力思想区别主要在于Q、K、V 来自哪里以及哪些位置被 Mask 屏蔽。
返回列表