數(shù)據(jù)科學家必須知道的10個深度學習架構
近年來,深度學習的發(fā)展勢頭迅猛,要跟上深度學習的進步速度變得越來越困難了。幾乎每一天都有關于深度學習的創(chuàng)新,而大部分的深度學習創(chuàng)新都隱藏在那些發(fā)表于ArXiv和Spinger等研究論文中。
本文介紹了部分近期深度學習的進展和創(chuàng)新,以及Keras庫中的執(zhí)行代碼,本文還提供了原論文的鏈接。
簡潔起見,本文中只介紹了計算機視覺領域內(nèi)比較成功的深度學習架構。
另外,文章基于已經(jīng)掌握了神經(jīng)網(wǎng)絡的知識,并且對Keras已經(jīng)相當熟悉了的基礎。如果你對這些話題還不太了解,強烈建議先閱讀以下文章:
《Fundamentals of Deep Learning – Starting with Artificial Neural Network》
《Tutorial: Optimizing Neural Networks using Keras (with Image recognition case study)》
何為深度學習“高級架構”?
與一個簡單的機器學習算法相比,深度學習算法包含了更加多樣的模型。其中的原因是在建立一個完整的模型時,神經(jīng)網(wǎng)絡具有很大的靈活性。
有時,我們還可以把神經(jīng)網(wǎng)絡比作樂高積木,可以用它搭建任何簡單或者復雜的小建筑。
我們其實可以將“高級架構”簡單地定義為一個有著成功模型記錄的深度學習架構,這樣的“高級架構”主要出現(xiàn)在類似ImageNet的挑戰(zhàn)中,在這些挑戰(zhàn)中,你的任務是解決問題,比如用給定的數(shù)據(jù)完成圖像識別。簡單來說,ImageNet就是一項關于數(shù)據(jù)集的挑戰(zhàn),而其中的數(shù)據(jù)集是從ILSVR(ImageNet大規(guī)模視覺識別)中獲得的。
就像下文即將提到的架構,其中的每個架構之間都有細微的差別,而正是這些差別使它們區(qū)別于普通的模型,讓它們在解決問題的時候發(fā)揮出普通模型不具備的優(yōu)勢。這些架構同樣屬于“深度模型”的范疇,因此它們的性能也很可能優(yōu)于其相對應的“淺層模型”。
不同類型的“計算機視覺任務”
本文主要關注于“計算機視覺”,所以很自然地會涉及到“計算機視覺”的任務。顧名思義,“計算機視覺任務”就是建立一個能夠復制完成人類視覺任務的計算機模型。這實質(zhì)上意味著,我們視力所見和感知的內(nèi)容是一個能夠在人造系統(tǒng)中被理解和完成的程序。
計算機視覺任務的主要類型有:
物體識別/分類:在物體識別中,你會得到一張原始圖像,而你的任務就是判斷出這張圖像屬于哪一類別。
分類及定位:如果圖像中只有一個對象,那么你的任務就是找到該對象的位置。這個問題應該更加具體地表述為“定位問題”。
物體檢測:在物體檢測中,你的任務是識別出物體處于圖像中的什么位置。這些對象可能屬于同一類別,也可能屬于不同類別。
圖像分割:圖像分割是一項稍微復雜的任務,其目的是將圖像的各個像素映射到其對應的各個類別。
各種深度學習架構
目前,我們已經(jīng)了解了深度學習“高級架構”,并探究了各種類型的計算機視覺任務。那么接下來,我們將列舉出最重要的深度學習架構,并且對這些架構進行簡單的介紹:
1.AlexNet
AlexNet是第一個深度學習架構,它是由深度學習先鋒之一——Geoffrey Hinton和他的同事們共同研究并引入的。AlexNet是一個看似簡單但功能非常強大的網(wǎng)絡架構,它為現(xiàn)在深度學習的突破性研究鋪平了道路。下圖是AlexNet架構:
從分解圖中我們可以看出,AlexNet其實就是一個簡單的架構,其中的卷積層和聚積層相互疊加,最頂部的是全連接層。早在二十世紀八十年代,AlexNet模型就已經(jīng)被概念化描述了。AlexNet區(qū)別于其他模型的關鍵在于它的任務規(guī)模,以及它用于訓練的GPU規(guī)模。在八十年代,用于訓練神經(jīng)網(wǎng)絡的是CPU。而AlexNet率先使用GPU,將訓練的速度提高了十倍左右。
雖然AlexNet現(xiàn)在有些過時了,但它仍然是運用神經(jīng)網(wǎng)絡完成各種任務的起點。不管是完成計算機視覺任務,還是語音識別任務,都仍然需要AlexNet。
Original Paper linkLink for code implementation
2.VGG Net
“VGG Net”是由牛津大學“視覺圖像研究組”的研究人員引入的。VGG網(wǎng)絡的最大特點是它的金字塔狀,靠近圖像的底部比較寬闊,而頂部的層相對窄且深。
如圖所示,VGG Net包含了連續(xù)的卷積層,卷積層后緊接著聚積層。聚積層負責讓各個層變得更窄。在這篇由組內(nèi)研究人員共同完成的論文中,他們提出了各種類型的網(wǎng)絡,這些網(wǎng)絡架構的主要差異是深度不同。
VGG網(wǎng)絡的優(yōu)勢在于:
- 這是對一個特定任務進行基準測試非常有效的網(wǎng)絡架構。
- 同時,網(wǎng)上有大量免費的VGG預訓練網(wǎng)絡,因此,VGG通常會被用于各種各樣的應用程序。
而另一方面,VGG主要的缺陷在于如果從頭開始訓練的話,其訓練速度會非常慢。即使是用一個相當不錯的GPU,它還是需要超過一周的時間才能正常運行。
Original Paper linkLink for code implementation
3.GoogleNet
GoogleNet(又稱“InceptionNet”)是由谷歌的研究人員們設計的一個網(wǎng)絡架構。GoogleNet在2014年的
ImageNet大賽中獲得了冠軍,證明了它是一個功能強大的模型。
在這個網(wǎng)絡架構中,研究人員們不僅加深了網(wǎng)絡深度(GoogleNet包含22個層,而VGG網(wǎng)絡只有19個層),還研究出了一個叫做“Inception模塊”的新方法。
如上圖所示,這個架構與我們之前看到的有序性架構相比,發(fā)生了巨大的改變。在單個層中出現(xiàn)了各種各樣的“特征提取器”。這間接地提高了網(wǎng)絡的性能,因為當處理任務時,網(wǎng)絡在自我訓練過程中的選擇非常廣泛。它既可以選擇卷積輸入,也可以選擇直接將輸入聚積起來。
最終的架構包含了許多一個個相互疊加的Inception模塊。大部分最上面的層都有它們自己的輸出層,所以GoogleNet的訓練與其他模型有細微的差別。但這些差別能夠幫助模型更快地完成卷積,因為這些層不僅有共同的訓練,還有各自獨立的訓練。
GoogleNet的優(yōu)勢有:
- GoogleNet的訓練速度比VGGNet要快。
- 與預訓練的VGG網(wǎng)絡相比,預訓練的GoogleNet所占規(guī)模更小。一個VGG模型所占空間可以超過500MB,而GoogleNet只占96MB。
目前為止,GoogleNet還沒有直接的缺陷,但是文章中提出了一些有助于GoogleNet進一步完善的改變方案。其中有一個改變方案被稱作“XceptionNet”,在這個網(wǎng)絡中,“初始模塊”的散度限制被提高了。理論上來說,其散度現(xiàn)在可以是無限的了。
Original Paper linkLink for code implementation
4.ResNet
ResNet是一個真正地定義了深度學習架構深度的網(wǎng)絡架構。“殘差網(wǎng)絡”,也就是我們所說的ResNet,包含了許多連續(xù)的“殘差模塊”,這些“殘差模塊”構成了ResNet架構的基礎。“殘差模塊”如下圖所示:
簡單來說,一個“殘差模塊”有兩個選擇——它可以選擇在輸入上執(zhí)行一組函數(shù),也可以選擇跳過這些步驟。
與GoogleNet類似,這些“殘差模塊”相互疊加,從而形成一個完整的網(wǎng)絡的。
由ResNet引入的一些新技術有:
- 使用標準的SGD,而不是花哨的“自適應學習”技術。這是通過一個能夠保持正常訓練的初始化函數(shù)來完成的。
- 改變輸入預處理的方式,先將輸入分批,然后再輸入至網(wǎng)絡。
ResNet的主要優(yōu)勢在于,成千上萬的殘差層都能用于建立一個網(wǎng)絡,而且都能被用于訓練。這與平常的“時序網(wǎng)絡”稍有不同,“時序網(wǎng)絡”的性能會因為層數(shù)的增加而降低。
Original Paper linkLink for code implementation
5.ResNeXt
據(jù)稱,ResNeXt是目前為止最先進的物體識別技術。ResNeXt建立于inception和ResNet的基礎之上,是一個全新的、改良的網(wǎng)絡架構。下圖總結了ResNeXt的一個殘差模塊:
Original Paper linkLink for code implementation
6.RCNN(Region Based CNN)
RCNN據(jù)說是用于解決物體識別問題的深度學習架構中最具影響力的網(wǎng)絡架構。為了解決識別檢測問題,RCNN試圖框出圖像中的所有物體,然后再識別圖像中的物體具體是什么。其操作流程如下:
RCNN的結構如下圖:
Original Paper linkLink for code implementation
7.YOLO (You Only Look Once)
YOLO是目前為止最先進的實時圖像識別系統(tǒng),它是以深度學習為基礎的。正如我們在下圖中所看到的,它首先將圖像分成一個個小方格;然后將識別算法一一運行于這些格子,判斷每個格子分別屬于什么物體類別,之后把同一類別的方格合并起來,形成一個個最準確的物體框。
這些操作都是各自獨立完成的,因此能夠?qū)崿F(xiàn)實時運行。一秒內(nèi)最多能夠處理40張圖像。
雖然與其對應的RCNN相比,YOLO的性能降低了,但是它的實時處理功能在處理日常問題中仍有巨大的優(yōu)勢。以下是YOLO網(wǎng)絡架構:
Original Paper linkLink for code implementation
8.SqueezeNet
SqueezeNet架構是一個功能更加強大的網(wǎng)絡架構,它在類似移動平臺這樣的低寬帶場景中非常有用。這個網(wǎng)絡架構僅占4.9MB的空間,而Inception則占超過100MB空間。這樣顯著的變化來源于一個叫做“fire模塊”的結構。“fire模塊”如下圖所示:
下圖為squeezeNet的最終架構:
Original Paper linkLink for code implementation
9.SegNet
SegNet是一個用于解決圖像分割的深度學習架構。它包含了一系列處理層(編碼器)以及一組用于像素分類的對應的解碼器。下圖總結了SegNet的操作過程:
SegNet的一個關鍵特征是:在分割圖像中保留了高頻率的細節(jié),因為編碼網(wǎng)絡的聚積索引與解碼網(wǎng)絡的聚積索引是相互連接的。簡言之,信息的傳遞是直接的,而不是通過間接的卷積實現(xiàn)的。SegNet是處理圖像分割問題時的最佳模型。
Original Paper linkLink for code implementation
10.GAN (Generative Adversarial Network)
GAN是一個完全不同的神經(jīng)網(wǎng)絡架構,其中的神經(jīng)網(wǎng)絡被用于生成一個全新的不存在的圖像,這個圖像看似在訓練數(shù)據(jù)集中出現(xiàn)過,但實際上并沒有。下圖是GAN的分解示意圖。