局部連接與權值共享
下圖是一個很經典的圖示,左邊是全連接,右邊是局部連接。
對於一個1000 × 1000的輸入圖像而言,如果下一個隱藏層的神經元數目為10^6個,采用全連接則有1000 × 1000 × 10^6 = 10^12個權值參數,如此數目巨大的參數幾乎難以訓練;而采用局部連接,隱藏層的每個神經元僅與圖像中10 × 10的局部圖像相連接,那么此時的權值參數數量為10 × 10 × 10^6 = 10^8,將直接減少4個數量級。
盡管減少了幾個數量級,但參數數量依然較多。能不能再進一步減少呢?能!方法就是權值共享。具體做法是,在局部連接中隱藏層的每一個神經元連接的是一個10 × 10的局部圖像,因此有10 × 10個權值參數,將這10 × 10個權值參數共享給剩下的神經元,也就是說隱藏層中10^6個神經元的權值參數相同,那么此時不管隱藏層神經元的數目是多少,需要訓練的參數就是這 10 × 10個權值參數(也就是卷積核(也稱濾波器)的大小),如下圖。
這大概就是CNN的一個神奇之處,盡管只有這么少的參數,依舊有出色的性能。但是,這樣僅提取了圖像的一種特征,如果要多提取出一些特征,可以增加多個卷積核,不同的卷積核能夠得到圖像的不同映射下的特征,稱之為Feature Map
。如果有100個卷積核,最終的權值參數也僅為100 × 100 = 10^4個而已。另外,偏置參數也是共享的,同一種濾波器共享一個。
卷積神經網絡的核心思想是:局部感受野(local field),權值共享以及時間或空間亞采樣這三種思想結合起來,獲得了某種程度的位移、尺度、形變不變性(?不夠理解透徹?)。
網絡結構
下圖是一個經典的CNN結構,稱為LeNet-5網絡
。
可以看出,CNN中主要有兩種類型的網絡層,分別是卷積層和池化/采樣層(Pooling)。卷積層的作用是提取圖像的各種特征;池化層的作用是對原始特征信號進行抽象,從而大幅度減少訓練參數,另外還可以減輕模型過擬合的程度。
卷積層
卷積層是卷積核在上一級輸入層上通過逐一滑動窗口計算而得,卷積核中的每一個參數都相當於傳統神經網絡中的權值參數,與對應的局部像素相連接,將卷積核的各個參數與對應的局部像素值相乘之和,(通常還要再加上一個偏置參數),得到卷積層上的結果。如下圖所示。
下面的動圖能夠更好地解釋卷積過程: