【深度學習之美】局部連接來減參,權值共享肩並肩(入門系列之十一)

很多年前,著名物理學家愛因斯坦說過一句名言:Everything should be made as simple as possible, but not simpler(越簡單越好,但是還不能過分簡單)。”是的,只有名人才能說名言。如果這句話是我的說的,你可能認爲這不是廢話嗎?

我把愛老爺子搬出來,自然不是想唬你,而是因爲他的名言和我們今天要講的主題有點相關。我們知道,相比於全連接的前饋網絡,卷積神經網絡的結構要簡單得多,可是它並不是那麼簡單,否則也不會有這麼多初學者對卷積神經網絡“望而生畏”。

卷積神經網絡之所以這麼成功,套用愛老爺子的觀點來說,它簡單得“恰如其分”。在前面的章節中,我們重點討論了卷積的概念以及卷積核在圖像處理中的應用。在本章,我們將重點討論它“恰如其分”的拓撲結構,一旦理解清楚它的設計原理,再動手在諸如TheanoKeras等深度學習框架下,寫個卷積神經網絡的實戰小Demo,聰慧如你,一定不在話下。

11.1 卷積神經網絡的拓撲結構

下面我們先感性認識一下卷積神經網絡中的幾個重要結構,如圖11-1所示。在不考慮輸入層的情況下,一個典型的卷積神經網絡通常由若干個卷積層(Convolutional Layer)、激活層(Activation Layer)、池化層(Pooling Layer)及全連接層(Fully Connected Layer)組成。

4972f075f58833d6ade216e9a25a353fc484f0aa

11-1  典型卷積神經網絡的結構

下面先給予簡單地介紹,後文會逐個進行詳細介紹:

  • 卷積層:這個是卷積神經網絡的核心所在(作爲數學概念,我們在第10章已做了詳細介紹。不熟悉的讀者可前往查閱 [1])。在卷積層,通過實現“局部感知”和“權值共享”等系列的設計理念,可達到兩個重要的目的:對高維輸入數據實施降維處理和實現自動提取原始數據的核心特徵。
  •  激活層:其作用是將前一層的線性輸出,通過非線性激活函數處理,從而可模擬任意函數,進而增強網絡的表徵能力。在深度學習領域,ReLURectified-Linear Unit,修正線性單元)是目前使用較多的激活函數,原因是它收斂更快,且不會產生梯度消失問題。
  • 池化層:亦稱亞採樣層(Subsampling Layer)。簡單來說,利用局部相關性,“採樣”在較少數據規模的同時保留了有用信息。巧妙的採樣還具備局部線性轉換不變性,從而增強卷積神經網絡的泛化處理能力。
  • 全連接層:這個網絡層相當於傳統的多層感知機(Multi-Layer Perceptron,簡稱MLP,例如我們已經講解過的BP算法[2])。通常來說,“卷積-激活-池化”是一個基本的處理棧,通過多個前棧處理之後,待處理的數據特性已有了顯著變化:一方面,輸入數據的維度已下降到可用“全連接”網絡來處理了;另一方面,此時全連接層的輸入數據已不再是“泥沙俱下、魚龍混雜”,而是經過反覆提純過的結果,因此最後輸出的結果要可控得高。

事實上,我們還可以根據不同的業務需求,構建出不同拓撲結構的卷積神經網絡,常見架構模式如圖11-2所示。

5f66cf0ac5b36a9da8d1d63b5e52d28a3b09650f

圖11-2 卷積神經網絡的拓撲結構

也就是說,可以先由m個卷積層和激活層疊加,然後(可選)進行一次池化操作,重複這個結構n次,最後疊加k個全連接層(m, n, k ≥ 1)。總體來講,卷積神經網絡通過多層處理,逐漸將初始的“低層”特徵表示,轉化爲“高層”特徵表示,之後再用“簡單模型”即可完成複雜的分類等學習任務。因此在本質上,深度學習就是一個“特徵學習(feature learning)”或“表示學習(representation learning)”[3]

下面我們將一一講解卷積神經網絡中這幾個層的設計理念。在講解之前,我們有必要補充介紹一下大名鼎鼎的CIFAR-10圖像集,因爲後面的案例會頻頻用到這個數據集。

