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

caffe中的前向傳播和反向傳播

sla hit img 部分 可能 說明 caff .com 容易

caffe中的網絡結構是一層連著一層的,在相鄰的兩層中,可以認為前一層的輸出就是後一層的輸入,可以等效成如下的模型

技術分享圖片

可以認為輸出top中的每個元素都是輸出bottom中所有元素的函數。如果兩個神經元之間沒有連接,可以認為相應的權重為0。其實上圖的模型只適用於全連接層,其他的如卷積層、池化層,xy之間很多是沒有連接的,可以認為很多權重都是0,而池化層中有可能部分x與y之間是相等的,可以認為權重是1。

下面用以上的模型來說明反向傳播的過程。在下圖中,我用虛線將y與損失Loss之間連接了起來,表示Loss必然是由某種函數關系由y映射而成,我們只需要這個函數是由後面的網絡參數決定的,與這一層的網絡參數無關就行了。

技術分享圖片

當我們知道了Loss對本層輸出的偏導數dy,便能推出Loss對本層輸入x及本層網絡參數w的偏導數。

先推Loss對輸入x的偏導數。由

技術分享圖片

可知,yx的偏導數如下,其中g為某種函數映射,它由上面的f唯一地確定,因而是一種已知的映射。

技術分享圖片

由此推出Loss對x的偏導數如下,其中h也為某種函數映射,也是由上面的f唯一地確定,是一種已知的映射。

技術分享圖片

至於Loss對該層網絡參數w的偏導數,由上述公式很容易得到

技術分享圖片

技術分享圖片

其中的p、q和g、h一樣,都是由f確定的已知映射。

從上面的分析中可以看出,只要知道了Loss對本層輸出的偏導數dy,就能計算出本層參數的梯度,並且求出Loss對本層輸入x的偏導數dx。而本層的輸入恰是上一層的輸出,因此這中計算可以由後向前地遞推下去,這就是反向傳播的大體過程,示意圖如下圖所示

技術分享圖片

以上便是caffe實現反向傳播的整體思路。對不同的層,由於前向傳播的過程f不一樣,所以對應的反向傳播的過程p、q也是不一樣的。在後面的章節中,我將結合源代碼,分析ConvolutionLayer、PoolingLayer、InnerProductLayer、ReLULayer、SoftmaxLayer、SoftmaxWithLossLayer這幾種層前向傳播、後向傳播的具體過程。

caffe中的前向傳播和反向傳播