首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设计一个具有两个分量的联合损失函数,使第一个损失最小化而第二个损失最大化?

如何设计一个具有两个分量的联合损失函数,使第一个损失最小化而第二个损失最大化?
EN

Stack Overflow用户
提问于 2021-10-29 03:06:13
回答 1查看 195关注 0票数 1

我试着做一个实验,其中有两个子任务,目的是降低第一个任务的错误率,同时提高第二个任务的错误率。

这种设置可能类似于多任务学习或对抗性学习。现在我设计的损失函数如下:

total_loss = loss1 -α* loss2

在这里,我刚刚添加了一个权重α,以确保第二个损失不会完全覆盖loss1的影响。

结果表明,经过几个时期的训练,总损失达到负值,并以较高的速度下降。我认为这是因为loss1已经接近于0,但是loss2仍然越来越小(增加错误率要比减少错误容易得多)。

我从来没有读过一篇把负损失加到原来的损失函数中的论文,所以我想知道使用这种损失函数是否合适,还是对我的实验设置来说是一个更好的设计?是否有类似的优化目标的论文?

EN

回答 1

Stack Overflow用户

发布于 2021-10-29 08:29:57

首先,让我解释一下为什么你的损失不会起作用,而且会急剧下降到消极的一面。

代码语言:javascript
复制
total_loss = loss1 - alpha*loss2

您希望最小化loss1和最大化loss2,然后将两个相反的目标合并成一个total_loss

然后,您很可能在最小化total_loss的同时训练您的模型/系统。就目前情况而言,你使用什么阿尔法并不重要。典型损失(交叉熵,mse)的理论绝对最小值为0。但是由于损失中的负项,它可以被最小化到负无穷大,所以你不能阻止它向负方向爆炸。

现在我们有了解释,我们可以想出潜在的解决方案。因为问题是你的损失趋向于负无穷大,所以我们必须找到其他的运算,它的输出会随着输入的增加而减少。

如果我们保持它简单,我们可以尝试使用一个逆。

代码语言:javascript
复制
total_loss = loss_1 + 1 / (loss_2 + epsilon)

上述目标应尽量使loss_2最大化,使损失1/2接近于0。

另一个选项可以是使用tanh,它在(-1,1)有界。乙状体也可以使用。

代码语言:javascript
复制
total_loss = loss_1 + 1 - tanh(loss2)
total_loss = loss_1 + 1 - sigmoid(loss2)

也许还有其他更好的方法来做到这一点。

最后,你需要重新考虑一些问题:任何学习问题都有一个最终的目标。你理论上的最佳选择是什么?系统1的损失最小化到0,系统2的损失最大化到无穷大(或某个大的值)吗?系统2从最优的位置开始吗?

我相信你也应该检讨一下你的做法。研究敌对的学习方法,比如GANs。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69763161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档