CNN 的卷積過程為什麼 要將卷積核旋轉180°
阿新 • • 發佈:2018-12-01
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函式自行旋轉即可)