0

我正在迈出神经网络的第一步,为此我正在试验一个非常简单的单层、单输出感知器,它使用 sigmoidal 激活函数。每次使用以下方法呈现训练示例时,我都会在线更新我的权重:

weights += learningRate * (correct - result) * {input,1}

weights是一个长度为 n 的向量,它还包含来自偏置神经元(-阈值)的权重,result是在给定 时由感知器计算的结果(并使用 sigmoid 处理)inputcorrect是正确的结果,并且{input,1}是输入1(来自偏置神经元的固定输入)。现在,当我尝试训练感知器执行逻辑 AND 时,权重不会收敛很长时间,而是会保持类似的增长,并且它们与阈值保持大约 -1.5 的比率,例如三个权重在顺序:

5.067160008240718   5.105631826680446   -7.945513136885797
...
8.40390853077094    8.43890306970281    -12.889540730182592

我希望感知器停止在 1、1、-1.5。

除了这个看起来与学习中缺少的停止条件有关的问题之外,如果我尝试使用恒等函数作为激活函数,我得到的权重值会上下波动:

0.43601272528257057 0.49092558197172703 -0.23106430854347537

我得到了类似的结果tanh。我无法对此作出解释。


谢谢图努兹_

4

1 回答 1

2

这是因为即使输入非常高的正(或负)输入,sigmoid 激活函数也不会达到 1(或零)。所以(correct - result)总是非零的,你的权重总是会更新。尝试使用阶跃函数作为激活函数(即f(x) = 1 for x > 0, f(x) = 0 otherwise)。

您的平均权重值似乎不适合身份激活函数。可能是你的学习率有点高——试着降低它,看看是否能减少振荡的大小。

此外,在进行在线学习(又名随机梯度下降)时,通常的做法是随着时间的推移降低学习率,以便收敛到一个解决方案。否则你的重量将继续摆动。

在尝试分析感知的行为时,还可以查看correctresult

于 2011-08-24T14:12:37.187 回答