我正在尝试完成一项双重任务。输入是一张图像,根据该输入,我希望从一组图像中选择另一张图像(分类任务),然后使用这两张图像来获得一个输出张量。显然,如果我知道应该从那组图像中选择哪张图像的真实情况,我可以分别训练这两个模型。但我只有输出张量的真实情况。
对我来说,这个问题似乎是,如果我们使用分类层,梯度将不再可微。我该如何处理这个问题?是否有文献使用这种架构进行任何应用?谢谢!
更多细节:我有多个对象/场景的图像,我希望使用其中的两张图像来进行某种重建问题。为了最大化重建的性能,如果给定第一张图像,我希望智能地选择第二张图像。例如,我有三张图像A、B、C,使用AC可以得到最佳结果。我需要一个模型,给定A可以预测C,然后使用AC可以实现重建。现在任务清楚了吗?我没有真实情况表明AC比AB好。现在任务清楚了吗?
回答:
所以,基本上,你想先进行分类任务,然后进行重建任务。
这是我的建议(我并不认为这是绝对最佳的解决方案,但这是我会如何处理这个问题的):
你可以创建一个单一任务,执行分类–>重建,并使用单一损失。我们仍然将这个网络分为两部分,称分类部分为net_class
,执行重建的部分为net_reconstruct
。假设你的分类网络预测{'B': 0.1, 'C': 0.9}
。我不会只使用图像’C’进行重建,而是将两个配对(A-B
和A-C
)都输入到第二个网络,并计算重建损失L
(我不是重建专家,但我猜想有一些经典的损失函数在这里)。
因此,你将计算两个损失L(A-B)
和L(A-C)
。我的总损失将是0.1 * L(A-B) + 0.9 * L(A-C)
。这样,你会训练net_class
来选择最小化重建损失的配对,同时你仍然会训练net_reconstruct
来最小化这两个损失,而且损失是连续的(因此,根据AI专家的说法,是可微的 😉 )。
这种损失背后的想法是三方面的:
1 – 改善重建器会使损失下降(因为L(A-B)
和L(A-C)
都会减少。因此,这个损失应该使你的重建器向你想要的方向收敛。
2 – 假设你的重建器已经训练得相当好了(L(A-B)
和L(A-C)
相对较低)。那么,你的分类器有动力去预测具有最低重建损失的类别。
3 – 现在,你的重建器和分类器将同时训练。你可以期望,在训练结束时,得到一个分类器,它的输出几乎是二元结果(如0.998对0.002)。在这一点上,你的重建器几乎只会在与0.998
输出相关联的场景上进行训练。这应该不是问题,因为,如果我正确理解了你的问题,你希望仅对最高分类的场景进行重建部分。
请注意,这种方法即使你不在重建部分使用深度学习也能工作。
如果你想在这类主题上获得一些灵感,我推荐你阅读一些关于GANs(生成对抗网络)的博客文章。它们使用了相同的两阶段-单一损失技巧(当然有一些细微的不同,但这些想法非常接近)。
祝你好运!