簡體   English   中英

在深度完全連接神經網絡中進行二進制分類的反向傳播的正確方法是什么

[英]What's the proper way to do back propagation in Deep Fully Connected Neural Network for binary classification

我嘗試使用python和numpy為二進制分類實現深層全連接神經網絡,並使用Gradient Descent作為優化算法。

事實證明,即使經過1000個時期 ,我的模型仍處於嚴重擬合狀態 我的損失永遠不會超過0.69321 ,我嘗試檢查我的權重導數並立即意識到它們很小( 小至1e-7 ),如此小的梯度導致我的模型永遠不會有更大的梯度下降更新 ,也永遠不會達到全局最小值 我將詳細介紹正向和反向傳播的數學/偽代碼,請告訴我我是否處在正確的軌道上。 我將遵循DeepLearning.ai By Andrew NgDeepLearning.ai By Andrew Ng使用的命名約定。

假設我們有4層神經網絡 ,輸出層只有one node ,可以在0/1之間分類。

X -> Z1 - > A1 - > Z2 - > A2 - > Z3 - > A3 - > Z4 - > A4

Forward propagation

Z1 = W1 dot_product X + B1
A1 = tanh_activation(Z1)

Z2 = W2 dot_product A1 + B2
A2 = tanh_activation(Z2)

Z3 = W3 dot_product A2 + B3
A3 = tanh_activation(Z3)

Z4 = W4 dot_product A3 + B4
A4 = sigmoid_activation(Z4)

Backward Propagation

DA4 = -( Y / A4 + (1 - Y /  1 - A4 ) ) ( derivative of output activations or logits w.r.t to loss function )

DZ4 = DA4 * derivative_tanh(Z4) ( derivative of tanh activation, which I assume is ( 1 - (Z4 ) ^ 2 ) )
Dw4 = ( dZ4 dot_produt A3.T ) / total_number_of_samples
Db4 = np.sum(DZ4, axis = 1, keepdims = True ... ) / total_number_of_samples
DA3 = W4.T dot_product(DZ4)


DZ3 = DA3 * derivative_tanh( Z3 )
DW3 = ( DZ3 dot_product A2.T ) / total_number_of_samples
DB3 = np.sum( DZ3, .. ) / total_number_of_samples
DA2 = W3.T dot_product(DZ3)


DZ2 = DA2 * derivative_tanh( Z2 )
DW2 = ( DZ2 dot_product A1.T ) / total_number_of_samples
DB2 = np.sum( DZ2, .. ) / total_number_of_samples
DA1 = W2.T dot_product(DZ2)



DZ1 = DA1 * derivative_tanh( Z1 )
DW1 = ( DZ1 dot_product X.T ) / total_number_of_samples
DB1 = np.sum( DZ1, .. ) / total_number_of_samples

這是我的tanh實現

def tanh_activation(x):
 return np.tanh(x)


我的tanh派生實現

def derivative_tanh(x):
 return ( 1 - np.power(x,2))

在上述反向傳播步驟之后,我使用梯度下降及其各自的導數更新了權重和偏差。 但是,無論我運行算法多少次,該模型都永遠不會改善其損失,使其超過0.69並且輸出權重的導數(在我的情況下為dW4 )非常低1e-7 我假設,無論是我的derivative_tanh功能或我的計算, dZ是真的了,這是造成不好的損失值來重新傳播到網絡。 請分享您的想法,無論我對backprop的實施是否有效。 TIA。 我經歷了反向傳播梯度下降演算

如何優化神經網絡的權重..和許多其他博客,但找不到我想要的東西。

我找到了解決問題的方法,並在這里回答: 在深度完全連接的神經網絡中進行反向傳播的正確方法是什么 我建議關閉線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM