首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >归一化数据下具有tanh错误饱和度的神经网络

归一化数据下具有tanh错误饱和度的神经网络
EN

Stack Overflow用户
提问于 2012-11-30 03:12:35
回答 3查看 5.7K关注 0票数 11

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

我正试着用bcd to 7分段算法来训练它。我的数据是标准化的,0是-1,1是1。

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

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

如何避免这种饱和度错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-01 01:13:10

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

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

代码语言:javascript
复制
f(x) = 1.7159 * tanh( 2/3 * x)  

因此,导数是

代码语言:javascript
复制
f'(x) = 1.14393 * (1- tanh( 2/3 * x))  

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

代码语言:javascript
复制
error = 2/3 * (1.7159 - output^2) * (teacher - output)
票数 11
EN

Stack Overflow用户

发布于 2012-11-30 04:00:31

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

您可以添加一个Momentum factor,以确保基于以前的经验进行一些校正,即使导数为零。

你也可以通过epoch来训练它,在进行实际的更新之前,你可以累积权重的增量值(与每次迭代更新相比)。这也缓解了增量值在两个值之间振荡的情况。

可能有更先进的方法,比如反向传播的二阶方法,可以缓解这个特定的问题。

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

票数 1
EN

Stack Overflow用户

发布于 2012-11-30 12:29:38

我不完全确定我是否正确地理解了这个问题,但如果是这样的话,你应该在0.9到-0.9之间调整你的输入和目标,这将有助于你的导数更合理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13632976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档