神經網絡結構深入分析和比較
深度神經網絡和深度學習是既強大又受歡迎的算法。這兩種算法取得的成功主要歸功于神經網絡結構的巧妙設計。
我們來回顧一下,神經網絡設計在過去幾年以及在深度學習中的發展歷程。
這篇文章對所有網絡進行了一次更為深入的分析和比較,詳情請閱讀我們發表的文章:
https://arxiv.org/abs/1605.07678
這是文章中的一張具有代表性的圖表,如下所示:
在多種受歡迎的神經網絡結構中,大部分的操作需要進行一個簡單的向前推算,從而得出單一的 Top-1 準確率。
LeNet5
LeNet5 網絡于1994年問世,是最早的卷積神經網絡之一,推動了深度學習領域的發展。自1988年起,在經過多次先前成功的迭代發展之后,揚·勒丘恩(Yann LeCun)開創性的研發出了 LeNet5 網絡。
LeNet5 結構是非常基礎的 ,特別是觀察那些分布在整個圖像上的圖像特征時,其可以利用卷積神經網絡中可學參數在多位置上利用少量參數有效地抽取相似特點。與此同時,這里沒有 GPU 幫助訓練,而且 CPUs 運行速度也非常緩慢。因此,LeNet5 最為重要的優勢就是能夠精簡參數和計算。
這與把每個像素當做一個龐大多層神經網絡的單獨輸入的理念完全相悖。 LeNet5 結構表明,不應該在第一層中使用像素,因為圖像與空間相關度非常高,所以把圖像的單獨像素作為單獨輸入特性將導致無法使用相關的圖像。
LeNet5 結構特點如下:
-
卷積神經網絡利用3個層式的序列:卷積,池以及非線性——根據這篇文章所講述的內容,我們知道這可能就是深度學習中圖像的關鍵特性;
-
利用卷積網絡提取空間特征;
-
子樣品利用空間平均地圖;
-
tanh 和 signoids 函數的非線性特征;
-
多層神經網絡(MLP)作為最終分類器;
-
在層式之間放置零星的連接矩陣來規避大量計算。
總體來說,LeNet5 結構不但是近代大部分神經網絡結構的鼻祖,而且也極大地鼓舞著該領域的研究工作人員。
The gap
從1998年到2010年,這段時間神經網絡處于蓄勢待發的狀態。因為許多其他領域研究人員的研究進展緩慢,所以大部分人沒有留意神經網絡的功能日益強大。由于手機相機和廉價數碼相機的興起,神經網絡獲得了越來越多的數據。同時,計算能力有所提高,CPU 運行速度加快,GPU 也成為了通用的計算工具。
Dan Ciresan Net
2010年,Dan Claudiu Ciresan 和 JurgenSchmidhuber 聯合發布了其中一個最早問世的 GPU 神經網絡實現。實現了在一個運行高達九層神經網絡的 NVIDIA GTX 280 圖形處理器中執行前向和后向推算的功能。
AlexNet
2012年, Alex Krizhevsky 發布了比 LeNet 網絡功能更強大的 AlexNet 網絡 ,并且 AlexNet 網絡在高難度的 ImageNet 比賽中以絕對的優勢獲勝。
AlexNet 網絡將 LeNet 網絡改造成了一個更為龐大的神經網絡,這樣 AlexNet 網絡就能夠用于學習更為復雜的對象以及對象的層次結構。以下是 AlexNet 網絡結構的貢獻:
-
把被修正的線性單元(ReLU)當作非線性。
-
在進行訓練時,利用 dropout 技術有選擇性的忽略單個神經元,避免模型過度擬合。
-
疊加 max pooling,避免平均 pooling 的平均效應。
-
利用 GPUs(圖形處理器) NVIDIA GTX 580 來縮短訓練時間。
此時,GPU 所提供的內核數量遠大于 CPU 并且將培訓時間縮減成了原來的十分一,也就是說,此時我們可以使用更大的數據集和圖像了。
AlexNet 網絡的成功掀起了一場小型的革命。卷積神經網絡成為“能解決現今有意義任務的大型神經網絡”的新名稱。如今,卷積神經網絡是深度學習的研究主力。
Overfeat
2013年12月, Yann LeCun 在紐約大學實驗室提出了 AlexNet 網絡的衍生品 Overfeat 算法 。本篇文章還建議學習之后經常在其它相同課題的文章中出現的邊界盒。我覺得最好還是去學習分割對象而不是學習人工邊界盒。
VGG
由牛津大學提出來的 VGG 網絡是首款在每層卷積網絡中使用比 3*3 還要小的過濾器的網絡,而且還把它們組合成了一系列的卷積。
這看起來與 LeNet 網絡利用大量的卷積捕捉圖像中相似特征的原則相悖。過濾器開始變得越來越小,LeNet 網絡想要避免越靠近 infamous1*1 卷積就越危險的情況,至少不能在在網絡第一層中發生這種狀況,所以只能替換掉 AlexNet 網絡 9*9 或者 11*11 的過濾器。但是,VGG 網絡的優勢在于可以觀察按照一定次序多重 3*3 的卷積來仿真諸如 5*5 和 7*7 這樣更大的接受域的效果。在 Inception 和 ResNet 這樣較新的網絡結構中也會應用到這些想法。
VGG 網絡利用多重 3*3 卷積層來呈現復雜的特性。請注意 VGG-E 模塊 3、4、5 的數值分別是 256*256 和 512*512,在序列里多次使用 3*3 過濾器來提取更為復雜的特性以及這些特性的組合。實際上,這就像是利用3層獲得了大的 512*512 分類器。這就是卷積!這顯然是大量參數以及學習力共同作用的結果。但是訓練這些網絡非常困難,而且必須把這些網絡分解成更小的神經網絡,對他們進行逐層訓練。這么做的原因就是缺少強力有效地辦法來調整模型或者在某種程度上是對利用大量的參數來提高大量搜索空間的辦法予以限制。
VGG 網絡在許多層都使用了大特征尺寸,因此在運行期間,推斷造成的損耗異常嚴重。如 Inception 瓶頸效應那樣,減少特性的數量會縮減計算成本。
Network-in-network
Network-in-network(NiN)能夠簡便有效地觀察利用 1*1 卷積給卷積層特性提供更強的組合力量。
NiN 結構在每個卷積后使用MLP空間層是為了在另一個層中更好的組合特性。舊事重提,有人可能想起 1*1 卷積與 LeNet 初始原則相悖,可是,實際上,這兩種結構用更好的方式幫助組合卷積特性,單純的堆積更多的卷積層是不可能完成這項任務的。這就是利用原生像素輸入到下一層的不同之處。在這里,卷積之后,利用 1*1 卷積在特性圖譜上進行空間性的組合特性,所以他們有效地使用了少量參數,分享了這些特性的所有像素!
MLP 的性能通過把這些卷積特性組合成更為復雜的群組來大大的提高單個卷積特性的有效性。這一想法近期將會被應用在諸如 ResNet、Inception 以及相關衍生品的最新結構中。
NiN 還利用平均池化層(average pooling layer)作為最終分離器的一部分,另外一項活動就會變得普通。這樣做是為了在分類之前使平均網絡對輸入的圖片進行多路回應。
GoogLeNet 和 Inception
Google 公司的 Christian Szegedy 進行一項致力于減輕深度神經網絡的計算負擔研究,然后設計了首款名為 GoogLeNet 的 Inception 結構。
到2014年的秋天為止,深度學習模塊分類在圖像內容和視頻幀方面表現的非常優異。大部分的懷疑者都已經承認,深度學習和神經網絡的熱潮已經回來了。如果了解這些技術所能發揮的作用,那么像 Goolge 這樣的互聯網巨頭就會非常有興趣在他們的服務器農場中大規模的部署這些有效地結構。
Christian 想出了許多既能保證運行的性能,又能減輕深度神經網絡計算負擔的方法(比如在 ImageNet 上)。又或者,在提升性能的同時保持計算成本不變。
Christian 和他的團隊研究出了 inception 模塊,如圖所示:
基本上,第一眼看到的就是平行組合的 1*1、3*3 以及 5*5 的卷積過濾器。但是 inception 模塊的觀察力杰出是因為在消耗平行塊之前就已經利用了1*1卷積塊(NiN)來減少特性的數量。我們通常將其稱為“瓶頸”。這需要單獨講解:請閱讀下面“瓶頸層”的相關內容。
Google 選取 stem 以及與 NiN 相似的平均池化(average pooling)和 softmax 分類器作為初始層,而未選用 inception 模塊。與 AlexNet 和 VGG 中的分類器相比,softmax 分類器的操作數量非常低。這要歸功于一個非常有效的網絡設計。
Bottleneck layer(瓶頸層)
受到 NiN 網絡的啟發,Inception 的瓶頸層正在削減每一層的特性數量以及操作步驟,所以能夠持續縮短推理時間。在還沒有把數據傳輸到消耗卷積模塊中的時候,特性的數量就銳減到了原來的 1/4。這就使得計算成本得以大幅度縮減,同時又推動了這種結構的成功。
讓我們來仔細的檢查一下。假設有256個特性輸入,又有256個特性輸出,而且 Inception 層只能運行3*3卷積。那么256*256*3*3卷積必須執行(使用乘法累加器或者 MAC 操作所得結果是589000s)。這可能就不只是計算負擔的問題,需要在 Google 的服務器上以0.5毫秒的速度來運行這一個層。反其道行之,我們決定通過卷起這些特性的方法來消減其數量,也就是說256變成64。假若如此,我們首次運行256-> 64 1×1卷積后,Inception 的所有分支都是64個特性的卷積,然后我們再一次利用1*1卷積從64個特性變回到256個特性。操作過程如下:
-
256 × 64 × 1 × 1 = 16,000s
-
64 × 64 × 3 × 3 = 36,000s
-
64 × 256 × 1 × 1 = 16,000s
我們之前的計算成本約為 600,000,而現在只有 70,000!竟相差了近十倍!
雖然計算成本減少了,但是我們并沒有丟棄這個層里的普遍性。事實上,瓶頸層已經被證明是執行 ImageNet 數據集中的先有技術,比如說,瓶頸層稍后也會應用在諸如 ResNet 這樣的結構中。
成功的原因是輸入的特性相互關聯,而后通過利用 1*1 卷積來合理的組合特性從而清除冗余。然后,卷集成數量更少的特性以后,這些特性可以在下一層再次放大進行有意義的組合。
Inception V3 (and V2)
Christian 和其團隊成員的研究效率非常高。2015年2月,Batchnormalized Inception被引進,稱為 Inception V2。Batchnormalized Inception 負責計算平均值和每層輸出中所有特征圖譜的標準偏差,而且還規范化了數值之間的回應。這相當于“美化”數據,然后使所有的神經圖反應一致,最后調到零均值。因為下一層不必學習輸入數據中的偏移而且能夠專注于如何形成最佳特性組合,所以這有助于訓練。
2015年12月,他們發布了最新版的 Inception 模塊和相關結構。這篇文章(網址:http://arxiv.org/abs/1512.00567)更好的解釋了初始的 GoogleNet 結構,并且給出了許多設計選擇方面更為詳細的建議。初始想法列表:
-
最大化信息涌入網絡,通過精心構建網絡來保持深度和寬度的平衡。在構建pooling 之前,需要先增加特征圖譜。
-
當深度加深,特性的數量或者層的寬度也會隨之按一定規律增長。
-
在下一層之前,利用每層的寬度增長來提高特性的組合。
-
已知 5*5 和 7*7 的過濾器能用多層 3*3 分解,如果可以的話,只使用 3*3 卷積。請看下圖:
-
新版的inception模塊是這樣的,如圖所示:
-
過濾器通過卷積壓縮精簡也能被分解進入更為復雜的模塊,如圖所示:
-
在運行inception計算時,通過支持poolinginception模塊也能縮減數據的大小。這基本上與同時利用跨度和一個簡單的pooling層運行卷積的原理相同,如圖所示:
Inception 仍然使用 pooling 層和 softmax 作為其最終的分類器。
ResNet
2015年12月,一場革命悄然而至,Inception V3 也在此時問世。ResNet 有一個簡單想法就是:同時供應兩個連續的卷積層輸出,同時繞開下一層的輸入!
這是與這個相似的老想法,網址:
http://yann.lecun.com/exdb/publis/pdf/sermanet-ijcnn-11.pdf
但是,在這里,他們繞開兩層并且被應用到大尺度上。因為繞開單層無法獲得大幅度的提高,所以繞開兩層就成了關鍵點。可以把這兩層看作一個小的過濾器或者是一個網中網。
這是首次出現大于百層的網絡,需要訓練的層甚至達到了 1000 層。
擁有大量層的 ResNet 開始利用與 Inception 瓶頸相似的瓶頸層,如圖所示:
這種層消減特性數量就是在每層通過利用 1*1 卷積伴隨著更小的輸出(通常是1/4的輸入),然后是一個 3*3 的層,接下來再用 1*1 卷積獲得相對大量的特性。就像在 Inception 模塊中,雖然支持豐富的特征組合,但是卻保持了低的計算成本。看完過“GoogLeNet and Inception”這部分之后,請閱讀“瓶頸層”。
ResNet 在輸入時采用了一個相當簡單的初始層(stem):一個7*7卷積層附帶著一個標記為2的pool層。我們可以將其與更為復雜更為不直觀的 Inception V3、 V4 做一下對比。
ResNet 還是利用一個 pooling 層外加 softmax 作為最終過濾器。
ResNet 結構每天都會有新的見解:
-
ResNet既可以被看做是平行模塊也可以被看做是系列模塊,這是因為很多進出的模塊都是平行的,然而每個模塊的輸出都是串聯的。
-
ResNet還可以被認為是平行或者連續模塊的多種集成。
-
我們已經發現,ResNet經常可以在相對較低(大約20-30)的深度塊上運行,運行的時候是平行的,而不是連續涌入貫穿整個網絡。
-
當ResNet輸出信息把消息反饋給輸入信息時,如果在RNN中,那么網絡可以被看作是更好的皮質生物仿真模塊。
Inception V4
Christian 和他的團隊在此基礎上再次推出了新版的 Inception。
Inception 模塊與 Inception V3 中的 stem 非常相似,如圖所示:
Christian 和他的團隊還把 Inception 模塊和 ResNet 模塊組合在一起,如圖所示:
在我看來,Christian 和他的團隊這次想出來的解決辦法雖然不是那么前沿,反而會更加復雜些,但是卻能減少使用試探法的次數。很難理解為何做出如此選擇,而且研發者也很難對此做出判斷。
就這一點而言,獎勵應該頒發給像 ResNet 這樣的清晰簡單且易于理解和調整的網絡。
SqueezeNet
近期發布了 SqueezeNet,它對 ResNet 和 Inception 的許多理念進行了優化。與此同時它也表明了,一個更好的結構設計無需復雜的壓縮算法也能減少網絡的尺寸和相關的參數。
ENet
我們團隊打算把近期所有的結構特性整合成一個非常有效且輕質的網絡,這個網絡利用非常少的參數和計算就能夠取得先前的技術成果。這款網絡結構被命名為 ENet,它是由 Adam Paszke 設計的。我們已經利用該網絡對圖片添加標簽并對情景進行分析。在這里你可以看到 ENet 中的一些視頻正在運行(網址:https://www.油Tube.com/watchv=3jq4FnO5Nco&list=PLNgy4gid0G9c4qiVBrERE_5v_b1pu-5pQ)。這些視頻不是訓練數據集的一部分。
這是 ENet 的技術報告,網址:
https://arxiv.org/abs/1606.02147
ENet 是由編碼器和解碼器組成的網絡。編碼器是為 CNN 分類設計的普通軟件,但是解碼器是上采樣網為了把種類回傳到分割的原圖尺寸中而設計的。這項工作只用到了神經網絡,無需使用其他的算法來執行圖像分割。
正如你在圖表中看到的,ENet 的每個參數都具有極高的準確性,并沒有使用任何其他的神經網絡。
ENet 的設計初衷就是盡可能的減少資源的使用量。正如它取得的小小的成績,編碼和解碼網絡利用fp16精度同時運行只占用了0.7MB。
暫用空間如此小,ENet 與上述其他神經網絡解決切分正確率的辦法相似。
模塊分析
CNN 的模塊系統評估已經有結果了。發現使用的模塊優勢在于:
-
在不利用批量處理規范的情況下使用ELU的非線性特征,或者在利用批處理規范的同時使用ReLU。
-
應用RGB學習色彩轉換。
-
利用線性學習率使規則衰退。
-
大量使用平均層和最高 pooling 層。
-
使用大約128或者256的 mini-batch。對于你的 GPU 來說,如果這個數據太大的話,可以適當地降低學習率以適應批的大小。
-
利用全層對最后決定的預測進行卷積和平均。
-
如果你不能增大輸入圖片的大小,那么減緩在順向層中的跨度,這與上一條中所說的方法效果大致相同。
-
如果你的網絡擁有諸如 GoolgeNet 這樣既復雜又高度優化的結構,那么請注意小心地對待這些結構的變形。
Xception
Xception 網絡是利用一個像 ResNet 和 InceptionV4 網絡這樣既簡單又更為優雅的結構對 inception 模塊和結構進行優化而來。
Xception 模塊,如圖所示:
任何人都會喜歡這款具有簡單優雅結構的網絡,如圖所示:
這個結構有36個卷積階段,與 ResNet-34 非常相似。但是,其模塊和代碼跟 ResNet 一樣簡單,而且比 Inception V4 更易于理解。
Xception 網絡能夠實現 Torch7。也能實現 Keras 或者 TF。
有趣的是,新版 Xception 結構還是受到了我們所研究的分離卷積過濾器的啟發。
其它著名的結構
FractalNet 網絡利用了遞歸結構,可是其并未在 ImageNet 中進行測試,FractalNet 網絡是 ResNet 網絡的衍生品或者可以說是更為通用的 ResNet 網絡。
未來
我們相信講解神經網絡機構對深度學習的發展至關重要。我們團隊建議大家仔細閱讀和理解這個帖子上所有的文章。
但是,現在大家可能會奇怪為什么我們花費這么多時間講解結構,而沒有利用數據告知大家如何選用這些網絡以及如何組模型。這是一個循序漸進的過程,需要一步一步地進行。以上我在文章中向大家呈現的內容就是初期比較有趣的研究成功。
在這里大家還需要注意,我們主要討論的是計算視角下的結構。這與源于其他領域的神經網絡結構相似,而且學習其它任務的結構進化也是很有趣的。
本文作者
Eugenio Culurciello
在2004年,獲得了約翰霍普金斯大學電氣工程的博士學位,是威爾頓生物醫學工程學院、電氣與計算機工程學院和健康與人文科學學院的副教授。在2013年,Culurciello 博士創立了 TeraDeep ,一家專注于移動協處理器和神經網絡硬件設計的公司。
原文地址:
https://medium.com/towards-data-science/neural-network-architectures-156e5bad51ba
熱文推薦
Chatbot大牛推薦:AI、機器學習、深度學習必看9大入門視頻
一文讀懂Attention:臉書曾拿CNN秒殺谷歌,如今谷歌拿它秒殺所有人
活動預告 :中國國內級別最高、規模最大的人工智能大會——中國人工智能大會(CCAI)將于7.22-7.23在杭州舉行,趕快掃描下方圖片中的二維碼或點擊【閱讀原文】火速搶票吧。
關于CCAI
中國人工智能大會(CCAI),由中國人工智能學會發起,目前已成功舉辦兩屆,是中國國內級別最高、規模最大的人工智能大會。秉承前兩屆大會宗旨,由中國人工智能學會、阿里巴巴集團 & 螞蟻金服主辦,CSDN、中國科學院自動化研究所承辦的第三屆中國人工智能大會(CCAI 2017)將于 7 月 22-23 日在杭州召開。
作為中國國內高規格、規模空前的人工智能大會,本次大會由中國科學院院士、中國人工智能學會副理事長譚鐵牛,阿里巴巴技術委員會主席王堅,香港科技大學計算機系主任、AAAI Fellow 楊強,螞蟻金服副總裁、首席數據科學家漆遠,南京大學教授、AAAI Fellow 周志華共同甄選出在人工智能領域本年度海內外最值得關注的學術與研發進展,匯聚了超過 40 位頂級人工智能專家,帶來 9 場權威主題報告,以及“語言智能與應用論壇”、“智能金融論壇”、“人工智能科學與藝術論壇”、“人工智能青年論壇”4 大專題論壇,屆時將有超過 2000 位人工智能專業人士參與。