神经网络 - 在训练期间切换损失函数以获得更好的梯度

机器算法验证 神经网络 深度学习 损失函数
2022-03-14 01:00:37

我正在训练神经网络D对于使用二元交叉熵损失的二元分类(其中yi是 1 或 0,并且D(x)产生一个值[0,1]):

yilog(D(xi))(1yi)log(1D(xi))

在训练的早期,当分类性能相对较差时,这个损失函数给出了很好的梯度。然而,随着性能的提高,梯度会逐渐变差。对于表现良好的判别器 D,以下损失函数会产生更好的梯度:

yilog(1D(xi))+(1yi)log(D(xi))

请注意,两个损失函数的最小值相同D(x).

我的问题是:

  • 一次D达到一定的性能,我可以切换损失函数以获得更好的梯度吗?
  • 以前有这样做过吗?
  • 值得吗?
1个回答
  1. 是的,你可以做到。这是您的网络,您可以编写任何代码,您可以对其进行操作。正如评论中提到的,它只是不同优化问题的起点。具有相同最小值的错误并不重要,因为整个问题是非凸的,您可能会陷入不同的局部最小值/高原。

  2. 你听说过预训练吗?尽管我不知道任何已发布的网络会使用这种方法来获得更快的收敛速度,但在实际使用最终损失函数对其进行训练之前,通常会以某种方式对网络进行预训练。但通常它是以无人监督的方式完成的。

  3. 你只是自己回答。它为您提供了更好的渐变效果,因此在渐变方面是值得的。问题是,您是否可以通过做其他事情来获得更好的结果。例如:使用动量,在途中改变你的 alpha 或如前所述,使用一些预训练方法