Causal Mask、Padding Mask 和样本边界 Mask 分别解决什么问题?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
建议画一个很小的注意力矩阵解释三种 Mask:Causal Mask 遮未来,Padding Mask 遮补齐位,样本边界 Mask 在 packing 时阻止不同样本互看。一定区分 attention mask 与 loss mask,后者只决定哪些标签计入损失。面试官若给广播维度追问,现场检查 Query/Key 轴和被遮位置即可。
可以这样答:
Causal Mask 让位置只能关注自己和过去,防止自回归训练偷看未来;Padding Mask 不让有效 Token 关注补齐位置;样本边界 Mask 用于 sequence packing,阻断不同样本之间的注意力。它们都作用于 attention logits。把标签设为
-100属于 loss mask,只是不计算该位置损失,不能阻止这个位置参与注意力。
核心回答
Causal Mask 限制当前位置不能读取未来 token,保证自回归训练与生成的因果性;Padding Mask 屏蔽为了对齐 Batch 而补出的空位置,避免它们参与注意力;把多条语义独立样本打包到同一物理序列、又要求彼此不可见时,还需要样本边界 Mask。实现上通常在 Softmax 前把不允许关注的位置加上极小值,使其归一化后的权重接近零。
展开说明
以长度为 \(n\) 的 Decoder-Only 序列为例,Causal Mask 通常是下三角可见矩阵:位置 \(i\) 只能关注不晚于 \(i\) 的位置。Padding Mask 的形状往往由有效长度生成,再广播到 Head 和 Query 维度。若要求各样本注意力独立,打包时仅有 Causal Mask 不够,因为后一条样本仍可能看到前一条无关样本;应使用块对角边界,或由支持文档边界的注意力实现处理。连续语言模型训练也可能用 EOS 分隔文档并允许跨文档注意,这属于不同的数据语义。
Mask 还必须和损失 Mask 区分:前者控制模型能看什么,后者控制哪些 token 计入训练损失。把两者混淆,可能造成标签泄漏、无效 token 参与训练,或整行被屏蔽后出现数值异常。
工程实践
应为短样本手工打印注意力可见矩阵,并验证左 Padding、右 Padding、序列打包和缓存解码的行为。使用 FlashAttention 或其他融合内核时,要确认其因果方向和长度参数约定;不同库对布尔 Mask 中 true 的含义也可能相反,不能只凭名称猜测。
常见追问
- 为什么训练时用了 Causal Mask 仍可并行计算所有位置? Mask 只是把未来位置的注意力 logit 置为负无穷,整张矩阵仍能一次并行计算;串行的是自回归推理时未知的下一 Token。
- Attention Mask 与把标签设为
-100有什么区别? 前者决定前向时每个位置能看什么,后者只决定哪些位置计入 loss;只 mask 标签不能阻止信息被读取。 - 多条对话打包后,怎样避免跨样本信息泄漏? 构造块对角的样本边界 Mask,并独立重置位置或按模型要求编码,同时对 padding 和标签分别处理。
一句话复习
Causal Mask 管未来,Padding Mask 管补位,样本边界 Mask 管打包后的跨样本隔离。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。