天天看點

卷積神經網絡筆記

      斯坦福CS231n課程确實很好,學了有兩三遍,每次都有不一樣的收獲,了解的也更深刻。這裡把自己覺得重要的東西記錄下來,以加深印象,同時便于查閱。CS211n簡書筆記連結:https://www.jianshu.com/p/182baeb82c71

      卷積神經網絡依舊是一個可導的評分函數,該函數輸入為原始圖像像素,輸出是不同類别的評分。并假設輸入資料是圖像,基于該假設,向結構中添加一些特有性質。正常神經網絡的輸入是一個向量,對大尺寸圖像效果不好,效率低下,大量參數導緻網絡過拟合。

      神經元的各層三維排列:寬度,高度和深度(深度是指激活函數資料體的第3個次元,不是整個網絡深度,整個網絡深度指網絡層數)。例如:CIFAR-10,32x32x3(寬度,高度,深度)。層中神經元隻有前一層中的一小塊區域連接配接,不是全連接配接。神經元排列形式實質上為資料的結構大小,連接配接線強度才是權重參數。卷積神經網絡由層組成,每一層有一個簡單的API:用一些含或者不含參數的可導函數,将輸入的3D資料變換為3D的輸出函數。普通神經網絡與卷積神經網絡:

卷積神經網絡筆記

用來建構卷積神經網絡的各種層:

      卷積神經網絡中每個層使用一個可微風函數将激活資料從一個層傳遞到另一個層,主要包含:卷積層(convolution)、彙聚層(pooling)和全連接配接層(和正常網絡相同)。例如對于CIFAR-10輸入,形式可以為[輸入層-卷積層-ReLU層-彙聚層-全連接配接層],32x32x3輸入,卷積層中神經元與輸入層一個局部區域相連,每個神經元都計算自己與輸入層相連的小區域與自己權重的内積。卷積層計算所有神經元輸出,若采用12個濾波器(核),輸出為[32x32x12]。

      ReLU層對逐個元素進行激活函數操作,如max(0,x),該層對資料尺寸沒有改變,還是[32x32x12]。

      彙聚層在空間次元(寬和高)上進行降采樣(downsampling),如采用2x2尺寸為[16x16x12]。

      卷積層和全連接配接層(CONV/FC)對輸入執行變換時,不僅用到激活函數,還會用到很多參數(W,b),ReLU層和彙聚層進行固定不變的函數操作。ReLU層沒有超參數,其他3層有。

卷積層(核心層):

      卷積層的參數是由一些可學習的濾波器集合構成的,每個濾波器在空間上(寬和高)都比較小,深度與輸入資料一緻。如卷積神經網絡第一層一個典型的濾波器尺寸可以是5x5x3,在前向傳播時,讓每個濾波器在輸入資料的寬和高上滑動(卷積),計算整個濾波器和輸入資料任一處的内積。生成一個2維激活圖(activation map),激活圖給出了在每個空間位置處濾波器的反應(網絡會讓濾波器學習到當它看到某些類型的視覺特性時就激活,如某些顔色斑點,車輪狀圖案等)。

      每個卷積層上,有一整個集合的濾波器(如12個),每個都會生成一個不同的二維激活圖,深度方向上層疊起來就生成了輸出資料。3D資料中的每個資料項看成神經元的一個輸出,且該神經元隻觀察輸入資料中的一小部分,和空間上左右兩邊所有神經元共享參數(因為這些數字都是使用同一個濾波器得到的)。

      局部連接配接:每個神經元隻與輸入資料的一個局部區域連接配接,該連接配接空間大小叫做神經元的感受野(receptive field),其尺寸為超參數,即濾波器的空間尺寸。在深度方向上的多個神經元,感受野大小相同,但權重不同。單個神經元保持不變,仍是計算權重和輸入内積,然後進行激活函數(在ReLU層做激活),隻是被限制在一個局部空間。

