神经网络与反向传播

我有一个多层神经网络,它成功地学习了AND、OR、NOT和XOR操作。我对反向传播有些疑问。我使用的是Sigmoid函数,因此为了确定误差的梯度,计算过程如下:

(目标值 – 输出值) * 输出值 * (1 – 输出值)

但我的问题是,如果我的目标值是1,而输出值是0,结果会是这样的:

(1 – 0) * 0 * (1 – 0),所以它会告诉我误差是0,尽管我认为误差应该是1。误差真的应该是0吗,还是我在评估梯度时应该考虑到这一点?能有人解释一下这个0背后的逻辑吗?这是函数的局部最小值还是其他什么原因?


回答:

如果你仔细想想,即使你的目标值是1,输出值也是1,情况也会是这样。

之所以不会发生这种情况,是因为在正常运行的反向传播网络中,你通常不会得到真正的1或0,因为你在每个节点使用的是Sigmoid激活函数,所以更有可能得到接近0或1的值。如果你的激活值得到0或1,这意味着Sigmoid函数已经饱和。你可以在这里查看Sigmoid函数的行为这里

编辑:我想我应该关注饱和问题。假设你在输出层得到1。这意味着你的Sigmoid函数返回了1,这意味着输入值接近6。如果你查看Sigmoid图表,你会发现当x接近6时,输出值接近1,输出的导数也会接近0。这种情况我们称之为Sigmoid“饱和”。你应该避免这种情况。希望现在更清楚了。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注