一文徹底搞懂卷積神經網路的“感受野”,看不懂你來找我!
一、什麼是“感受野”
1.1 感受野的概念
“感受野”的概念來源於生物神經科學,比如當我們的“感受器”,比如我們的手受到刺激之後,會將刺激傳輸至中樞神經,但是並不是一個神經元就能夠接受整個面板的刺激,因為面板面積大,一個神經元可想而知肯定接受不完,而且我們同時可以感受到身上面板在不同的地方,如手、腳,的不同的刺激,如痛、癢等。這說明面板感受器是由很多不同的神經元控制的,那麼每一個神經元所能夠反映的那塊感受器的區域就稱之為“感受野”,感受野即每一個神經元所支配的區域,也可以說這個神經元的活動受到那一塊區域的影響。
在卷積神經網路中,整個卷積運算的過程正好和上面的面板刺激過程類似,我們可以將原始影象對應看成感受器(面板),將最終的輸出看成是做出反應的那個神經元。最終輸出到底是什麼狀態(神經元的狀態)所受到的初始影象哪一塊區域的影響(受到那一塊面板的刺激)不正是上面所描述的過程嗎?於是我們給出感受野的定義如下:
卷積神經網路每一層輸出的特徵圖(feature map)上的畫素點在原始影象上對映的區域大小;通俗點說,就是影象的最終輸出的每一個特徵(每一個畫素)到底受到原始影象哪一部分的影響。
二、圖解說明
為了更好地說明整個卷積神經網路的工作過程,下面以一個例子說明,原始影象的大小為10x10,一共設計了5個網路層,前面4個是卷積層,卷積核的大小為3x3,最後一個是池化層,大小為2x2,為了較簡單的說明,本次所有的步幅stride均為1.
注意:感受野在計算的時候不考慮“邊界填充”,因為填充的邊界已經不是原始影象本身的內容了,感受野描述的是輸出特徵到原始影象的對映關係,故而不考慮padding 。實際建模過程中可能需要填充邊界,原理一樣,只是計算稍微複雜點。
2.1 圖解步驟拆分
2.1.1 第一次卷積運算
從上面可以看出:第一層網路輸出的影象中,輸出結果為8x8,output1輸出的每一個特徵(即每一個畫素)受到原始影象的3x3區域內的影響,故而第一層的感受野為3,用字母表示為
RF1=3 (每一個畫素值與原始影象的3x3區域有關)
2.1.2 第二次卷積運算
從上圖可以看出,經歷兩次卷積運算之後,最終的輸出影象為6x6,output2輸出的每一個特徵(即每一個畫素)受到output1的範圍影響為3x3,而output1中的這個3x3又收到原始影象的5x5的範圍的影響,故而第二層的感受野為5,即
RF2=5 (每一個畫素值與原始影象的5x5區域有關)
2.1.3 第三次卷積運算
從上圖可以看出,經歷三次卷積運算之後,最終的輸出影象為4x4,output3輸出的每一個特徵(即每一個畫素)受到output2的範圍影響為3x3,而output2中的這個3x3又受到output1的5x5的範圍的影響,而output1中的這個5x5又受到原始影象的7x7的範圍的影響,故而第三層的感受野為7,即
RF3=7 (每一個畫素值與原始影象的7x7區域有關)
2.1.4 第四次卷積運算
從上圖可以看出,經歷四次卷積運算之後,最終的輸出影象為2x2,output4輸出的每一個特徵(即每一個畫素)受到output3的範圍影響為3x3,而output3中的這個3x3又受到output2的5x5的範圍的影響,而output2中的這個5x5又受到output1的7x7的範圍的影響,而output1中的這個7x7又受到原始圖形的9x9的範圍的影響,故而第四層的感受野為9,即
RF4=9 (每一個畫素值與原始影象的9x9區域有關)
2.1.5 第五次卷積運算
從上圖可以看出,經歷四次卷積運算和一次池化運算之後,最終的輸出影象為1x1,output5輸出的每一個特徵(即每一個畫素)受到output4的範圍影響為2x2,而output4中的這個2x2又受到output3的4x4的範圍的影響,而output3中的這個4x4又受到output2的6x6的範圍的影響,而output2中的這個6x6受到output1的8x8的範圍的影響,而output1中的這個8x8受到原始影象的10x10的範圍的影響,故而第五層的感受野為10,即
RF5=10 (每一個畫素值與原始影象的10x10區域有關)
本節總結
從上面的地推過程可以看出,隨著卷積層數的逐漸增加,感受野的範圍在逐漸擴大,也就是說,越靠近後面的輸出,所受到的影象的畫素影響的範圍更加寬闊。卷積神經網路正是通過這種層層推進的方式,每一個卷基層都能學習到不同的特徵,最後實現相關的識別、分類等功能的
三、遞推公式推導
3.1 遞推公式
3.1
從上面的過程可以看出,感受野的推導是一個遞推的過程,下面將展示這一過程。
RF1=3 k1(第一層的感受野,永遠等於第一個卷積核的尺寸大小)k表示第幾個卷積層
RF2=5 k1 + (k2-1) RF1+ (k2-1)
RF3=7 k1 + (k2-1) + (k3-1) RF2+ (k3-1)
RF4=9 k1 + (k2-1) + (k3-1) + (k4-1) RF3+ (k4-1)
RF4=10 k1 + (k2-1) + (k3-1) + (k4-1) + (k5-1) RF4+ (k5-1)
總結:從上面可以看出,感受野的大小的求解是一個不斷第一的過程,因為第一層的每一個畫素的感受野始終是第一個卷積核的大小,故而RF1總是最先確定,然後以此類推,逐步求出RF2、RF3、RF4、RF5……
但是上面的所有步長均為 1 ,如果每一次卷積運算的步長 stride 不為1呢,同理,這裡直接給出遞推公式:
RFn=RFn-1 + (kn-1)*stride_n
其中stride_n表示的是第n次卷積的移動步幅stride。
求解過程是從RF1開始的。
全文總結
感受野是卷積神經網路中非常核心的概念,它有助於我們層層剖析每一步卷積所發生的過程,對於我們理解卷積神經網路的運算過程、本質原理都非常有幫助。