← 返回题目列表

序列建模中 Padding 和 Masking 怎么处理?

高频 中等 第 4 / 25 题 更新于 2026/09/20
RNNLSTMGRU序列建模
学习 AI 实战项目

简化版

Padding 把变长序列补到统一长度,Mask 告诉注意力、RNN 打包和损失哪些位置无效。仅把 PAD 值设为 0 不够;必须在表示传播与 loss 聚合处都正确屏蔽,并使用真实长度。

详细版

  • PAD token 需要固定 id,与真实词分开。

  • attention mask 防止读取补齐位置。

  • loss mask 防止 PAD 贡献梯度和指标。

  • packed RNN 可跳过 padding 并避免状态被无效步更新。

  • 左/右 padding 与位置索引、因果 mask 必须匹配。

完整版教学

一、Padding 解决张量形状,Mask 保证语义不变

批处理要求矩形张量,所以补齐是工程手段;PAD 不属于原序列,不应改变 hidden state、注意力归一化或损失分母。

不同模块的 mask 约定可能相反:1 表有效或 1 表屏蔽,bool 与加性 -inf 也不同,必须核对 API。

二、底层机制与公式

loss=sum_(b,t) mask_bt*CE_bt / sum mask
attention_logits += (1-mask)*(-infinity)

三、带数字的推演

序列长度 [3,1] 补到 3,共 6 个位置但只有 4 个有效。

masked loss 分母应为 4;若除 6,短序列比例越高,loss 会被人工压小。

四、方案对比

方案/对象核心特点代价或边界
普通 pad+mask通用易调试仍计算无效位
Packed sequenceRNN 跳过无效步排序和 API 复杂
Ragged/Nested减少 padding算子支持有限

五、执行流程

生成 PAD 与 lengths -> 构造有效 mask -> embedding/attention 或 pack
-> 解包对齐 -> masked loss/metric -> 还原原序列顺序

六、边界条件与工程代价

softmax 前应把无效 key logit 置为足够负值;softmax 后简单乘 0 会让有效权重和小于 1。

全 PAD 样本会使分母为 0 或 attention 全 -inf,数据层应拒绝或专门处理。

记忆钩子:Padding 让形状一样,Mask 让结果像没补过。

七、常见误区与追问

  • 误区:PAD embedding 为 0 就无需 mask。 偏置和递归仍会产生非零状态。

  • 追问:loss 为什么要重新归一化? 只按有效 token 数求平均。

  • 误区:所有框架 mask 中 1 都表示有效。 API 约定可能相反。

  • 追问:pack 有什么优势? RNN 不执行补齐时间步,也不更新无效状态。

  • 追问:左 padding 有何风险? 位置编码和因果 mask 索引可能错位。

八、加强记忆

Padding 让形状一样,Mask 让结果像没补过。

检查三处:注意力/递归、loss、metric,并核对 mask 的 0/1 语义。