DataWhale八月組隊學習-李巨集毅深度學習Task05-網路設計的技巧
一、 為什麼使用CNN處理圖片
- 在圖片中有一些比整張圖片要小的pattern(比如鳥的圖片中鳥的喙就是一個小的pattern),識別這些pattern並不需要看整張圖片。
- 這些小的pattern會出現在圖片的不同位置,例如鳥圖片中鳥的喙可能出現在左上角也可能出現在中間。
- 對圖片進行降取樣(池化)不會改變圖片的特徵,因此神經網路處理圖片所需的引數就會更少。
二、 卷積 v.s. 全連線
可以將卷積網路看作一種特殊的的全連線網路,每一個卷積核卷積後得到的feature map可以看做一個隱藏層的輸出,feature map中的每一個數可以看做這個隱藏層的一個神經元。在這個特殊的全連線網路中隱藏層的每個神經元只會接收上一層的部分輸入,而且隱藏層的神經元對應的權重是共享的,在反向傳播過程中只需要按照一般的過程進行反向傳播,然後再將對應的共享引數取均值即可。具體的過程如下圖所示:
三、 卷積網路中的channel(通道)
對於輸入樣本中 channels 的含義。一般的RGB圖片,channels 數量是 3 (紅、綠、藍);而monochrome(單色)圖片,channels 數量是 1 。
舉個例子,如下圖,假設現有一個為 6×6×3 的圖片樣本,使用 3×3×3 的卷積核(filter)進行卷積操作。此時輸入圖片的 channels 為 3 ,而卷積核中的 in_channels 與 需要進行卷積操作的資料的 channels 一致(這裡就是圖片樣本,為3),注意每個卷積核的channels(也就是in_channels)一定是與圖片的channels一致,因為圖片的每一個channel都會分別於卷積核中對應的channel進行卷積操作。
接下來,進行卷積操作,卷積核中的27個數字與分別與樣本對應相乘後,再進行求和,得到第一個結果。依次進行,最終得到4×4的結果。
RGB圖片的卷積上面步驟完成後,由於只有一個卷積核,所以最終得到的結果為 4×4×1 , out_channels 為 1 。在實際應用中,都會使用多個卷積核。這裡如果再加一個卷積核,就會得到 4×4×2 的結果,因此卷積核的數量也就是out_channels,即該卷積層輸出的feature map的channel數。
多卷積核 總結一下,上面提到的 channels 可以分為三種:
(1)最初輸入的圖片樣本的 channels ,取決於圖片型別,比如RGB;
(2)卷積操作完成後輸出的 out_channels ,取決於卷積核的數量。此時的 out_channels 也會作為下一次卷積時的卷積核的 in_channels;
(3)卷積核中的 in_channels ,剛剛(2)中已經說了,就是上一次卷積的 out_channels ,如果是第一次做卷積,就是(1)中樣本圖片channels。
四、卷積網路學到了什麼(視覺化)
以下圖網路結構為例:
網路結構4.1 卷積核學到了什麼
定義第k個卷積核的啟用度:
卷積核的啟用度每個卷積核負責偵測影象中的一種pattern,啟用度越高說明影象中出現越多的這種pattern。在訓練模型完成以後,將啟用度看做因變數,影象看做自變數,通過極大化啟用度而得到的影象即是該卷積核所偵測的pattern,也就實現了一個視覺化的過程。具體過程如下所示:
視覺化這裡列出12個卷積核求解得到的結果,可以看到每個卷積核都會偵測一種pattern。
4.2 全連線隱藏層神經元學到了什麼
全連線隱藏層將神經元的輸出看做因變數做同樣的最優化過程得到結果,從上圖中可以看出與卷積核只偵測小的pattern不同,全連線隱藏層的神經元會看到整張影象的特徵。
4.3 輸出層神經元學到了什麼
輸出層上圖為使用CNN對手寫體數字識別資料集訓練出來的網路結構的輸出層視覺化的結果,可以看到得到的結果並非類似數字的影象,可見機器和人識別影象的方式是不一樣的。將輸出層節點的值進行L1正則化然後再看求解得到的結果就可以隱約看出數字的特徵了:
正則化五、卷積網路應用
5.1 Deep Dream
Deep Dream不修改引數,而是修改輸入影象,生成一些奇特的影象。
Deep Dream效果5.2 Deep Style
Deep Style效果其實現的大體原理如下:
Deep Style保留左邊圖片卷積核的輸出值,輸出值代表了圖片的內容;保留右邊圖片卷積核之間的相關性(corelation),相關性代表了圖片的風格,然後進行最優化(maximum),最終就會得到右圖風格的左圖,效果如下:
效果5.3 下圍棋(Alpha Go)
使用神經網路來預測下一步棋的位置時,網路的輸入是當前的棋盤的狀態(shape:19 * 19,黑子:1,白字:-1,空:0),輸出下一步的位置。
解決這個問題既可以使用全連線網路,也可以使用CNN,但是CNN效果更好,這是因為下圍棋的問題符合一中介紹的選擇CNN的理由:
- 通過圍棋的特點可以知道,只需要偵測棋盤上一些小的pattern就可以進行識別。
- 這些小的pattern可能存在於棋盤的不同位置(指可能存在於棋盤的左上角或中間等位置)。
(注:由於棋盤不同於圖片,圖片進行降取樣以後仍然可以識別特徵而圍棋棋盤不可以,所以Alpha Go所使用的的CNN架構中沒有池化層。)
5.4 語音辨識
卷積核只在Frequency方向上移動,這是因為在時間上移動卷積核意義不大,比如同樣說“你好”,男女的聲音很可能只是在Frequency上有差別。
5.5 文字識別
同樣的卷積核只橫向移動,這是因為每個詞向量的不同維度之間是獨立的。因此在CNN的實際應用中要根據實際情況選擇卷積核的移動方式。