我想使用自定义损失函数,它是 l1 和 DSSIM 损失的加权组合。DSSIM 损失限制在 0 到 0.5 之间,因为 l1 损失可以大几个数量级,在我的情况下也是如此。在这种情况下,反向传播如何工作?对于权重的微小变化,l1 分量的变化显然总是远大于 SSIM 分量。因此,似乎只有 l1 部分会影响学习,而 SSIM 部分几乎没有任何作用。这个对吗?或者我在这里遗漏了一些东西。我想我是,因为在 Keras-contrib 的 DSSIM 实现中,提到我们应该在 DSSIM 之外添加一个像 l2 loss 这样的正则化项(https://github.com/keras-team/keras-contrib/ blob/master/keras_contrib/losses/dssim.py); 但我无法理解它是如何工作的,以及 SSIM 将如何影响反向传播,这完全被其他组件的大量所掩盖。如果有人可以解释这一点,那将是一个很大的帮助。谢谢。
反向传播如何在组件具有不同数量级的自定义损失函数上工作?
人工智能
卷积神经网络
反向传播
喀拉斯
2021-10-26 15:18:02
1个回答
不知道你是否还有这个疑问,但这对那些面临类似问题的人会有所帮助-
您将需要通过超参数搜索找到添加这两个损失的正确权重。也就是说,找到最好的对于损失-
这里和可以是任何损失。在这里,我们分别将它们作为 SSIM 和 L1 正则化损失。您可以将正则化损失的梯度流保持在一定百分比以下通过为超参数选择正确的梯度裁剪值。请注意,通过将此超参数设置为低,您甚至可能会阻碍其性能(与此处提到的情况完全相反)。对于这种特定情况,L1 正则化具有恒定梯度,等于超参数本身。因此,通过将其保持在最大梯度的 10% 左右(或最大损失的 10% 通常也可以),我们不应该面对这类问题。
其它你可能感兴趣的问题