11.2不得不提的 CIFAR-10圖像集

CIFAR-10最早是由Hinton教授帶領他的兩名學生Alex KrizhevskyVinod Nair等人一起收集的微型圖像集。該圖像集由60,00032×32RGB彩色圖片構成,共10個大分類,其中50,000張圖片用作訓練,另外隨機抽取10,000張用作測試(交叉驗證)。如圖11-3所示[4]

c33528ece44c3f2e7972ed833836a51b87172927

11-3 CIFAR-10隨機抽取的10類圖像

CIFAR-10最大的特點莫過於,它將識別的範圍擴大到普適物體。相比於已經非常成熟的人臉識別,普適物體的識別更具有挑戰性,因爲普適圖像數據集中含有各樣各異的特徵,甚至噪聲,而且圖像中的物體大小比例不一,這些都無疑增加了普適物體判別的難度。

CIFAR-10在深度學習等領域非常有影響力。這是因爲它是很多人 “深度學習”實戰的起點(比如說,TheanoTensorFlow等深度學習框架都常用到這個數據集來做實戰練習)。它的存在,在客觀上加速推動了“深度學習”的普及進程。可以說,Hinton教授的功勞,不僅僅體現他對深度學習算法的創新上,還體現於他對深度學習的普及上。

11.3 卷積層的3個核心概念

有了上面的工作的鋪墊,下面我們來聊聊卷積層的三個核心概念:局部連接、空間位置排列及權值共享。

11.3.1  局部連接

前面我們也提到過,全連接的前饋神經網絡有個非常致命的缺點,那就是可擴展性(Scalability)非常差。原因非常簡單,網絡規模一大,需要調參的個數以神經元數的平方倍增,導致它難以承受參數太多之痛。

局部連接(Local Connectivity)在能某種程度上緩解這個“參數之痛”。下面我們以CIFAR-10圖像集爲輸入數據,來探究一下局部連接的工作原理。

通過前面的介紹可知,每一幅CIFAR-10圖像都是32×32×3RGB圖像。對於隱藏層的某個神經元,如果是全連接前饋網絡中,它不得不和前一層的所有神經元(32×32)都保持連接。

但現在,對於卷積神經網絡而言,隱藏層的這個神經元僅僅需要與前向層的部分區域相連接。這個局部連接區域有個特別的名稱叫“感知域(receptive field)”,其大小等同於卷積核的大小(比如說5×5),如圖11-4所示。相比於原來的32×32連接個數,變成現在的5×5個連接,連接的數量自然是稀疏得多,因此,局部連接也被稱爲“稀疏連接(Sparse Connectivity)”。

 

76c4ec4574817a9c5f7f6c2b8291b1ad9c8cb47a

11-4  局部連接示意圖

但需要注意的是,這裏的稀疏連接,僅僅是指卷積核的感知域(5×5)相對於原始圖像的高度和寬度(32×32)而言的。卷積核的深度(depth)則需要與原始數據保持一致,不能縮減。在這裏,卷積核的深度實際上就是卷積核的個數。對於RGB圖像而言,如果我們需要在紅色、藍色和綠色等三個通道提取特徵,那麼卷積核個數就是3)。所以對於隱藏層的某個神經元,它的前向連接個數是由全連接的32×32×3個,通過卷積操作,減少到局部連接的到5×5×3個。

請讀者思考,爲了提取更多特徵,如果卷積核的深度不是3個,而是100個,又會發生什麼?很顯然,這樣一來的話,局部連接帶來的參數個數減少量,就要大打折扣。

11.3.2 空間排列

在講解完畢局部連接的原理之後。下面我們來談談決定卷積層的空間排列(Spatial arrangement)的4個參數,它們分別是:卷積核的大小、深度、步幅及補零。其中,卷積核的大小(通常多是3×35×5的方矩陣)我們已經在第10章討論了,這裏僅僅對另外三個結構進行說明[5]

