我创建了一个基于sigmoid的神经网络,使用反向传播算法成功学习,并使用误差计算(目标输出)*输出*(1-output)。但是我想尝试不同的激活功能(缩放到相同范围输出,0到1)。 Logistic函数似乎都运行正常,例如atan,tanh ...但是当我使用径向基函数时,例如guassian e ^(x ^ 2),网络根本就没有学习。在使用高斯激活函数或其他非单调函数时,是否必须更改反向算法?
答案 0 :(得分:1)
是的。我刚刚在Torch中实现了一个简单的非单调激活功能,它不仅有效,而且在MNIST demo上使用默认设置略微优于Tanh(使用默认设置)顺便说一句SGD。)
这是激活函数:2x /(x 2 +1)
...这里是前10个时代的比较:
Tanh | Other
-------|-------
89.34% | 92.87%
93.27% | 95.10%
94.81% | 94.91%
94.57% | 95.77%
94.41% | 96.06%
94.92% | 96.06%
95.02% | 96.27%
95.39% | 96.27%
95.41% | 96.27%
95.63% | 96.24%
答案 1 :(得分:0)
如果你仍然在寻找答案,理论上单调性没有区别,非单调激活函数仍然可以近似任何连续函数。因此问题在于权重的学习,这实际上意味着你必须改变你的学习算法(backpropogation)。
答案 2 :(得分:0)
首先,我假设你的意思是e ^( - x ^ 2)(你忘记了' - ')。 在您提到的公式中,输出*(1-output)是逻辑函数的派生。如果你想使用高斯,导数变为 - 2 * x *输出。