CNN(卷積神經網絡)的偏差反傳(error back propagation)中有一個很是關鍵的的步驟就是將某個卷積(Convolve)層的偏差傳到前一層的池化(Pool)層上,由於在CNN中是2D反傳,與傳統神經網絡中的1D反傳有點細節上的不一樣,下面經過一個簡單的例子來詳細分解一下這個反傳步驟。 網絡
假設在一個CNN網絡中,P表明某個池化層,K表明卷積核,C表明卷基層,首先來看一下前向(feed forward)計算,從一個池化層通過與卷積核(Kernel)的運算獲得卷積層: 函數
將前向計算的步驟進行分解,能夠獲得如下公式: 3d
下面根據這個前向計算的步驟來分解出反向傳播的步驟: blog
首先要肯定偏差傳播的目的地,從deltaC到deltaP,因此先從deltaP1開始分析 io
從前面的前向計算過程當中能夠找出P1參與了C中哪些元素的計算,而且能夠根據對應的前向計算得出反向傳播的計算公式: 神經網絡
依次類推,還有以下公式: im
對於P2 d3
對於P3 error
對於P4 總結
對於P5
一直能夠推到P9
總結這9個反向傳播的公式到一塊兒:
進一步能夠發現,這9個公式能夠用以下的卷積過程來實現:
至此,從計算的細節上解釋了爲何反向傳播的時候要把卷積核旋轉180°,並採用full的形式來進行卷積運算。
(注:上文所說的「卷積」被認爲是一種不會180°旋轉第二個因子的的計算過程,實際上matlab中的的conv2(a,b)會自動180°旋轉b,換句話說,在matlab中實現這個步驟的時候不用提早旋轉,留給conv2函數自行旋轉便可)