我想知道是否有办法限制回归深度模型的输出。假设我希望我的模型输出在指定范围内的值,并在训练时惩罚不在范围内的输出。我没有看到任何论文,但我现在有两种解决方案,但我不知道是否有任何标准方法。
- 我建议的第一个解决方案是使用如下激活函数。它在指定范围内是线性的,并且在指定范围外具有高斜率。虽然如果我使用简单的梯度下降梯度会振荡,但我想如果我使用像
Adam. 对此有什么建议吗?
- 我的第二个解决方案是受到
L1/L2正则化的启发。我找到了模型的输出。如果它超过范围的绝对值,假设它是对称的,我将添加一个远离实际输出的恒定大值。在这里,我们可以用一个大常数替换它,或者将它乘以一个常数。第二个具有这个属性,它可以用斜率微分。
有没有人有适用的建议,甚至这些都可以或其他任何事情?
在回归任务中,习惯上使用线性激活函数作为最后一层的非线性,以估计输出真实值的函数。使用 sigmoid 函数的原因是它的输出仅限
0 to 1于指定概率的良好范围。此外,sigmoid 更多地用于分类任务,其中类在输入中是互斥的,因此使用了 softmax 激活函数。Tanh使用零均值是因为它加速了训练过程。如今,这些通常不应用于分类任务,因为它们的分化在其极限中饱和。Relu是一种习惯选择,因为它的斜率不会饱和。Sigmoid 形状的激活函数不能用作回归任务的最后一层。我想使用一种像线性这样的激活函数作为最后一层的激活函数,以便在特殊范围内输出。在训练时,我想以一种从不尝试输出超出指定范围的值的方式训练模型。为此,我提出了两个我尝试过的建议。我不知道是否有关于这方面的论文。此外,关于提供的答案,sigmoid 不会惩罚输出,我的意思是不会以误差值增加的方式增加它们,这超出了函数域的范围。它的作用是将输出饱和为零或一。我想要做的是在网络的输出和输入的真实输出之间产生巨大的差异,以造成高误差。因此,网络将尝试找到不会产生超出范围的结果的权重。

