F04|组批和补齐:为什么两句话变成[2,3]
从具体对象与小例子开始,理解计算过程与适用条件。
本章目录
组批没有把两句话混成一句
为了整齐补上的PAD,会不会被模型误当成内容?
组批像把几张试卷一起送进机器,但每张试卷仍单独计算。补齐让它们占用同样多的位置;有效位置表让模型知道哪些格子只是空位。整齐的数组形状不能替代真实长度信息。
输入与适用条件:B=2,T=3,右侧补齐。可见性、取输出位置必须与这一约定一致。
1 / 4 · 长度不同
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
第一句三个位置,第二句两个位置。两句话仍各自独立。
本步状态由图形与说明共同给出。默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
许多张量运算要求规则形状,组批可提高设备利用。
怎样实现
短句补位,同时携带真实长度和匹配的mask;生成接口的左右补齐要求应另行核对。
可能的代价与误解
只补0却不屏蔽;或者无条件取最后一列,都可能改变短句结果。
如何判断是否做对
把同一句分别单独推理和混合长度组批,核对其有效位置输出。
“组批”就是让若干条输入一起处理
一次只处理“我爱学习”,是单条输入。把“我爱学习”和“你爱”放在同一次计算中,叫一个批次(batch)。本批有2条,批大小B=2。
它们还是两条独立输入,不是把第二句话接到第一句话后面。批轴提供“一起调度”的组织方式,标准独立样本计算不让两条样本互相读取内容。尤其不能因为组批就把不同用户的上下文混起来。
上一课的两条编号是:
第0条:[1,2,3] 长度3
第1条:[4,2] 长度2
如果要放成规则的矩形表,每一行需一样长。我们把本批安排的长度设为T=3,给第二条补一个占位编号0:
input_ids = [[1,2,3],
[4,2,0]]
shape = [2,3]
Padding(补齐)是在短输入中增加占位项,不是在原话中补出有意义的新内容。编号0在本教材恰好是PAD;真实模型的PAD编号可能不同,也可能需要按模型配置处理。
真实长度与安排长度不是一回事
第二条真实长度仍是2,表里安排了3个位置。若生产系统把本批都补到128,形状就会是[2,128];这不证明两条原话都含128个Token。
为了告诉后续计算哪些位置是真实内容,另配一张标记表:
is_real = [[1,1,1],
[1,1,0]]
这里1表示真实位置,0表示填充位置。这是后面padding mask(填充掩码)的基础。“掩码”先理解成决定某项能不能参与运算的标记;完整的注意力掩码要到F12再把行列关系讲清。
补左边和补右边有什么区别
右补齐把第二行写成[4,2,0];左补齐会写成[0,4,2]。两者都能表达“你爱”,但真实位置所在列不同。
如果程序总取“最后一列的预测”继续生成,右补齐行的最后一列是PAD,就可能取错位置。因此某些解码流程要求左补齐,或者必须按真实长度选取最后一个有效位置。哪种策略正确取决于生成代码和模型约定,不能只把一侧称为普适最佳方案。
本书基础算例用右补齐,因为对初读者直观;若用于生成,明确取每行最后一个有效位置,不能直接照抄[:, -1]。
补齐不等于截断,更不等于上下文压缩
补齐增加占位;截断删掉过长输入的部分内容;摘要压缩尝试用较短描述替代较长历史。删除真实内容可能让规则或证据消失,补齐本身没有这个目的。
组批也不总要把所有请求凑成同一个长方形。高性能推理可以采用长度分组或变长组织方式。本课用普通密集表解释形状,不把它包装成所有服务的真实内部存储。
为什么组批可能快,也可能让一个人等更久
同一套参数能够在多条输入上一起运算,可能更充分利用硬件。但为了凑够一批而等待,会增加某条请求的等待时间。还有一个浪费:把长度2和长度1000的两条都补到1000,会产生许多填充位置。
因此B、T不是越大越好。B说明并行组织了多少条,T影响每条安排多少位置;后续还要结合硬件、缓存和队列讨论。现在只需要能从实际输入写出编号表和有效位置表。
为什么“你爱”最后有个0,但没有多出一个词
输入与条件。第一句“我爱学习”是 [1,2,3];第二句“你爱”是 [4,2]。希望把它们放进同一个两行表。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1比较长度 | 两句分别有3和2个Token | 统一安排长度3,不能把真实长度都改记成3。 |
| 2右补齐 | 第二行末尾放PAD编号0 | ID表为 [[1,2,3],[4,2,0]]。 |
| 3记录有效性 | 第一行全真,第二行末尾是假 | 有效位置表为 [[1,1,1],[1,1,0]]。 |
| 4预测时选位置 | 第一句取下标2,第二句取下标1 | 第二行下标2是PAD,不能把它当“爱”的位置。 |
| 5计算利用率 | 6个安排位置里有5个真实Token | 占位比例为 1/6;变长批处理可有其他实现,不必都填成矩形。 |
把过程连起来。0表示为了整齐而占的格子,并不是给“你爱”添加了新的文字;真实Token与占位必须一直能区分。
边界与反例。某些现成生成器要求左补齐;本例解释右补齐的对象语义,不承诺所有生成API都自动选择最后有效位置。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
课后自检
长度分别为4和2的两条输入右补齐到4,编号表是什么形状?有几个PAD?
查看参考答案收起参考答案
把两个用户输入组成一批,就让它们共享语义上下文吗?
查看参考答案收起参考答案
机制依据:[F-PADDING][F-TENSOR]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。