1. 程式人生 > >CNN 的卷積過程為什麼 要將卷積核旋轉180°

CNN 的卷積過程為什麼 要將卷積核旋轉180°

       CNN(卷積神經網路)的誤差反傳(error back propagation)中有一個非常關鍵的的步驟就是將某個卷積(Convolve)層的誤差傳到前一層的池化(Pool)層上,因為在CNN中是2D反傳,與傳統神經網路中的1D反傳有點細節上的不同,下面通過一個簡單的例子來詳細分解一下這個反傳步驟。


       假設在一個CNN網路中,P代表某個池化層,K代表卷積核,C代表卷基層,首先來看一下前向(feed forward)計算,從一個池化層經過與卷積核(Kernel)的運算得到卷積層:



       將前向計算的步驟進行分解,可以得到以下公式:



       下面根據這個前向計算的步驟來分解出反向傳播的步驟:



       首先要確定誤差傳播的目的地,從deltaC到deltaP,所以先從deltaP1開始分析


       從前面的前向計算過程中可以找出P1參與了C中哪些元素的計算,並且可以根據對應的前向計算得出反向傳播的計算公式:



       依次類推,還有如下公式:


       對於P2


       對於P3


       對於P4



       對於P5



       一直可以推到P9


       總結這9個反向傳播的公式到一起:



       進一步可以發現,這9個公式可以用如下的卷積過程來實現:



       至此,從計算的細節上解釋了為什麼反向傳播的時候要把卷積核旋轉180°,並採用full的形式來進行卷積運算。

       (注:上文所說的“卷積”被認為是一種不會180°旋轉第二個因子的的計算過程,實際上matlab中的的conv2(a,b)會自動180°旋轉b,換句話說,在matlab中實現這個步驟的時候不用提前旋轉,留給conv2函式自行旋轉即可)