1)卷積核的深度(depth):卷積核的深度對應的是卷積核的個數。每個卷積核只能提取輸入數據的部分特徵。每一個卷積核與原始輸入數據執行卷積操作,會得到一個卷積特徵,這樣的多個特徵彙集在一起,我們稱爲特徵圖譜。在圖11-1所示的示例中(左上部),我們使用三個不同的濾波器(即卷積核)對原始圖像進行卷積操作,這樣就可以生成三個不同的特徵圖。你可以把這三個特徵圖看作是堆疊在一起的2D(二維)矩陣。

事實上,每個卷積核提取的特徵都有各自的側重點。因此,通常說來,多個卷積核的疊加效果要比單個卷積核的分類效果要好得多。例如在2012年的ImageNet競賽中,Hinton教授和他的學生Krizhevsky等人打造了第一個“大型的深度卷積神經網絡”,也即現在衆所周知的AlexNet。在這個奪得冠軍的深度學習算法中,他們使用的卷積核高達96個!可以說,自那時起,深度卷積神經網絡一戰成名,才逐漸被世人矚目。

2)步幅(stride):即濾波矩陣在輸入矩陣上滑動跨越的單元個數。設步幅大小爲S,當S1時,濾波器每次移動一個像素的位置。當S2時,每次移動濾波器會跳過2個像素。S越大,卷積得到特徵圖就越小。以一維數據爲例,當卷積核爲[10-1],輸入矩陣爲[0, 1, 2, -1, 1, -3, 0]時,圖11-5顯示了步幅分別爲12卷積層的神經元分佈情況。

8d8a42be4fd3838cbacd12a1b08cb1eae26b0a80

圖11-5  當步幅爲12時,輸入層和卷積層的神經元空間分佈

3)補零(zero-padding):補零操作通常用於邊界處理。在有些場景下,卷積核的大小並不一定剛好就被輸入數據矩陣的維度大小整除。因此,就會出現卷積核不能完全覆蓋邊界元素的情況。這時,我們就需要在輸入矩陣的邊緣使用零值進行填充,使得在輸入矩陣的邊界處的大小剛好和卷積核大小匹配。這樣做的結果,相當於對輸入圖像矩陣的邊緣進行了一次濾波。零填充的好處在於,它可以讓我們控制特徵圖的大小。使用零填充的卷積叫做泛卷積(wide convolution),不適用零填充的叫做嚴格卷積(narrow convolution)。

下面我們舉例說明這個概念。假設步幅S的大小爲2,爲了簡單起見,我們假設輸入數據爲一維矩陣 [0, 1, 2, -1, 1, -3],卷積核爲[1, 0, -1],在卷積核滑動兩次之後,此時輸入矩陣邊界多餘一個“-3”,不夠滑動第3次,如圖11-6-(a)所示。此時,便可以在輸入矩陣填入額外的0元素,使得輸入矩陣變成[0, 1, 2, -1, 1, -3, 0],這樣一來,所有數據都能得到處理,如圖11-6-(b)所示。。

064d05b37940c1937c0730f10c9e65659f01c941

11-6  在輸入矩陣邊界處補零

綜上所述,在構造卷積層時,對於給定的輸入數據,如果確定了卷積核的大小,卷積核的深度(個數)、步幅以及補零個數,那麼卷積層的空間安排就能確定下來。以一維數據爲例,假設數據的大小(數據元素的長度)爲W,卷積核的深度爲F,步幅大小爲S,補零的數目爲P,那麼對於每個卷積核,在它與輸入數據實施卷積操作後得到特徵圖譜,它包含的神經元個數N可以用(11-1)公式計算得到。

d0fe8bcab52ae503d4a9c1fcfa4bd55f4e52688d      

對於高維數據而言,對每一個維度的數據均按照(11-1)計算即可。

11.3.3 權值共享

卷積層設計的第三個核心概念就是權值共享(Shared Weights),由於這些權值實際上就是不同神經元之間的連接參數,所以有時候,也將權值共享稱爲參數共享(Parameter Sharing)。

