是否需要在最后一层之前添加ReLU函数以预测正值?

时间:2019-01-04 03:38:48

标签: machine-learning deep-learning

我正在使用线性回归开发模型来预测年龄。我知道年龄是0到100,这是可能的值。我在最后一层使用了conv 1 x 1来预测实际值。在卷积1x1的输出之后是否需要添加ReLU函数以确保预测值是正值?目前,我没有添加ReLU,某些预测值变成了负值,例如-0.02 -0.4…

3 个答案:

答案 0 :(得分:3)

没有必要为输出层使用激活功能;通常,您只想直接对倒数第二层的输出使用合理/适当的损失函数。具体来说,RELU不能解决您的问题(或者最多只能解决问题的“一半”),因为它仍然可以预测100以上。在这种情况下-预测连续的结果-有一些标准损失函数,例如平方误差或L1 -规范。

如果您真的想在此最后一层使用激活函数,并且担心始终在有界区间内进行预测,则可以始终尝试将S形函数放大(在0到100之间)。但是,这里的Sigmoid没什么特别的-任何有界函数,例如。有符号,连续随机变量的任何CDF都可以类似地使用。尽管对于优化来说,容易区分的东西很重要。

为什么不从简单的东西开始,例如平方误差损失?当您需要实际进行预测时(与训练/测试相反),总是可以将超出范围的预测“限制”在[0-100]内(我们可以给它起一个像“双重RELU”之类的名字) ),但是如果您遇到很多此类错误,则该模型可能存在更多基本问题。

答案 1 :(得分:1)

您应该使用S型激活函数,然后将目标输出标准化为[0,1]范围。这既解决了积极的问题又有局限性。

您可以轻松地对神经网络输出进行归一化,以获得[0,100]范围内的输出。

答案 2 :(得分:1)

即使是回归问题,在输出(给出[0:1]范围内的预测)之前使用S形图层(进行优化)(然后如果您认为最大年龄是100,再乘以100)

fast.ai课程对此技巧进行了解释。 我个人认为这些课程很棒。