【问题标题】:pytorch - combining loss functions from multiple nodespytorch - 组合来自多个节点的损失函数
【发布时间】:2021-09-29 08:42:27
【问题描述】:

我有一个包含多个节点输出的网络,每个节点都有一个损失函数,loss1、loss2、loss3.. 最终的损失函数是 loss = loss1 + loss2 + loss3。 当 loss.backward() 被调用时。所有节点都将得到反向传播。但我的问题是:我是否需要将 loss1、loss2 和 loss3 的输出值缩放到相似的范围内?其背后的逻辑是什么? 例如,如果 loss1 产生 10k 范围内的值,而 loss2 和 loss3 都在 1-10 范围内,这是否意味着与 loss1 关联的节点在整体训练中会更重要?此处使用相同的优化器。

谢谢。

【问题讨论】:

    标签: machine-learning pytorch


    【解决方案1】:

    编辑-第二个答案:

    我认为这里重要的是损失函数指标。您的这些损失函数是否依赖于相同的指标?这是重要的问题。如果这些依赖于相同的度量,并且如果这些损失是根据相同的特征计算的,那么它已经被缩放了,你可以对它们求和。但如果它们不依赖于相同的特征,您可以根据您的特征重要性偏好对它们进行加权求和。或者,如果您的损失取决于不同的矩阵,这意味着它们不会返回相同的信息,它们的梯度更新也不会相同。

    既然有这么多不同的矩阵:

    并且由于像梯度下降这样的优化算法依赖于损失函数关于其权重的导数:

    梯度的逻辑更新根据您的指标而有所不同。

    例如,有一个很好的图表显示了 L1 和 L2 指标及其导数:

    从逻辑上讲,我认为如果您的指标不同,单独给予会提供更好的情况;如果不是,我猜你是对的,没关系。

    【讨论】:

    • 那么您将如何继续扩大损失?如果你这样做,由于损失已经“缩小”,你是否不需要更多的时期(更长的训练)?
    • 我想我听不懂你的问题。由于损失不是输入神经网络的特征,因此它不会影响 epoch 的数量。我们在优化情况下对损失求和,这意味着我们认为算法已经找到了可实现的最小损失。
    • 感谢您的回复。虽然我有点困惑。您提供的示例是关于特征缩放将如何影响损失的。就我而言,输入基于相同的特征集,因为它是相同的网络。用于计算损失的输出是不同的。因此,损失的规模不同。将这些损失相加而不是分别反向传播有什么影响?
    • 我不太确定差异,但如果你的损失取决于不同的矩阵,如 loss1>"均方误差",loss2>"平均绝对误差";将它们相加可能会给您的网络提供错误的信息,因为它们的计算方式不同。我认为可能单独反向传播它们会更好。
    • 我确实从一些来源中读到,在反向传播之前总结它们与单独反向传播相同。但是,我仍然不确定每次损失的规模如何影响学习。正确来说,无论我们是否求和,每个损失都应该被优化。
    猜你喜欢
    • 2019-05-27
    • 2021-02-20
    • 1970-01-01
    • 2022-01-15
    • 2021-11-13
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多