簡體   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