卷積神經網絡筆記

      神經元空間排列:3個超參數:深度(depth),步長(stride),零填充(zero-padding)。

      深度:與濾波器數量一緻,沿深度方向排列,感受野相同的神經元集合稱為深度列(depth column)。

      步長:濾波器每次移動像素數,會讓輸出資料體在空間上變小。

      零填充:用來保持輸入資料體在空間上的尺寸,保證寬高相等。

      輸出資料體的空間尺寸為:(W-F+2P)/S+1    其中W為輸入資料體尺寸(假設為正方形),F為神經元感受野尺寸,S為步長,P為零填充。當步長S為1時,零填充的值是P=(F-1)/2,可以保證輸入輸出空間尺寸相同,注意這些空間排列的超參數之間是互相限制的。

      參數共享:如果一個特征在計算某個空間位置(x,y)的時候有用,那麼它在計算另一個不同位置(x2,y2)的時候也有用。深度切片共享參數,反向傳播時,需計算每個神經元對它權重的梯度,把同一個深度切片上所有神經元對權重的梯度累加,得到對共享權重的梯度。權重集合稱為濾波器(filter)或卷積核(kernel)。

      當卷積神經網絡的輸入圖像是一些明确的中心結構時,參數共享假設可能沒有意義。此時期望在圖檔的不同位置學習到完全不同的特征,如人臉,希望不同特征,如眼睛,頭發在不同位置被學習。此時可以通過放松參數共享限制,将層稱為局部連接配接層。

小節    卷積層性質:

      輸入資料體尺寸為:W1xH1xD1,  4個超參數:濾波器數量K,濾波器空間尺寸F,步長S,零填充P。

    輸出資料體尺寸為:W2xH2xD2,其中W2=(W1-F+2P)/S+1;H2=(H1-F+2P)/S+1(寬度和高度計算方法相同);D2=K。

      由于濾波器參數共享,每個濾波器包含F•F•D1個權重,卷積層共有F•F•D1•K個權重和K個偏置。

      超參數常見設定F=3,S=1,P=1。

     用矩陣乘法實作:卷積運算本質上是在濾波器和輸入的局部區域間做點積,利用這點,将前向傳播變成一個巨大的矩陣乘法。

      1.輸入圖像的局部區域被im2col操作拉伸為列。比如,如果輸入是[227x227x3],要與尺寸為11x11x3的濾波器以步長為4進行卷積,就取輸入中的[11x11x3]資料塊,然後将其拉伸為長度為11x11x3=363的列向量。重複進行這一過程,因為步長為4,是以輸出的寬高為(227-11)/4+1=55,是以得到im2col操作的輸出矩陣X_col的尺寸是[363x3025],其中每列是拉伸的感受野,共有55x55=3,025個。注意因為感受野之間有重疊,是以輸入資料體中的數字在不同的列中可能有重複。

2.卷積層的權重也同樣被拉伸成行。舉例,如果有96個尺寸為[11x11x3]的濾波器,就生成一個矩陣W_row,尺寸為[96x363]。

      3.現在卷積的結果和進行一個大矩陣乘np.dot(W_row, X_col)是等價的了,能得到每個濾波器和每個感受野間的點積。在我們的例子中,這個操作的輸出是[96x3025],給出了每個濾波器在每個位置的點積輸出。

4.果最後必須被重新變為合理的輸出尺寸[55x55x96]。

優點:舉證乘法實作高效;缺點:占記憶體。

反向傳播:卷積的反向傳播(同時對于數量和權重)還是卷積(但是是空間上翻轉的濾波器)。

彙聚層:

通常,在連續的卷積層之間會周期性地插入一個彙聚層。它的作用是逐漸降低資料體的空間尺寸,這樣的話就能減少網絡中參數的數量,使得計算資源耗費變少,也能有效控制過拟合。彙聚層使用MAX操作,對輸入資料體的每一個深度切片獨立進行操作,改變它的空間尺寸。最常見的形式是彙聚層使用尺寸2x2的濾波器,以步長為2來對每個深度切片進行降采樣,将其中75%的激活資訊都丢掉,深度不變。

MAX操作是從4個數字中取最大值(也就是在深度切片中某個2x2的區域),公式為:

