1. 程式人生 > >Caffe tutorial 之 前向與反向傳播

Caffe tutorial 之 前向與反向傳播

前向與反向傳播

前向與後向傳播是網路中重要的計算部分。


接下來以簡單的邏輯迴歸分類器為例介紹。

前向傳播用於計算推理過程中給定輸入的輸出。在前向傳播中,Caffe將每層的計算進行組合從而得到模型所代表的“函式”。此過程由底向上進行。


資料x經過全連線層(內積層)生成g(x),之後通過softmax層產生h(g(x)),從而給出softmax損失fW(x)

反向過稱用於計算給定損失的梯度。在反向傳播中,Caffe將每層的梯度反向組合以自動計算整個模型的梯度。此即反向傳播,此過程由頂向下進行。


反向過程起始於損失值並且計算輸出fWh。模型中剩餘部分的梯度將會根據鏈式法則逐層計算。含有引數的層,如INNER_PRODUCT
層,在反向傳播中根據其引數計算梯度fWWip

這些計算會根據模型的計算立即執行: Caffe會自動執行前向及後向傳播。

  • Net::Forward()和 Net::Backward()方法計算前向、後向傳播,而Layer::Forward()和Layer::Backward()則是計算每一步的前向與後向傳播。
  • 每層含有forward_{cpu,gpu}() 和backward_{cpu,gpu}()根據計算模式來計算其每一步的傳播過程。使用者可以根據實際情況,只實現層的CPU或GPU模式。

Solver第一次進行前向傳播產生輸出和損失,之後進行反向傳播算得模型梯度,之後根據梯度更新模型引數以最小化損失。通過將Solver、Net和Layer的分離,從而使Caffe模組化,易於開發。

Caffe中不同型別的層的前向和反向傳播的細節,請參見layer catalogue