#2076·d2l-en

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 的平方,这毫无意义。