繁体   English   中英

Python神经网络反向传播

[英]Python Neural Network Backpropagation

我正在学习神经网络,特别是通过反向传播实现来查看MLP。 我正在尝试在python中实现我自己的网络,我想在开始之前我会查看其他一些库。 经过一番搜索,我发现了Neil Schemenauer的python实现bpnn.py. http://arctrix.com/nas/python/bpnn.py

完成了代码并阅读了Christopher M. Bishops书中标题为“神经网络模式识别”的第一部分,我在backPropagate函数中发现了一个问题:

# calculate error terms for output
output_deltas = [0.0] * self.no
for k in range(self.no):
    error = targets[k]-self.ao[k]
    output_deltas[k] = dsigmoid(self.ao[k]) * error

计算错误的代码行在Bishops书中是不同的。 在页145,方程4.41他将输出单位错误定义为:

d_k = y_k - t_k

其中y_k是输出,t_k是目标。 (我使用_来表示下标)所以我的问题是这行代码:

error = targets[k]-self.ao[k]

事实上:

error = self.ao[k] - targets[k]

我很可能完全错了,但有人可以帮我解决我的困惑。 谢谢

这一切都取决于您使用的错误措施。 仅举几个错误测量的例子(为简洁起见,我将使用ys表示n输出的向量, ts表示n目标的向量):

mean squared error (MSE):
    sum((y - t) ** 2 for (y, t) in zip(ys, ts)) / n

mean absolute error (MAE):
    sum(abs(y - t) for (y, t) in zip(ys, ts)) / n

mean logistic error (MLE):
    sum(-log(y) * t - log(1 - y) * (1 - t) for (y, t) in zip(ys, ts)) / n 

您使用哪一个完全取决于上下文。 当目标输出可以取任何值时,MSE和MAE可以用于,当目标输出为01y处于开放范围(0, 1)时,MLE给出非常好的结果。

话虽如此,我还没有看到之前使用的错误y - tt - y (我自己在机器学习方面经验不足)。 据我所知,你提供的源代码没有区分差异或使用绝对值,你确定这本书也没有吗? 我看待y - tt - y方式不是很好的错误措施,这就是为什么:

n = 2                 # We only have two output neurons
ts = [ 0, 1 ]         # Our target outputs
ys = [ 0.999, 0.001 ] # Our sigmoid outputs

# Notice that your outputs are the exact opposite of what you want them to be.
# Yet, if you use (y - t) or (t - y) to measure your error for each neuron and
# then sum up to get the total error of the network, you get 0.
t_minus_y = (0 - 0.999) + (1 - 0.001)
y_minus_t = (0.999 - 0) + (0.001 - 1)

编辑:根据阿尔法的评论 ,在书中, y - t实际上是MSE的衍生物。 在那种情况下, t - y是不正确的。 但请注意,MSE的实际导数为2 * (y - t) / n ,而不仅仅是y - t

如果你没有除以n (所以你实际上有一个求和平方误差(SSE),而不是均方误差),那么导数就是2 * (y - t) 此外,如果您使用SSE / 2作为误差测量,则导数中的1 / 22抵消,并且您将留下y - t

你必须反向传播。的衍生物

相对于y,0.5 *(yt)^ 2或0.5 *(ty)^ 2

这总是如此

yt =(yt) (+1)=(ty) ( - 1)

您可以从Padasip库中学习MLP的这种实现

文档就在这里

在实际代码中,我们经常计算NEGATIVE grad(关于w的损失),并使用w + = eta * grad来更新权重。 实际上它是一个毕业上升。

在一些教科书中,计算POSITIVE grad并且w - = eta * grad来更新权重。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM