我正在尝试针对二进制分类问题训练网络。 (这是一个卷积网络,在R中使用keras进行图像识别,是kaggle的“人类蛋白质图像分类挑战”,但我认为这里的细节并不重要。这是一个完全不同的问题,之前,我们曾针对文本数据和不同软件(Spark)的多分类问题进行过研究,因此我将这个问题保留得非常笼统。)
我的训练示例分别标记为“ 0”和“ 1”。训练数据中的0大于1。我训练的网络(使用二进制交叉熵作为损失函数时)会继续再现基线分类器;也就是说,无论测试输入如何,分类器始终会预测为“ 0”。
为什么有时会发生这种情况我完全不解。首先,有很多网络配置可重现此分类器。例如,设计一个始终输出“ 0”而不管输入是什么都不困难。其次,毫无疑问,任何这样的配置都是损失景观上损失函数的局部最小值,而寻找损失函数的局部最小值正是我们要求这些神经网络所做的。因此,我们几乎不能怪他们在训练后有时会提出这种“有点不错”的配置。但是,这个问题对我来说一直很持久。
我的问题:在深度学习中,这种“回归基准”是常见问题吗?有什么“最佳实践”方法可以避免或打击它?
仅出于激发讨论的目的,我将提到一些已经发生的可能的行动方案,其中一些实际上是我尝试过的(但没有成功):
1)增加网络复杂性(添加更多层,每层增加神经元,在卷积网络的情况下增加更多过滤器,等等)。这是显而易见的第一步。也许即使经过最好的培训,网络也不够“聪明”,无法区分“ 0”和“ 1”,所以基准确实是您希望该网络架构能够完成的最佳选择。
我已经尝试过了。我什至尝试了一个预训练的卷积网络,该网络具有两个紧密连接的层和4100万个可训练的参数。结果相同。
2)更改损耗功能。我试过了,但没有帮助。值得注意的是,当我使用loss = binary_crossentropy进行训练时(当您的度量标准是准确的时),它将为该度量标准生成基线分类器(预测所有“ 0”)。当我用损失= F1_score进行训练时,它将为该指标生成基线分类器(预测所有“ 1”)。再一次,这件事显然正在做应做的事情,找到了一个很好的局部最小值。 (显然),这只是一个可怕的解决方案。
3)只需重新训练整个事情(使用不同的随机初始配置)。我尝试了一下,但没有帮助。它会不断复制基线。因此,基线不仅仅是因为运气不好而突然出现,而且似乎无处不在。
4)调整学习速度。试过这个,没有运气。实际上,没有理由期望这会有所帮助。如果它之前找到了基准,那么降低学习速度可能无助于“取消查找”。
还有其他人遇到这个问题吗?您如何处理呢?
答案 0 :(得分:-1)
我不确定什么是最好的方法,但是我可以分享一些经验。
首先,最好将相同数量的'0'标签样本和'1'标签样本
第二,如果每次都达到基线,那么您的样本就太随机了。 因此,您必须解决问题并减少随机性。