因果掩码(Causal Mask)
AI TERM术语词条Causal Mask
术语释义
在注意力计算中遮蔽未来位置的掩码机制,让每个词元只能读取自己及之前的上下文,是自回归模型训练与逐词生成保持一致的前提。
因果掩码(Causal Mask)是在注意力计算中遮蔽未来位置的机制,它让每个词元只能读取自己及之前的上下文。自回归语言模型要逐词预测下一个词元,若允许看到未来,模型就能直接抄到答案,损失再低也没有意义。因此它不是可选优化,而是生成式建模得以成立的前提,也决定了训练可以并行、推理必须逐词推进这一基本格局。
为什么必须遮蔽未来
标准注意力让序列中每个位置都与所有位置计算相关性,这在理解类任务里是优点,在生成任务中却会造成信息泄漏。设模型在第 t 个位置预测第 t+1 个词元,若它能读到第 t+1 个及之后的真实词元,预测任务就退化成复制任务,梯度会把参数推向照抄输入的平凡解。因果掩码从源头切断这条捷径:在注意力分数矩阵中,行表示查询位置、列表示被关注位置,凡是列下标大于行下标的元素都被置为负无穷,经 Softmax 归一化后权重恰好为零,信息只能从过去流向现在。
实现形式与结构特征
实现上,因果掩码通常表现为一个下三角矩阵:对角线及以下允许关注,对角线以上全部屏蔽。它只依赖位置下标,因此训练时可以把整段文本一次性送入模型,一次前向就并行算出所有位置的损失,而每个位置看到的历史与逐词生成时完全一致,这正是训练并行、推理串行的不对称根源。
- 下三角结构:有效位置构成下三角区域,用一次矩阵填充即可构建,额外开销极小。
- 与填充掩码叠加:批处理时样本长度不一,补齐位需要额外屏蔽,两种掩码必须正确合并。
- 数值处理:屏蔽值取足够大的负数而不是零,否则 Softmax 仍会把概率分配给未来位置。
- 可见性变体:分块注意力、前缀语言模型等会采用更细的可见性规则,并不总是简单的下三角。
与其他机制的关系
因果掩码只控制可见性,并不改变注意力本身的平方级复杂度,计算量依旧随序列长度增长。它与键值缓存配合时有一个直接结论:既然未来位置永远不被关注,缓存就只需保存已经生成的部分,不必为尚未出现的词元预留空间。与滑动窗口注意力结合时,掩码会从固定下三角变成带宽受限的带状区域,既限制可见方向也限制可见距离。这些组合说明掩码是位置可见性的统一表达手段,而不是某一种固定形状。
实践要点
- 先验证掩码再调模型:用小规模数据做过拟合测试,确认模型无法通过读取未来位置来降低损失。
- 让掩码与位置编码对齐:相对位置编码与外推方案要注意掩码边界,避免可见范围与位置假设互相矛盾。
- 推理时保持同样规则:逐词生成若误用了双向可见性,输出会与训练行为不一致,表现为重复或错乱。
- 留意调试信号:训练损失异常偏低而生成质量很差,往往就是掩码失效或填充掩码写错的表现。
常见误区
- 以为掩码能降低计算量:被屏蔽的位置仍参与矩阵运算,掩码只改变权重分配,不减少浮点运算。
- 认为掩码可以事后补:它必须作用于 Softmax 之前的分数,事后裁剪概率会破坏归一化。
- 把填充掩码当小事:忽略补齐位会让模型把无意义符号当成上下文,长批次训练时误差被放大。
- 混淆双向与因果:编码器式理解模型并不需要因果掩码,强行加上会削弱双向建模能力。