輸入資料體尺寸

卷積神經網絡筆記

,有兩個超參數:空間大小

卷積神經網絡筆記

,步長S

      輸出資料體尺寸

卷積神經網絡筆記

,其中:

卷積神經網絡筆記

在實踐中,最大彙聚層通常隻有兩種形式:一種是

卷積神經網絡筆記

,也叫重疊彙聚(overlapping pooling),另一個更常用的是

卷積神經網絡筆記

。對更大感受野進行彙聚需要的彙聚尺寸也更大,而且往往對網絡有破壞性。

反向傳播:max(x,y)函數将梯度沿着最大數回傳,在前向傳播時,通常把最大元素索引記錄下來(也叫道岔)。

也可在卷積層中使用更大步長來降低資料尺寸,不采用彙聚層。

全連接配接層:

與正常神經網絡一樣。全連接配接層和卷積層唯一不同就是卷積層中的神經元隻與輸入資料中的一個局部區域連接配接,且在卷積列中的神經元共享參數,故兩者可互相轉化。如全連接配接層→卷積層:将濾波器尺寸設定為和輸入資料體尺寸一緻。

卷積層神經網絡的結構:

卷積神經網絡最常見的形式就是将一些卷積層和ReLU層放在一起,其後緊跟彙聚層,然後重複如此直到圖像在空間上被縮小到一個足夠小的尺寸,在某個地方過渡成成全連接配接層也較為常見。最後的全連接配接層得到輸出,比如分類評分等。換句話說,最常見的卷積神經網絡結構如下:

INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC

其中*指的是重複次數,POOL?指的是一個可選的彙聚層。其中N >=0,通常N<=3,M>=0,K>=0,通常K<3。例如:

INPUT -> FC,實作一個線性分類器,此處N = M = K = 0

在執行具有破壞性的彙聚操作前,多重的卷積層可以從輸入資料中學習到更多的複雜特征。

幾個小濾波器卷積層的組合比一個大濾波器卷積層好。多層比單一層結構更能提取出深層的更好特征,參數也較少。缺點:反向傳播時,中間卷積層導緻占用記憶體多。

層的尺寸設定規律:

輸入層(包含圖像的)應該能被2整除很多次。

卷積層應該使用小尺寸濾波器(比如3x3或最多5x5),零填充保證尺寸不變,一般采用步長為1。

彙聚層負責對輸入資料的空間次元進行降采樣。最常用的設定是用用2x2感受野(即

卷積神經網絡筆記

)的最大值彙聚,最大值彙聚感受野尺寸很少超過3,因為彙聚激烈,易造成資料資訊丢失。

因為記憶體限制,通常在第一個卷積層做出妥協(如步長為2,7x7的濾波器來減少尺寸)。

常見卷積網絡結構:

LeNet,AlexNet,GoogLeNet,VGGNet,ResNet等。注意,大部分記憶體和計算時間都被前面卷積占用,大部分參數都用在後面的全連接配接層。

占用記憶體來源:

(1)來自中間資料體尺寸:卷積神經網絡中的每一層中都有激活資料體的原始數值,以及損失函數對它們的梯度(和激活資料體尺寸一緻)。通常,大部分激活資料都是在網絡中靠前的層中(比如第一個卷積層)。在訓練時,這些資料需要放在記憶體中,因為反向傳播的時候還會用到。但是在測試時可以聰明點:讓網絡在測試運作時候每層都隻存儲目前的激活資料,然後丢棄前面層的激活資料,這樣就能減少巨大的激活資料量;

(2)來自參數尺寸:即整個網絡的參數的數量,在反向傳播時它們的梯度值,以及使用momentum、Adagrad或RMSProp等方法進行最優化時的每一步計算緩存。是以,存儲參數向量的記憶體通常需要在參數向量的容量基礎上乘以3或者更多;

(3)卷積神經網絡實作還有各種零散的記憶體占用,比如成批的訓練資料,擴充的資料等。

常用方法是降低批尺寸(batch size),因為絕大多數記憶體被激活資料消耗了。

繼續閱讀