為什么使用卷積?(Why convolutions?)
我們來分析一下卷積在神經(jīng)網(wǎng)絡(luò)中如此受用的原因,然后對如何整合這些卷積,如何通過一個標(biāo)注過的訓(xùn)練集訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)做個簡單概括。和只用全連接層相比,卷積層的兩個主要優(yōu)勢在于參數(shù)共享和稀疏連接,舉例說明一下。
假設(shè)有一張32×32×3維度的圖片,這是上節(jié)課的示例,假設(shè)用了6個大小為5×5的過濾器,輸出維度為28×28×6。32×32×3=3072,28×28×6=4704。我們構(gòu)建一個神經(jīng)網(wǎng)絡(luò),其中一層含有3072個單元,下一層含有4074個單元,兩層中的每個神經(jīng)元彼此相連,然后計算權(quán)重矩陣,它等于4074×3072≈1400萬,所以要訓(xùn)練的參數(shù)很多。
雖然以現(xiàn)在的技術(shù),我們可以用1400多萬個參數(shù)來訓(xùn)練網(wǎng)絡(luò),因為這張32×32×3的圖片非常小,訓(xùn)練這么多參數(shù)沒有問題。如果這是一張1000×1000的圖片,權(quán)重矩陣會變得非常大。我們看看這個卷積層的參數(shù)數(shù)量,每個過濾器都是5×5,一個過濾器有25個參數(shù),再加上偏差參數(shù),那么每個過濾器就有26個參數(shù),一共有6個過濾器,所以參數(shù)共計156個,參數(shù)數(shù)量還是很少。
卷積網(wǎng)絡(luò)映射這么少參數(shù)有兩個原因:
一是參數(shù)共享。
觀察發(fā)現(xiàn),特征檢測如垂直邊緣檢測如果適用于圖片的某個區(qū)域,那么它也可能適用于圖片的其他區(qū)域。也就是說,如果你用一個3×3的過濾器檢測垂直邊緣,那么圖片的左上角區(qū)域,以及旁邊的各個區(qū)域(左邊矩陣中藍色方框標(biāo)記的部分)都可以使用這個3×3的過濾器。每個特征檢測器以及輸出都可以在輸入圖片的不同區(qū)域中使用同樣的參數(shù),以便提取垂直邊緣或其它特征。
它不僅適用于邊緣特征這樣的低階特征,同樣適用于高階特征,例如提取臉上的眼睛,貓或者其他特征對象。即使減少參數(shù)個數(shù),這9個參數(shù)同樣能計算出16個輸出。
直觀感覺是,一個特征檢測器,如垂直邊緣檢測器用于檢測圖片左上角區(qū)域的特征,這個特征很可能也適用于圖片的右下角區(qū)域。因此在計算圖片左上角和右下角區(qū)域時,你不需要添加其它特征檢測器。假如有一個這樣的數(shù)據(jù)集,其左上角和右下角可能有不同分布,也有可能稍有不同,但很相似,整張圖片共享特征檢測器,提取效果也很好。
第二個方法是使用稀疏連接
第二個方法是使用稀疏連接,我來解釋下。這個0是通過3×3的卷積計算得到的,它只依賴于這個3×3的輸入的單元格,右邊這個輸出單元(元素0)僅與36個輸入特征中9個相連接。而且其它像素值都不會對輸出產(chǎn)生任影響,這就是稀疏連接的概念(這個要搞清楚na,記住了)。
再舉一個例子,這個輸出(右邊矩陣中紅色標(biāo)記的元素 30)僅僅依賴于這9個特征(左邊矩陣紅色方框標(biāo)記的區(qū)域),看上去只有這9個輸入特征與輸出相連接,其它像素對輸出沒有任何影響。
神經(jīng)網(wǎng)絡(luò)可以通過這兩種機制減少參數(shù),以便我們用更小的訓(xùn)練集來訓(xùn)練它,從而預(yù)防過度擬合。
你們也可能聽過,卷積神經(jīng)網(wǎng)絡(luò)善于捕捉平移不變。通過觀察可以發(fā)現(xiàn),向右移動兩個像素,圖片中的貓依然清晰可見,因為神經(jīng)網(wǎng)絡(luò)的卷積結(jié)構(gòu)使得即使移動幾個像素,這張圖片依然具有非常相似的特征,應(yīng)該屬于同樣的輸出標(biāo)記。
實際上,我們用同一個過濾器生成各層中,圖片的所有像素值,希望網(wǎng)絡(luò)通過自動學(xué)習(xí)變得更加健壯,以便更好地取得所期望的平移不變屬性。
這就是卷積或卷積網(wǎng)絡(luò)在計算機視覺任務(wù)中表現(xiàn)良好的原因。
最后,我們把這些層整合起來,看看如何訓(xùn)練這些網(wǎng)絡(luò)。
比如我們要構(gòu)建一個貓咪檢測器,
我們有下面這個標(biāo)記訓(xùn)練集,x表示一張圖片,^y是二進制標(biāo)記或某個重要標(biāo)記。
我們選定了一個卷積神經(jīng)網(wǎng)絡(luò),輸入圖片,增加卷積層和池化層,然后添加全連接層,最后輸出一個softmax,即^y。
卷積層和全連接層有不同的參數(shù)w和偏差b,我們可以用任何參數(shù)集合來定義代價函數(shù)。
一個類似于我們之前講過的那種代價函數(shù),并隨機初始化其參數(shù)w和b,代價函數(shù)J等于神經(jīng)網(wǎng)絡(luò)對整個訓(xùn)練集的預(yù)測的損失總和再除以m
所以訓(xùn)練神經(jīng)網(wǎng)絡(luò),你要做的就是使用梯度下降法,或其它算法,例如Momentum梯度下降法,含RMSProp或其它因子的梯度下降來優(yōu)化神經(jīng)網(wǎng)絡(luò)中所有參數(shù),以減少代價函數(shù)J的值。通過上述操作你可以構(gòu)建一個高效的貓咪檢測器或其它檢測器。
你已經(jīng)學(xué)習(xí)了卷積神經(jīng)網(wǎng)絡(luò)的所有基本構(gòu)造模塊,以及如何在高效圖片識別系統(tǒng)中整合這些模塊。
下周,我們將繼續(xù)深入學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)。我曾提到卷積神經(jīng)網(wǎng)絡(luò)中有很多超參數(shù),下周,我打算具體展示一些最有效的卷積神經(jīng)網(wǎng)絡(luò)示例,你也可以嘗試去判斷哪些網(wǎng)絡(luò)架構(gòu)類型效率更高。人們通常的做法是將別人發(fā)現(xiàn)和發(fā)表在研究報告上的架構(gòu)應(yīng)用于自己的應(yīng)用程序。下周看過更多具體的示例后,相信你會做的更好。此外,下星期我們也會深入分析卷積神經(jīng)網(wǎng)絡(luò)如此高效的原因,同時講解一些新的計算機視覺應(yīng)用程序,例如,對象檢測和神經(jīng)風(fēng)格遷移以及如何利用這些算法創(chuàng)造新的藝術(shù)品形式。期待與您再次相遇!