Transformer注意力机制

发布时间:2026/8/16 14:32:01
Transformer注意力机制 Transformer注意力机制的核心是让序列中的每个位置都能直接关注其他所有位置通过动态计算相关性权重来聚合信息从而高效捕捉长距离依赖。 直观理解什么是注意力传统RNN处理序列时信息必须一步步传递从第一个词到最后一个词这导致长距离依赖很难捕捉。注意力机制的核心思想是让序列中的每个位置都能看到其他所有位置并根据相关性动态分配权重。打个比方你在读一句话时理解某个词的含义会同时参考句中的其他词而且对不同词的关注度不同。注意力机制就是让模型学会这种关注分配的能力。 核心公式Scaled Dot-Product Attention注意力机制的数学表达为其中涉及三个关键向量QQuery查询当前词想要查找什么信息KKey键每个词能被查到的标签VValue值每个词实际携带的信息内容 多头注意力Multi-Head Attention单一注意力只能学到一种关注模式。多头注意力将Q、K、V分别投影到多个不同的子空间让模型同时从不同角度关注信息其中每个头直觉理解就像多个审查员同时审阅同一句话有人关注语法结构有人关注语义关系有人关注位置关系最后把各自的发现综合起来。 掩码机制MaskingTransformer中有两种掩码Padding Mask忽略填充token如[PAD]不让它们参与注意力计算。Causal Mask因果掩码在解码器中使用确保位置 i 只能关注位置 ≤i 的信息防止看到未来。实现方式是在softmax之前将未来位置的分数设为 −∞ 。️ 在Transformer中的位置Transformer整体架构中注意力机制出现在两个地方编码器Encoder中的自注意力Self-Attention每个位置关注序列中的所有位置双向。解码器Decoder中掩码自注意力只关注已生成的部分单向。交叉注意力Cross-AttentionQuery来自解码器Key和Value来自编码器的输出实现编码器到解码器的信息传递。 简化代码实现PyTorch风格pythonimport torch import torch.nn.functional as F import math def scaled_dot_product_attention(Q, K, V, maskNone): d_k Q.size(-1) # 1. 计算相似度并缩放 scores torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k) # 2. 应用掩码如果有 if mask is not None: scores scores.masked_fill(mask 0, -1e9) # 3. Softmax归一化 attn_weights F.softmax(scores, dim-1) # 4. 加权求和 output torch.matmul(attn_weights, V) return output, attn_weights 总结概念作用Q, K, V分别代表查询、键、值通过线性变换从输入得到QKT计算词与词之间的相关性dk​​ 缩放防止点积过大导致梯度消失Softmax将相关性转化为注意力权重加权V根据权重聚合信息多头从多个子空间捕捉不同类型的依赖关系掩码控制信息的可见性填充/因果注意力机制之所以强大是因为它不依赖序列顺序能并行计算且能直接建模任意两个位置之间的关系这正是Transformer超越RNN的关键所在。