當前位置:
首頁 > 知識 > 局部連接來減參,權值共享肩並肩(深度學習入門系列之十一)

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

系列文章:

一入侯門「深」似海,深度學習深幾許(深度學習入門系列之一)

人工「碳」索意猶盡,智能「硅」來未可知(深度學習入門系列之二)

神經網路不勝語,M-P模型似可尋(深度學習入門系列之三)

「機器學習」三重門,「中庸之道」趨若人(深度學習入門系列之四)

Hello World感知機,懂你我心才安息 (深度學習入門系列之五)

損失函數減肥用,神經網路調權重(深度學習入門系列之六)

山重水複疑無路,最快下降問梯度(深度學習入門系列之七)

BP演算法雙向傳,鏈式求導最纏綿(深度學習入門系列之八)

全面連接困何處,卷積網路見解深(深度學習入門系列之九)

卷地風來忽吹散,積得飄零美如畫(深度學習入門系列之十)

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

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

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

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

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

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

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

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

  • 卷積層:這個是卷積神經網路的核心所在(作為數學概念,我們在第10章已做了詳細介紹。不熟悉的讀者可前往查閱[1])。在卷積層,通過實現「局部感知」和「權值共享」等系列的設計理念,可達到兩個重要的目的:對高維輸入數據實施降維處理和實現自動提取原始數據的核心特徵。

  • 激活層:其作用是將前一層的線性輸出,通過非線性激活函數處理,從而可模擬任意函數,進而增強網路的表徵能力。在深度學習領域,ReLU(Rectified-Linear Unit,修正線性單元)是目前使用較多的激活函數,原因是它收斂更快,且不會產生梯度消失問題。

  • 池化層:亦稱亞採樣層(Subsampling Layer)。簡單來說,利用局部相關性,「採樣」在較少數據規模的同時保留了有用信息。巧妙的採樣還具備局部線性轉換不變性,從而增強卷積神經網路的泛化處理能力。

  • 全連接層:這個網路層相當於傳統的多層感知機(Multi-Layer Perceptron,簡稱MLP,例如我們已經講解過的BP演算法[2])。通常來說,「卷積-激活-池化」是一個基本的處理棧,通過多個前棧處理之後,待處理的數據特性已有了顯著變化:一方面,輸入數據的維度已下降到可用「全連接」網路來處理了;另一方面,此時全連接層的輸入數據已不再是「泥沙俱下、魚龍混雜」,而是經過反覆提純過的結果,因此最後輸出的結果要可控得高。

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

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

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

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

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

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

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

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

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

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

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

11.3 卷積層的3個核心概念

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

11.3.1 局部連接

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

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

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

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

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

圖11-4 局部連接示意圖

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

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

11.3.2 空間排列

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

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

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

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

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

圖11-5 當步幅為1和2時,輸入層和卷積層的神經元空間分布

(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)所示。。

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

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

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

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

對於高維數據而言,對每一個維度的數據均按照(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,888,000。

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

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

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

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

11-7 權值共享策略

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

11.4 小節與思考

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

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

圖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

文章作者:張玉宏,著有《品味大數據》一書。審校:我是主題曲哥哥。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲棲社區 的精彩文章:

如何解決租房煩惱?阿里工程師寫了一套神奇的代碼
深度:主流分散式機器學習平台比較
新工具——TensorLayer:管理深度學習發展的複雜性

TAG:雲棲社區 |

您可能感興趣

入夏後迎來減肥黃金期,吃飯時別犯3個錯誤,沒有降不下來的體重
用這三種方法來減肥,不傷膝蓋不傷腰,關節輕鬆人也瘦了
臀部減肥瑜伽第六課:用靠墊來減肥
狙擊手的一個輔助,吊繩用來減少負擔,美國訓練方式與眾不同
趙薇瘦下來之後有了腰纏萬貫名媛感,原來減肥有時會減掉窮酸感
減肥遇到瓶頸期,換一種方法來減脂,力量瑜伽燃脂強減肥瘦身首選
巧搓肚子來減肥,三步走減掉大肚腩!
居家運動來減肥,9個動作練全身,增強你的體能,減掉你的脂肪
不要靠不吃飯來減肥
靠吃來減壓的三大生肖女,一不開心就暴飲暴食
想不到,襯衫是用來減壓的……
用過度節食來減肥 煩惱只會增多不會減少
除了跑步之外,你還可以用這個運動項目來減脂
一層層剖開運動減肥的真諦,發現依靠運動來減肥,這個觀點是錯的
美國力推「無中國」5G布局!迫使盟友站隊,支持者已越來減少!
減重32斤之後,她分享5個減肥技巧,原來減肥也可以不運動
荷蘭入屋盜竊案七年來減半,防盜措施仍需改善
全球動物種群數量 44 年來減少超過一半,再現第六次大滅絕的討論
古代被凌遲之人,為何不以提前自盡的方式,來減輕痛苦?
想通過慢跑來減肥?有關時間和速度,這兩方面千萬要重視!