Transformer掩码注意力机制原理深度解析

一、什么是掩码注意力机制

掩码注意力是标准自注意力的变体,也叫因果注意力,主要用于Transformer解码器以及Decoder‑Only架构大模型。核心约束:计算当前token注意力时,仅允许访问自身与历史位置token,屏蔽序列未来位置的token信息。

普通自注意力为双向注意力,每个token可以和序列全部位置做交互;掩码注意力实现单向因果约束,服务自回归文本生成任务。

核心计算公式:

Attention⁡(Q,K,V)=softmax⁡(QKTdk+M)V \operatorname{Attention}(Q,K,V)= \operatorname{softmax}\left(\frac{QK^\mathrm{T}}{\sqrt{d_k}}+M\right)V Attention(Q,K,V)=softmax(dk QKT+M)V

掩码矩阵M定义:

Mij={0j≤i−∞j>i M_{ij}= \begin{cases} 0 & j \le i \\ -\infty & j>i \end{cases} Mij={0−∞j≤ij>i

将未来位置赋值负无穷,经过softmax运算后,对应位置注意力权重趋近于0,完成信息屏蔽。掩码操作必须执行在softmax之前,放在softmax之后将失效。

二、掩码注意力完整计算流程

  1. 输入经过线性变换得到Q、K、V矩阵;解码器场景Q来自解码器输入,KV来自解码器自身输入;
  2. QQQ与KTK^\mathrm{T}KT矩阵相乘,得到原始注意力相似度得分;
  3. 使用dk\sqrt{d_k}dk 做缩放,控制内积数值范围;
  4. 叠加上三角掩码矩阵,对角线右上方未来token位置填充负无穷;
  5. 掩码处理后的分数送入softmax,被掩码位置权重归零;
  6. 归一化后的注意力权重和V矩阵加权求和,输出掩码注意力结果O。

掩码矩阵为上三角矩阵,以序列长度等于3举例:

复制代码
[
 [0, -inf, -inf],
 [0, 0,   -inf],
 [0, 0,    0  ]
]

仅保留下三角与对角线元素,第i个token只能看见0~i位置token。

三、掩码注意力与普通自注意力对比

对比维度 普通自注意力(Encoder/BERT) 掩码注意力(Decoder/GPT)
信息可见范围 双向全序列可见,可访问过去、未来token 单向可见,屏蔽未来token,仅可见历史+当前token
掩码逻辑 无因果上三角掩码,可存在padding掩码 强制叠加Look‑Ahead上三角因果掩码
计算流程 QKT→缩放→softmax→VQK^\mathrm{T}\rightarrow缩放\rightarrow softmax\rightarrow VQKT→缩放→softmax→V加权 QKT→缩放→加掩码→softmax→VQK^\mathrm{T}\rightarrow缩放\rightarrow加掩码\rightarrow softmax\rightarrow VQKT→缩放→加掩码→softmax→V加权
适用模块 Transformer编码器、BERT Transformer解码器、GPT、LLaMA等生成模型
典型任务 文本分类、实体识别等理解类任务 文本续写、对话生成等自回归生成任务

通俗理解:普通注意力是阅读完整全文;掩码注意力是写文本,写当前字符只能参考已经写过的内容,不能偷看尚未生成的后续内容。

四、引入掩码的底层必要性

自回归生成任务,预测第i个token只能依赖0~i‑1已经生成的token。

训练阶段使用Teacher Forcing并行输入完整目标序列,若无掩码,模型会直接读取未来待预测token的信息,相当于训练阶段直接获取答案,训练和推理行为不一致,最终推理生成效果失效。

掩码从计算层面切断对未来token的访问,维持模型因果约束,对齐训练与推理行为。

区分两类mask:

  1. Look‑Ahead因果掩码:屏蔽未来位置,掩码注意力使用;
  2. Padding掩码:屏蔽batch内无效padding占位token,编码器解码器均可使用。

五、核心代码片段(PyTorch)

python 复制代码
import torch
import torch.nn.functional as F

def masked_self_attention(Q, K, V, d_k):
    seq_len = Q.size(1)
    attn_score = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
    # 生成上三角掩码,diagonal=1取对角线上方区域
    causal_mask = torch.triu(torch.ones((seq_len, seq_len)), diagonal=1).bool()
    attn_score.masked_fill_(causal_mask, -1e9)
    attn_weight = F.softmax(attn_score, dim=-1)
    output = torch.matmul(attn_weight, V)
    return output, attn_weight

六、掩码注意力在Transformer架构中的位置

  1. Encoder‑Decoder原始Transformer
  • Encoder:普通双向自注意力,无Look‑Ahead掩码;
  • Decoder第一层:掩码多头自注意力,使用上三角掩码处理目标序列;
  • Decoder交叉注意力:Q来自解码器,KV取自编码器输出,不施加因果掩码。
  1. Decoder‑Only架构(GPT、LLaMA)
    每一层注意力全部为掩码注意力,全程开启因果掩码,完成文本自回归续写。

七、总结

  1. 掩码注意力在softmax前叠加上三角因果掩码矩阵,未来位置填充负无穷,softmax后权重置零,实现屏蔽未来token;
  2. 和普通自注意力核心差异是增加单向因果约束,适配生成任务;
  3. 核心作用:对齐训练和推理行为,防止模型偷看未来token,是生成式大模型的底层基础;
  4. 因果掩码和Padding掩码功能不同,不可混淆。
相关推荐
wu_solo2 天前
6.1 Transformer架构概述
深度学习·架构·transformer
Felaim2 天前
【SLAM】SLAM-Former论文与代码导读
transformer·slam·dense slam·代码导读
Felaim2 天前
【SLAM】SLAM-Former
transformer·slam·dense slam·几何基础模型
啥都鼓捣的小yao3 天前
Vision Transformer(ViT)深入浅出
人工智能·深度学习·transformer
Jsundoku4 天前
第七章 深度学习 -- Transformer 架构
人工智能·深度学习·transformer·1024程序员节
陈 洪 伟5 天前
Transformer彻底剖析(9):归一化演进——BatchNorm、LayerNorm、RMSNorm、Post-LN / Pre-LN、DeepNorm
人工智能·深度学习·transformer
布吉岛的石头5 天前
Java 程序员第 50 阶段3:数据工程:预训练语料清洗与去重
java·开发语言·人工智能·深度学习·transformer
爱听歌的周童鞋5 天前
MIT 6.5940 | TinyML 与高效 AI 计算 | Fall 2026 | 笔记 | Lecture 12:Transformer and LLM
transformer·大语言模型·tinyml·mit 6.5940·高效 ai 计算
EDPJ5 天前
(2026|中科院自动化所,路由冗余,动态分配的价值在激进剪枝,多模态更脆弱)你只需要选定专家的 2/3:细粒度 MoE LLM 中的动态专家剪枝
transformer·剪枝·moe·混合专家模型