我想通过人工神经网络(前馈,反向传播)来近似具有有限值范围的非线性函数。大多数工具和文献都建议在进行回归时输出神经元的线性函数。但是,我先验地知道我的目标函数是有限范围的,因此对具有有限值范围的输出神经元使用函数是否合理呢?更明确地说:我的目标函数的值在 0 和 1 之间的范围内,但神经网络确实偶尔会预测超出此范围的值(例如 -1.3)。我可以阻止网络这样做吗,这是否合理?
学习数值范围有限的非线性函数时人工神经网络的输出层
我反对削减 的值,因为这将导致不可微的传递函数,并且您的基于梯度的训练算法可能会搞砸。
输出层的 sigmoid 函数很好:。它将压缩任何输出以位于范围内。所以你可以任意接近目标。
但是,如果您使用平方误差,您将失去“匹配损失函数”的属性。当对平方误差使用线性输出时,误差的导数减少到,其中是输出,是相应的目标值。所以你必须检查你的梯度。
当我在该范围内有目标并且无论如何使用平方和误差时,我个人使用 sigmoid 作为输出的结果很好。
如果您在输出层中使用逻辑激活函数,它将根据需要将输出限制在 0-1 范围内。
但是,如果您遇到输出范围受限的回归问题,则平方和误差度量可能并不理想,也许 beta 噪声模型可能更合适(参见 beta 回归,IIRC 在 R 包中实现,但我我自己从来没有用过)
如果您知道输出的绝对范围,但没有理由期望它具有典型逻辑激活函数的非线性特征(即中间的值与接近 0 或 1 的值一样可能) ,那么您可以通过除以绝对最大值来转换输出。如果最小值不是 0,您可以在除以值(最大值 - 最小值)之前减去绝对最小值。
所以基本上不要尝试将神经网络训练到原始值,将其训练到百分位值(0 表示最小值,1 表示最大值)。
“使用线性函数并简单地将所有低于 0 的值切割为 0 并将高于 1 的值切割为 1 是否有效?”
我相信在许多情况下,截止值应该是训练数据的百分比分割。例如,如果您的训练数据有 13% - 0 和 87% - 1,那么截止值为 0.13;例如,输出上 0.13 及以下的任何值都是 0,而 0.14 及以上的任何值都是 1。显然,越接近输出提供的截止值,不确定性就越大。它也可能有助于调整界限,尤其是在错误分类成本很高的情况下。这个链接可能有点帮助http://timmanns.blogspot.com/2009/11/building-neural-networks-on-unbalanced.html