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