具有标准化数据的饱和度饱和的神经网络

时间:2012-11-29 19:12:35

标签: neural-network

我正在使用由4个输入神经元组成的神经网络,1个由20个神经元组成的隐藏层和7个神经元输出层。

我正在尝试将其训练为bcd到7段算法。我的数据被归一化0是-1而1是1。

当输出错误评估发生时,神经元饱和错误。如果所需输出为1且实际输出为-1,则错误为1-(-1)= 2

当我将其乘以激活函数error*(1-output)*(1+output)的导数时,由于0,错误几乎变为2*(1-(-1)*(1-1)

如何避免此饱和错误?

3 个答案:

答案 0 :(得分:9)

激活函数渐近线的饱和度是神经网络的常见问题。如果你看一下这个函数的图形,就不会感到惊讶:它们几乎是平的,这意味着一阶导数是(几乎)0。网络不能再学习了。

一个简单的解决方案是缩放激活功能以避免此问题。例如,使用tanh()激活函数(我最喜欢的),当期望的输出在{-1,1}时,建议使用以下激活函数:

f(x) = 1.7159 * tanh( 2/3 * x)  

因此,衍生物是

f'(x) = 1.14393 * (1- tanh( 2/3 * x))  

这将迫使渐变进入最非线性值范围并加速学习。对于所有细节,我建议阅读Yann LeCun的优秀论文Efficient Back-Prop。 在tanh()激活函数的情况下,错误将计算为

error = 2/3 * (1.7159 - output^2) * (teacher - output)

答案 1 :(得分:1)

无论您使用什么功能,都必然会发生这种情况。根据定义,当输出达到两个极值中的一个时,导数将为零。自从我使用人工神经网络以来已经有一段时间了,但如果我没记错的话,这(以及许多其他事情)是使用简单反向传播算法的局限之一。

您可以添加Momentum factor以确保根据之前的经验进行一些更正,即使衍生工具为零。

您还可以按时期训练它,在执行实际更新之前,您会累积权重的增量值(与每次迭代更新时相比)。这也减轻了delta值在两个值之间振荡的条件。

可能有更多高级方法,例如用于反向传播的二阶方法,可以缓解这一特定问题。

然而,请记住,tanh在无穷大处达到-1或+1,问题纯粹是理论上的。

答案 2 :(得分:0)

不完全确定我是否正确地阅读了这个问题,但如果是这样,你应该将你的输入和目标扩展到0.9和-0.9之间,这将有助于你的衍生品更加理智。