MaskedSoftmaxCELoss 代码有误
作者: Y-H-Joe创建于 2022年3月21日更新于 2026年6月24日
这行代码应该修改为:
weighted_loss = (unweighted_loss * weights).sum(dim=1)
原因:使用 mean 时,会计算填充位置作为分母来降低损失。在这种情况下,模型会学习通过尽可能长地预测来欺骗系统(因此不会生成 eos)。(我已经测试过。) 此外,使用 mean 与下游的损失计算不一致。在下游, loss 将被除以 num_token。在这种情况下, CEloss 总共将被除以 num_token 的平方,这毫无意义。
内容来源: d2l-ai/d2l-en