所以我有一个多层神经网络,成功学习了AND,OR,NOT和XOR。我对背向传播有疑问。 我正在使用sigmoid函数,所以要确定错误的梯度,它就像这样:
(目标 - 输出)*输出*(1 - 输出)
但我的问题是,如果我的目标为1,而我的输出为0,则会产生类似
的结果(1 - 0)* 0 *(1 - 0),所以它会告诉我我的错误是0,即使它是(我认为)1。真的应该是0还是我应该考虑的事情在评估梯度时?有人可以解释一下0背后的逻辑是什么?它是函数的局部最小值还是类似的东西?
答案 0 :(得分:3)
如果你考虑一下,即使你的目标是1并且输出为1,它也会是这样。
这不会发生的原因是因为您通常不会从正常运行的反向传播网络中获得真实的1或0,因为您在每个节点使用sigmoid激活函数,因此您更有可能获得值接近0或1。 如果从激活中得到0或1,则表示sigmoid饱和。 您可以看到sigmoid函数的行为here。
编辑:我想我应该专注于饱和度。 所以假设你在输出层有一个1。这意味着你的sigmoid函数返回1,这意味着输入上的值接近6.如果你看一下sigmoid图,你会看到当x接近6时,输出接近1并且导数输出也将接近0。当我们说sigmoid“饱和”时,就是这种情况。你确实希望避免这种情况。希望现在更清楚了。
答案 1 :(得分:0)