前向傳播和反向傳播 手撕 神經網路反向傳播

2021-10-11 18:20:20 字數 2599 閱讀 4238

神經網路前向傳播一般用於搭建整個神經網路的結構框架,形成整個網路的邏輯通路。反向傳播用於更新每層之間的權重,減少損失,進而提公升**準確度。 下面是乙個神經網路的結構圖:

第一層是輸入層,包含兩個神經元i1,i2,和截距項b1;第二層是隱含層,包含兩個神經元h1,h2和截距項b2,第三層是輸出o1,o2,每條線上標的wi是層與層之間連線的權重,啟用函式我們預設為sigmoid函式。

ps:啟用函式的作用:

正如上圖所示,每個神經元節點可以分為兩部分,第一步是從前面計算而來的neti,但這個net_i不能直接傳送給後面。第二步就是利用啟用函式計算出out_i,再根據權重傳給後面。
初始化神經網路附上權重以後如下圖:

其中,

輸入資料 i1=0.05,i2=0.10;

輸出資料 o1=0.01,o2=0.99;

初始權重 w1=0.15,w2=0.20,w3=0.25,w4=0.30; w5=0.40,w6=0.45,w7=0.50,w8=0.55;

目標:給出輸入資料i1,i2(0.05和0.10),使輸出盡可能與原始輸出o1,o2(0.01和0.99)接近。

step1: 前向傳播

1. 輸入層 → 隱含層

計算神經元h1的輸入加權和(net_h1):

邏輯表示式為:

矩陣表示形式為:

如: 再利用softmax啟用函式計算得到

同理我們可以計算出:

2. 隱含層→ 輸出層

邏輯表示式為:

矩陣表示形式為:

如: 再利用softmax啟用函式計算得到

同理我們可以計算出:

我們得到輸出值為[0.75136079 , 0.772928465],與實際值[0.01 , 0.99]相差還很遠,現在我們對誤差進行反向傳播,更新權值,重新計算輸出。

step 2 :反向傳播

1.計算總誤差

總誤差——使用均方誤差(square error):

target表示目標值,即正確的應該是多少。

所以:2.隱含層 → 輸出層的權值更新:

大體思路:

1.利用偏導數大小量化每個引數對結果的影響(後乙個對傳向前乙個的權重w的偏導)。

2.更新:

計算偏導數要用到鏈式求導法則。
比如我們要**更新w5**:

也就是下圖所演示的過程:

可表示為:

可表示為:

可表示為:

所以算出偏導數為:

2.更新

為 同理:

3.隱含層 →隱含層的權值更新:

方法其實與上面說的差不多,但是有個地方需要變一下,在上文計算總誤差對w5的偏導時,是從out(o1)---->net(o1)---->w5,但是在隱含層之間的權值更新時,是out(h1)---->net(h1)---->w1,而out(h1)會接受e(o1)和e(o2)兩個地方傳來的誤差,所以這個地方兩個都要計算。

直接放計算結果:

最後更新w1:

同理:

這樣誤差反向傳播法就完成了,最後我們再把更新的權值重新計算,不停地迭代,在這個例子中第一次迭代之後,總誤差e(total)由0.298371109下降至0.291027924。迭代10000次後,總誤差為0.000035085,輸出為[0.015912196,0.984065734] (原輸入為[0.01,0.99]),證明效果還是不錯的。

總結:

所以反向傳播最主要的是要清楚求偏導的那個遞推公式:

注意1:從哪開始推?

從最終得到的誤差開始,如果輸出有多個,應疊加。

注意2:推到哪結束?

利用w計算出了什麼(下個節點的net值),就推到net對w求偏導為止。

原始英文出處:a step by step backpropagation example

神經網路前向傳播與反向傳播

神經網路 神經網路可以理解為乙個輸入x到輸出y的對映函式,即f x y,其中這個對映f就是我們所要訓練的網路引數w,我們只要訓練出來了引數w,那麼對於任何輸入x,我們就能得到乙個與之對應的輸出y。只要f不同,那麼同乙個x就會產生不同的y,我們當然是想要獲得最符合真實資料的y,那麼我們就要訓練出乙個最...

神經網路 前向,反向傳播過程

x,資料集矩陣。每一行的元素代表了乙個樣例的特徵值x1,x2,x3.共有n行,說明資料集一共n個樣例 theta,引數矩陣 行數 要生成的神經元個數 列數 上一層的輸入個數 每一行的元素代表了對樣例各個特徵值的權重 以資料集為x 5 3 使用上圖的網路結構為例 輸入層 x 5 3 說明資料集有5個樣...

詳解神經網路的前向傳播和反向傳播(從頭推導)

詳解神經網路的前向傳播和反向傳播 本篇部落格是對michael nielsen所著的 neural network and deep learning 第2章內容的解讀,有興趣的朋友可以直接閱讀原文neural network and deep learning。對神經網路有些了解的人可能都知道,神...