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

我正在尝试针对bcd到7段算法进行训练。我的数据被归一化0是-1和1是1。

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

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

如何避免此饱和错误?

最佳答案

激活函数渐近点的饱和度是神经网络的常见问题。如果您看一下函数的图形,就不会感到惊讶:它们几乎是平坦的,这意味着一阶导数是(几乎)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)

关于neural-network - 归一化数据饱和度错误的神经网络,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13632976/

10-12 16:42