在 pytorch 中组合它们时,我应该正常化还是减肥?

Should I normalize or weight losses when combining them in pytorch?

network architecture

我有一个有 3 个头的神经网络,其中一个有焦点损失,另外两个有 L1 损失。它们通过求和组合:loss = hm_loss + off_loss + wh_loss 但是,损耗元素的典型值范围不同。这是一个问题吗?我应该对损失元素进行加权,还是应该对网络输出进行归一化?

这是执行 multi-task 学习时的典型挑战。解决这个问题的方法有很多,但是对于这个领域的所有事情,没有一个单一的解决方案可以解决所有问题。最直接的方法是权衡不同的损失成分。您可以通过对三个权重执行网格搜索或随机搜索来做到这一点,或者尝试通过查看每个损失的数量级来平衡损失的三个组成部分。这背后的一般思想是,如果你对其中一个损失项给予高优先级,那么在执行反向传播和参数更新时,对应于该项的梯度将更加突出。

我建议您阅读更多关于 multi-task 学习的内容。例如,您可以从 Multi-Task Learning for Dense Prediction Tasks A Survey 开始:Simon Vandenhende 等人。,在 TPAMI'21.