Neural network 归一化数据的tanh错误饱和神经网络

Neural network 归一化数据的tanh错误饱和神经网络,neural-network,Neural Network,我正在使用一个由4个输入神经元组成的神经网络,一个由20个神经元组成的隐藏层和一个7个神经元的输出层 我试着训练它,使其适应bcd到7段的算法。我的数据是标准化的,0是-1,1是1 当输出误差评估发生时,神经元饱和错误。如果所需输出为1,实际输出为-1,则错误为1-(-1)=2 当我将它乘以激活函数的导数时,error*(1-output)*(1+output),由于2*(1-(-1)*(1-1),误差几乎变成0 如何避免这种饱和误差?无论使用什么函数,这都是不可避免的。根据定义,当输出达到两个

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

我试着训练它,使其适应bcd到7段的算法。我的数据是标准化的,0是-1,1是1

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

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


如何避免这种饱和误差?

无论使用什么函数,这都是不可避免的。根据定义,当输出达到两个极端之一时,导数将为零。我使用人工神经网络已经有一段时间了,但如果我没记错的话,这(以及其他许多事情)是使用简单反向传播算法的限制之一

您可以添加一个,以确保根据以前的经验进行了一些修正,即使导数为零

您还可以按历元对其进行训练,在进行实际更新之前积累权重的增量值(与每次迭代更新相比)。这还可以缓解增量值在两个值之间振荡的情况

可能有更高级的方法,如反向传播的二阶方法,可以缓解这个特殊问题


但是,请记住,tanh在无穷远处达到-1或+1,这个问题纯粹是理论问题。

不完全确定我是否正确阅读了这个问题,但如果是这样,你应该将你的输入和目标缩放到0.9到-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的伟大论文。 对于tanh()激活函数,错误计算如下

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

因此,这可能不是我的领域,但我完全不知道如何从给出的信息中排除故障。我也不知道“tanh”是打字错误还是双曲正切。tanh是hperbolic正切:)@danelliotster你能编辑你的答案来说明导数如何更合理吗。我匆忙地投了反对票。除非有编辑,否则我现在无法撤消它。导数是错误的,应该是:
f'(x)=1.14393*(1-tanh^2(2/3*x))
=>
f'(x)=0.6667*1.7159*(1-tanh(2/3*x))*(1+tanh(2/3*x))
=>f'(x)=0.6667/1.7159-1.7159*tanh(2/3*x))*(1.7159+1.7159*tanh>=0.6667/1.7159*(1.7159-f(x))*(1.7159+f(x))。