1. 程式人生 > >caffe 前向傳播和反向傳播

caffe 前向傳播和反向傳播

caffe學習筆記3從3.1開始主要翻譯一下caffe的官方文件,寫的非常好,忍不住要作一下。本篇翻譯來自caffe官網的:http://caffe.berkeleyvision.org/tutorial/forward_backward.html

前向傳播和反向傳播是計算神經網路非常重要的部分。

考慮一個簡單的邏輯迴歸分類問題

前向傳播:通過網路的輸入計算輸出結果的過程,在前向傳播中,caffe整合每一層的計算得到整個模型的計算函式,這個過程是個自底向上的過程,如圖:

資料x通過通過內積層得到g(x),然後通過softmax得到h(g(x))和損失函式(softmax loss)fw(x).


反向傳播網路:根據損失計算梯度,在反向傳播過程中,Caffe通過自動求導計算逆向組合每一層的梯度得到整個模型的梯度,在反向傳播中,這個過程是自頂向下的。如圖:

反向過程由loss開始,根據輸出計算梯度dfw/dh (fw對h求導), 模型中其餘各層的梯度根據鏈式法則計算。每層的引數:如INNER_PRODUCT層,在反饋過程中對引數計算梯度dfw/dWip.


你只需要定義好模型,這些計算就可以立即執行,caffe已經定義好的前向傳播和反向傳播的執行方法。

    Net::Forward()和Net::Backward()實現整個網路的前向與後向的傳播,Layer::Forward和Layer::Backward()計算每一層的前後向的傳播
    每一層都有backward_{cpu,gpu}和backward{cpu,gpu}方法適應不同的計算模式。但是,一個層僅能使用其中的一種模式

Solver優化一個模型,首先通過forward計算輸出和損失,然後通過backward生成模型的梯度,讓後根據梯度和權值更新最小話損失函式,Solver,Net和Layer間的分離保證了caffe的模組化設計和開源。
---------------------  
作者:thystar  
來源:CSDN  
原文:https://blog.csdn.net/thystar/article/details/51244234  
https://blog.csdn.net/thystar/article/details/51244234