深度学习进阶文档深度页
序列 Padding 与 Mask
把变长序列补齐成规则张量,并明确有效位置、padding 和 causal mask 语义。
学习目标
- 构造 lengths/mask
- 辨认布尔方向
- 忽略 padding loss
为什么需要这个概念
padding 只是组批工具,不应参与注意力、池化、损失或指标。
- 避免序列评价虚高
- Attention/RNN 正确性
学习前需要掌握
Embedding内容待补充广播内容待补充
背景与问题
padding 只是组批工具,不应参与注意力、池化、损失或指标。
概念定义
valid_mask=True 常表示真实 token;某些 API 的 padding mask=True 反而表示屏蔽。
直观理解
补齐的空位只是占位,不是模型应学习的内容。
核心原理
动态 padding 减少浪费;mask 形状、device、dtype 和布尔方向必须匹配 API。
左 padding 可能需基于有效 mask 重新编号位置。
数学表达
核心公式
有效位置为 1。
变量含义
length_n第 n 条真实长度m有效 mask
计算步骤
- 1positions<[3,2]
代码对应位置
示例 1序列 Padding 与 Mask · PyTorch 示例:验证序列 Padding 与 Mask的输入、计算和输出。
变量解释
| 变量 | 含义 |
|---|---|
length_n | 第 n 条真实长度 |
m | 有效 mask |
完整数值示例
两条序列
已知条件
- lengths=[3,2]
- Lmax=3
- 1
positions<[3,2]
[[T,T,T],[T,T,F]]
处理前后对比
计算与实现步骤
- 1
收集长度
- 2
pad_sequence
- 3
生成 valid mask
- 4
转换 API mask
- 5
损失/指标过滤
代码实现
示例 1
序列 Padding 与 Mask · PyTorch 示例
序列 Padding 与 Mask · PyTorch 示例
PyTorch
example_01.py用途:验证序列 Padding 与 Mask的输入、计算和输出。
lengths=torch.tensor([3,2])
pos=torch.arange(3)[None,:]
valid=pos<lengths[:,None]
print(valid)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
验证序列 Padding 与 Mask的输入、计算和输出。
Step 1 · 1–4 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
lengths=torch.tensor([3,2])
pos=torch.arange(3)[None,:]
valid=pos<lengths[:,None]
print(valid)预期输出或运行结果
[[True,True,True],[True,True,False]]。
常见错误 · 4 条
- mask 方向反
- padding 入 Accuracy
- 空序列
- mask 轴错
实际应用
- 文本/RNN/Transformer
常见错误
mask 方向反
padding 入 Accuracy
空序列
mask 轴错
文档来源
17_Embedding与序列数据基础原始文档
学习资料/deeplearning/17_Embedding与序列数据基础.md- §5 padding
- §6 collate
- §10 loss mask
- §12 三类 mask
- §15 错误
常见问题
valid mask 和 key padding mask 相同吗?
常常布尔方向相反。
为何动态 padding?
减少无效计算。
推荐学习资料
暂未收录相关资料
参考库不会生成虚假资源或无效外部链接。