LSTM不同batch大小下同输入句子预测分数存在差异,是否正常及如何解决?
现象合理性结论
该现象属于正常情况。
你观察到的预测偏差是动态padding机制+模型未忽略padding输入共同导致的:当使用按batch动态padding策略时,每个batch的序列对齐长度等于该batch内最长样本的长度:
- batch_size=1时,当前batch内只有
I have a flower这一个短句子,无需补padding/仅补极短长度 - batch_size=16时如果batch内包含更长的样本,这个短句子需要补更多的0做长度对齐
如果你的模型没有添加mask逻辑,LSTM会把这些无意义的padding 0值作为正常输入参与时序计算,额外的padding输入会改变LSTM最终输出的隐层状态,最终导致预测概率出现差异,0.08的偏差属于这类场景下的常见情况。
消除预测不确定性的方案
- 最根本的解决方法:在模型的嵌入层后新增
Masking(mask_value=0)层(Keras/TensorFlow框架下),将padding的0值标记为无效输入,LSTM会自动跳过这些位置的计算,无论padding长度是多少都不会影响最终输出结果。 - 推理侧统一padding规则:放弃按batch动态padding的逻辑,所有测试样本统一对齐到训练阶段使用的最大序列长度,无论batch大小如何调整,同一样本的输入序列长度始终一致,即可消除预测差异。
- 若已完成训练无法修改模型结构:可以固定推理阶段的batch_size和padding规则,或者在推理前将所有样本按长度排序,保证同批次的样本长度尽可能接近,降低padding长度的波动范围,大幅缩小预测偏差。
内容的提问来源于stack exchange,提问作者hstk
相关产品推荐
相关产品推荐

