caffe中的backward理解

2021-07-16 10:12:25 字數 1209 閱讀 8407

1. 在本質上backward解決的是導數計算的問題,用的就是bp演算法,所謂的bp演算法就是使用當前層權重對於當前誤差加權然後傳遞到下層節點的乙個流程。下圖是caffe的doc中示意的,這裡面有兩部分,乙個部分就是向下傳遞的對於g的偏導數,這個數值就是反向傳播的輸出;另外一部分就是在當前層中對於當前權重的求導。

2. 下面將通過乙個簡單的三層網路來說明一下caffe的backward過程所傳遞的內容的具體形式。

a. 如下圖所示,這是乙個簡單的nn的結構,其輸出層就乙個節點。其中x代表輸入資料,a代表每一層的啟用值,對應h。在下面的描述中採用z來對應g。

在加入正則項之後,loss形式為

b.  對於輸入層net的求導

對於第n_ 輸出層 的每個輸出單元i ,我們根據以下公式計算對於z的導數,把z看成乙個區域性net的話,這個就是對於net進行的求導。

其中s_為當前輸出層的神經元的個數,a為第j個神經元的啟用值,這個值是通過啟用函式f計算得到(如的logistic函式),f的輸入就是z。因為當  i != j  的時候,導數為0,因此得到了第三行的求導結果。

c. 對於非輸入層net的求導

根據基本的鏈式法則可以推導到倒數第二行,裡面的導數部分就變成了當前層的每乙個神經元z_對於下一層的z_求導的乙個過程,將z_做乙個展開,就是z_層啟用的乙個加權和,如b所示,得到了最終的對於非輸入層的導數。其中w_指的的是輸出層和隱藏層之間的權重鏈結。

這個導數分為兩部分,一部分就是括號內的,是上層導數在當前層節點上的加權和,這個定義了誤差專遞的方式,也就是反向傳播的乙個核心;第二項就是當前層啟用函式對於net的導數。這樣就得到了乙個反向轉播的遞推公式。caffe中backward的就是在傳遞每乙個節點的導數的計算值。

d. 在傳遞完

caffe中backward過程總結

感謝樓主總結!backward是利用代價函式求取關於網路中每個引數梯度的過程,為後面更新網路引數做準備。求取梯度的過程也是乙個矩陣運算的過程,後面會有詳細介紹,本身求取梯度的過程並不是很複雜,而且網路中的各層求取梯度的過程都是相似的。下面就按照backward的執行順序,從最後一層向前介紹caffe...

對Pytorch中backward()函式的理解

寫在第一句 這個部落格解釋的也很好,參考了很多 pytorch中的自動求導函式backward 所需引數含義 所以切入正題 backward 函式中的引數應該怎麼理解?官方 如果需要計算導數,可以在tensor上呼叫.backward 1.如果tensor是乙個標量 即它包含乙個元素的資料 則不需要...

Caffe中的工具之Caffe

簡介 caffe的tools目錄下提供了乙個caffe.cpp,經過編譯工具的編譯會生成乙個命令列工具caffe。該工具提供的功能有 train,test,device query,time。訓練的方法 這裡先分析train的功能,也就是訓練。訓練既支援從零開始訓練,也支援在已有的模型基礎上進行fi...