爲什麼要設置權值共享呢?其實這也是無奈之舉。前文我們提到,通過局部連接處理後,神經元之間的連接個數已經有所減少。可到底減少多少呢?還以CIFAR-10數據集合爲例,一個原始的圖像大小爲32×32×3,假設我們有100個卷積核,每個卷積核的大小爲5×5×3,步幅爲1,沒有補零。先單獨考慮一個卷積核,將公式11-1擴展到二維空間,可以很容易計算得到每一個卷積覈對應的特徵圖譜大小是28×28。也就是說,這個特徵圖譜對應有28×28神經元。而每個神經元以卷積核大小(5×5×3)連接前一層的“感知域(receptive field)”,也就是說,它的連接參數個數爲(28×28)×(5×5×3)。如果考慮所有的100個卷積核,(在不考慮偏置參數的情況下)連接的參數個數爲(5×5×3)×(28×28)×100 = 5,880,000

那麼全連接的參數個數又是多少呢?僅僅考慮兩層網絡的情況下,其連接個數爲(32×32×3)×(32×32×3=9,437,184。對比這二者的數字可以發現,局部連接雖然降低了連接的個數,但整體幅度並不大,需要調節的參數個數依然非常龐大,因此還是無法滿足高效訓練參數的需求。

而權值共享就是來解決這個問題的,它能顯著降低參數的數量。該如何理解權值共享呢?首先從生物學意義上來看,相鄰神經元的活性相似,從而可以它們共享相同的連接權值。

其次單從數據特徵上來看,我們可以把每個卷積核(即過濾核)當作一種特徵提取方式,而這種方式與圖像等數據的位置無關。這就意味着,對於同一個卷積核,它在一個區域提取到的特徵,也能適用於於其他區域。基於權值共享策略,將卷積層神經元與輸入數據相連,同屬於一個特徵圖譜的神經元,將共用一個權值參數矩陣,如圖11-7所示。經過權值共享處理後,CIFAR-10的連接參數一下子銳減爲5×5×3×1×100 = 7500

3324849508008edd7ef0859dc17a6713a934f369

圖11-7  權值共享策略

權值共享保證了在卷積時只需要學習一個參數集合即可,而不是對每個位置都再學習一個單獨的參數集合。因此參數共享也被稱爲綁定的權值(tied weights)。

11.4 小節與思考

在本章,我們討論了卷積神經網絡的拓撲結構,並重點講解了卷積層的設計動機和卷積層的3個核心概念:空間位置排列、局部連接和權值共享。前者確定了神經網絡的結構參數,而局部連接和權值共享等策略顯著降低了神經元之間的連接數。示意圖11-8演示了三種不同的連接類型帶來的參數變化,從圖中可以看出,全連接(不包括偏置的權值連接)的參數爲15個,局部連接爲7個,而權值共享的參數爲3個(即紅綠藍線分別共用一個參數)。

82d48c8aeaeaced0f1ac52e47010ac89b3af5627

11-8  神經元連接的三種類型

通過上面的學習,請你思考如下問題:

1)雖然局部連接、權值共享等策略大大降低了卷積層與輸入層之間的權值調整個數,但並沒有提升網絡的前向傳播速度,你知道爲什麼嗎?

2)前文我們提到“膚淺而全面”的全連接,不如“深邃而局部”部分連接。在2016年商湯科技團隊在ImageNet圖片分類比賽中勇奪冠軍,其網絡深度已達到1207層。那麼,深度學習是不是越深越好?爲什麼?廣度學習就沒有未來嗎?

在下一講中,我們將講解卷積神經網絡的剩餘部分:池化層、激活層和全連接層。請你關注。

參考文獻

[1] 張玉宏. 雲棲社區. 全面連接困何處,卷積網絡見解深(深度學習入門系列之九)

[2] 張玉宏. 雲棲社區. BP算法雙向傳,鏈式求導最纏綿(深度學習入門系列之八)

[3] 周志華.機器學習.清華大學出版社.2016.1

[4] The CIFAR-10 dataset.http://www.cs.toronto.edu/~kriz/cifar.html

[5] 黃安埠. 深入淺出深度學習.中國工信出版社.2017.6

文章作者:張玉宏,著有《品味大數據》一書。審校:我是主題曲哥哥。本文節選自《深度學習之美》一書,電子工業出版社2018年7月出版

(未完待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章