回归任务中线性激活函数的替代方案以限制输出

数据挖掘 机器学习 神经网络 深度学习 回归 激活函数
2022-02-26 12:02:06

我想知道是否有办法限制回归深度模型的输出。假设我希望我的模型输出在指定范围内的值,并在训练时惩罚不在范围内的输出。我没有看到任何论文,但我现在有两种解决方案,但我不知道是否有任何标准方法。

  1. 我建议的第一个解决方案是使用如下激活函数。它在指定范围内是线性的,并且在指定范围外具有高斜率。虽然如果我使用简单的梯度下降梯度会振荡,但我想如果我使用像Adam. 对此有什么建议吗?

在此处输入图像描述

  1. 我的第二个解决方案是受到L1/L2正则化的启发。我找到了模型的输出。如果它超过范围的绝对值,假设它是对称的,我将添加一个远离实际输出的恒定大值。在这里,我们可以用一个大常数替换它,或者将它乘以一个常数。第二个具有这个属性,它可以用斜率微分。

有没有人有适用的建议,甚至这些都可以或其他任何事情?


在回归任务中,习惯上使用线性激活函数作为最后一层的非线性,以估计输出真实值的函数。使用 sigmoid 函数的原因是它的输出仅限0 to 1于指定概率的良好范围。此外,sigmoid 更多地用于分类任务,其中类在输入中是互斥的,因此使用了 softmax 激活函数。Tanh使用零均值是因为它加速了训练过程。如今,这些通常不应用于分类任务,因为它们的分化在其极限中饱和。Relu是一种习惯选择,因为它的斜率不会饱和。Sigmoid 形状的激活函数不能用作回归任务的最后一层。我想使用一种像线性这样的激活函数作为最后一层的激活函数,以便在特殊范围内输出。在训练时,我想以一种从不尝试输出超出指定范围的值的方式训练模型。为此,我提出了两个我尝试过的建议。我不知道是否有关于这方面的论文。此外,关于提供的答案,sigmoid 不会惩罚输出,我的意思是不会以误差值增加的方式增加它们,这超出了函数域的范围。它的作用是将输出饱和为零或一。我想要做的是在网络的输出和输入的真实输出之间产生巨大的差异,以造成高误差。因此,网络将尝试找到不会产生超出范围的结果的权重。

2个回答

不要使用问题中显示的激活函数。它不会做你认为它会做的事情。反而:

如果您希望输出在范围内[1,1],您可以在最后一层使用 sigmoid 或 tanh 激活函数。

如果您希望输出在范围内[100,100],做同样的事情,然后将最终输出乘以 100(硬编码常数)。

如果您希望输出在范围内[50,150],做同样的事情,然后将最终输出乘以 100,然后再加上 50。

希望您现在可以了解如何处理任何所需的范围。


经过一些编辑,我在您的问题中看到了一些误解:

  • 与您所写的相反,回归模型的最后一层没有理由必须使用线性激活函数。并不是说有“回归警察”会因为你使用不同的激活功能而逮捕你。

    您说习惯上在回归模型的输出处使用线性函数。这并不是因为那些模型在做回归;相反,这更多是因为他们正在解决您希望可能输出范围为的任务[,+],所以他们当然不会使用限制范围的激活函数。现在你有了一个新的设置,你确实想限制输出范围——所以使用不同的激活函数是合理的。您有一个非常规的回归任务,所以如果这意味着您可能会从非常规的激活函数中受益,请不要感到惊讶。

  • Sigmoid 和 tanh在其他环境中使用,因为它们确实具有其他有用的属性,但这并不意味着它们在这里没有用处激活函数可以具有多个有用的属性,其中一些与一种设置相关,而另一些与另一种设置相关。

    • Sigmoid(也称为 softmax)通常用于分类,部分原因是在分类中我们希望输出在范围内[0,1],因此很自然地选择一个确保该范围的激活函数;部分原因是选择 sigmoid(又名 softmax)有一些统计原因。前者在这里是相关的;后者不是。您可以将 sigmoid 函数用于您的任务,原因与人们使用 sigmoid 进行分类的原因不同。

    • 确实,某些来源使用 tanh 是因为它的派生词,但这并不意味着它是使用 tanh 的唯一允许理由。您可以使用 tanh 是因为它限制了输出范围,而不是因为它的导数的属性。

  • 与你写的相反,sigmoid可以用于回归任务的最后一层。

最终,我认为您在没有充分理由的情况下过早地拒绝了看似合理的方法。

也可以尝试惩罚超出范围的输出的方法,而不是更改最后一层的激活函数。事实上,只要训练集中的所有输出都在范围内,标准损失函数(如平方损失)就已经可以做到这一点。但是,很难说它的效果如何,或者它是否会比为最后一层巧妙地选择激活函数更好。找出答案的唯一方法是尝试并查看。

最后,我有时间来回答这个问题,这个问题的答案是在 Pr 提供的一个著名的在线课程中找到的。Boyd 用于凸优化在那门课程中,他提到了优化的应用。它的应用之一是惩罚函数逼近。作为一个简短的答案,只需为您想要的参数定义惩罚并将其添加到成本函数中,这就像应该使用标量化优化的多目标优化。为简单起见,考虑一下我们在 l1/l2 正则化方法中避免过拟合的方法。简单地说,将其添加到当前成本函数中。但是,考虑你的成本函数是平滑的。例如,我添加了他提供的示例。

在此处输入图像描述

如您所见,对数障碍限制了特定变量的错误范围,当输入在该范围内时,大于/小于 1 的值将受到严重惩罚(1,1)惯于。

如您所见,还有其他方法。在当今通常的神经网络中,人们对分类等任务使用 l2 范数来惩罚错误标记的项目。