理解back propagation反向傳播

2021-07-29 21:42:18 字數 1840 閱讀 8192

首先需要明白back propagation的作用:

深度學習的訓練是成本函式(cost function)最小化的過程,一般採取梯度下降法求解。那麼怎麼計算梯度呢?這就要用到back propagation了。

計算乙個數學表示式的梯度是很直接的,但計算是昂貴的。而反向傳播演算法使用簡單的方法有效的減少了計算量。

反向傳播經常被誤解為神經網路的整個學習演算法。 實際上,反向傳播僅用於計算梯度,然後另一種演算法(如隨機梯度下降sgd)利用反向傳播得到的梯度進行學習。

下面以求f(

x,y,

z)=(

x+y)

z 的偏導為例:

引入乙個中間變數

q ,將公式分成兩部分:q=

x+y和

上圖的真實值計算線路展示了計算的視覺化過程。前向傳播從輸入計算到輸出(綠色),反向傳播尾部開始,根據鏈式法則遞迴地向前計算梯度(顯示為紅色),一直到網路的輸入端。可以認為,梯度是從計算鏈路中回流。

利用鏈式法則我們知道: ∂f

∂x=∂

f∂q∂

q∂x

在實際操作中,這只是簡單地將兩個梯度數值相乘。反向傳播尾部開始,根據鏈式法則遞迴地向前計算梯度。

以上圖為例,反向傳播從從最上層的節點f開始,初始值為1,以層為單位進行處理。節點q接受f傳送的1並乘以該節點的偏導值-4等於-4,節點z接受f傳送的1並乘以該節點的偏導值3等於3,至此第二層完畢,求出各節點總偏導值並繼續向下一層傳送。節點q向x傳送-4並乘以偏導值1等於-4,節點q向y傳送-4並乘以偏導值1等於-4,至此第三層完畢,節點x,y的偏導值都為-4,即頂點f對x,y的偏導數均為-4.

示例**如下:

# 設定輸入值

x = -2; y = 5; z = -4

# 進行前向傳播

q = x + y # q becomes 3

f = q * z # f becomes -12

# 進行反向傳播:

# 首先回傳到 f = q * z

**** = q # df/dz = q, 所以關於z的梯度是3

dfdq = z # df/dq = z, 所以關於q的梯度是-4

# 現在回傳到q = x + y

dfdx = 1.0 * dfdq # dq/dx = 1. 這裡的乘法是因為鏈式法則

dfdy = 1.0 * dfdq # dq/dy = 1

矩陣相乘的梯度:可能最有技巧的操作是矩陣相乘(也適用於矩陣和向量,向量和向量相乘)的乘法操作:

# 前向傳播

w = np.random

.randn(5, 10)

x = np.random

.randn(10, 3)

d = w.dot(x)

# 假設我們得到了d的梯度

dd = np.random

.randn(*d.shape) # 和d一樣的尺寸

dw = dd.dot(x

.t) #.t就是對矩陣進行轉置

dx = w.t

.dot(dd)

cs231n 課程筆記翻譯:反向傳播筆記

deep learning book 6.5節

dropout理解 簡易理解

所謂的dropout,從字面意思理解,就是 拋棄 拋棄什麼呢?拋棄的是網路中隱藏層的節點 輸入層和輸出層是由資料型別和問題型別決定的,當然不能動啦!怎麼拋棄呢?dropout有乙個引數p,p的取值介於0和1,含義是每個節點有p概率被拋棄。被拋棄對這個節點有什麼影響呢?dropout對於節點的影響表現...

怎麼理解ESB(純屬個人理解)

背景,隨著公司系統越來越多,系統之間的互動也越來越多,如果服務之家沒有相應的管理支撐的話,將會出現各種點對點,混亂不堪,對於服務之間的解決方案有很多種,這裡介紹下,目前公司用到的,基於soa思想的esb,企業服務匯流排。esb 同步過程可以理解為中介或者 類似 非同步可以理解為快取資料庫,所有客戶端...

MapReduce理解 深入理解MapReduce

化簡 reducing 遍歷集合中的元素來返回乙個綜合的結果。即,輸出表單裡一列數字的和這個任務屬於reducing。input,資料讀入 123456 設定資料輸入 fileinputformat.setinputpaths job,args 0 fileinputformat.setinputd...