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

PVJ*_*PVJ 11 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).

如何避免此饱和错误?

小智 9

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

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

f(x) = 1.7159 * tanh( 2/3 * x)  
Run Code Online (Sandbox Code Playgroud)

因此,衍生物是

f'(x) = 1.14393 * (1- tanh( 2/3 * x))  
Run Code Online (Sandbox Code Playgroud)

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

error = 2/3 * (1.7159 - output^2) * (teacher - output)
Run Code Online (Sandbox Code Playgroud)

  • 导数是错误的,应该是:`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 - 1.7159*tanh(2/3*x))*( 1.7159 + 1.7159*的tanh(2/3*X)) '=>`F'(X)= 0.6667/1.7159*(1.7159 - F(X))*(1.7159 + F(X))` (3认同)