摘要:我想重溫過去幾年深度學習背景下的神經網絡設計史。卷積神經網絡成為深度學習的主力,深度學習是可以完成有用任務的大型神經網絡的新名字。和的開始探索減少深度神經網絡的計算負擔,提出了第一個架構。
深度神經網絡和深度學習是強大、流行的算法。它們的成功常常源于神經網絡架構的精心設計。
我想重溫過去幾年深度學習背景下的神經網絡設計史。
我們(譯者注:Alfredo Canziani、Adam Paszke、Eugenio Culurciello)在預印本文庫上發表的An Analysis of Deep Neural Network Models for Practical Applications對本文提到的所有神經網絡進行了更深入的分析和比較,可供參考。其中一張代表性的圖片:
上圖展示了在多個流行的神經網絡架構的top-1較精確度和單個前饋傳播所需要的運算量。
LeNet5
Yann LeCun在1994年提出的LeNet5,是首次出現的卷積神經網絡之一,推動了深度學習領域的發展。
LeNet5的架構是基礎性的,特別是其中的兩大洞見:圖像特征分布在整張圖像上,基于可學習參數的卷積是使用更少參數提取多個位置上的相似特征的有效方法。當時沒有用于訓練的GPU,CPU也很慢。因此能夠節省參數和計算在當時是一個關鍵優勢。LeNet5和將每個像素作為一個大型多層神經網絡的多帶帶輸入的做法截然相反。LeNet5說明,由于圖像是高度空間相關的,使用圖像的單個像素作為多帶帶輸入特征無法利用這些相關性。
LeNet5的特性:
卷積網絡使用一個3層的序列:卷積、池化、非線性——這可能是自這篇論文以來面向圖像的深度學習的關鍵特性!
使用卷積提取空間特征
使用映射的空間均值進行降采樣
tanh或sigmoids非線性
多層神經網絡(MLP)作為最終的分類器
層間的稀疏連接矩陣以避免巨大的計算開銷
總之,這一網絡是近年來許多架構的源頭,對這一領域中的許多人而言,這是一個真正的啟發。
空當
1998年到2010年是神經網絡的孵化期。大多數人沒有注意到它們日益增長的力量,而許多其他研究人員緩慢地取得進展。隨著手機拍攝和廉價數碼相機的興起,我們得到了越來越多的可用數據。算力也在不斷提高,CPU越來越快,GPU成為通用計算工具。這兩個趨勢推動了神經網絡的進展,盡管進展速度很慢。數據和算力使神經網絡解決的任務變得越來越有趣。
Dan Ciresan Net
2010年,Dan Claudiu Ciresan和Jurgen Schmidhuber發表的Dan Ciresan Net是最早的GPU神經網絡實現之一。Dan Ciresan Net在NVIDIA GTX 280上實現了前饋傳播和反向傳播,神經網絡不超過9層。
AlexNet
2012年,Alex Krizhevsky發表了AlexNet,LeNet更深、更廣的版本。AlexNet在困難的ImageNet競賽中遙遙領先。
AlexNet將LeNet的洞見擴展到一個大得多的網絡,該網絡可以用于學習更復雜的對象和對象層級關系。這一工作的貢獻是:
使用ReLU作為非線性
使用dropout技術選擇性地忽略訓練中的單個神經元,避免模型的過擬合
重疊較大池化(overlapping max pooling),避免平均池化(average pooling)的平均效應
使用NVIDIA GTX 580 GPU減少訓練時間
當時,GPU比CPU提供了更多的核心,可以將訓練速度提升10倍,從而允許使用更大的數據集和更大的圖像。
AlexNet的成功開啟了一場小革命。卷積神經網絡成為深度學習的主力,深度學習是“可以完成有用任務的大型神經網絡”的新名字。
Overfeat
2013年12月,Yann LeCun領導的NYU實驗室提出了Overfeat,一個AlexNet的衍生物。這篇論文也提出了學習包圍盒,成為之后許多其他論文的主題。我認為學習切分對象比學習人工包圍盒更好。
VGG
Oxford的VGG網絡率先在每個卷積層中使用了更小的3x3過濾器,將其組合為卷積序列。
這看起來違背了LeNet的原則,在LeNet中,大型的卷積用來刻畫圖像的相似特征。VGG沒有使用AlexNet的9x9或11x11過濾器,VGG使用的過濾器開始變小了,和LeNet想要避免的不知名的1x1卷積太過接近了,至少在網絡的表層是這樣。然而,VGG的巨大進展是發現多個3x3卷積序列可以模擬更大、更具容受性的結構,例如5x5和7x7的卷積。這些想法也在近期的網絡架構中得到了應用,例如Inception和ResNet。
VGG網絡使用多個3x3卷積層來表示復雜的特征。注意上表VGG-E的3、4、5塊:多次使用256x256和512x512的3x3過濾器構成序列,以提取更復雜的特征,以及這些特征的組合。這相當于3個大型的帶有512x512過濾器的卷積層!顯然這導向了大量的參數,以及更強的學習能力。然而,由于很難訓練這些網絡,需要將其拆分成逐層疊加的小型網絡。這是因為缺乏正則化模型的強力方法,某種程度上這限制了大量參數提供的巨大搜索空間。
VGG使用多層巨大的特征尺寸,因而運行時推斷的開銷很大。后來的Inception的瓶頸層降低了特征的數量,從而節省了計算開銷。
Network-in-network
Network-in-network(NiN,網中網)提出了偉大而簡單的洞見,使用1x1卷積為卷積特征層提供更多的計算能力。
NiN架構在每一卷積后使用空間MLP層,以便在另一層之前更好的組合特征。同樣,有人可能認為1x1卷積違背了LeNet的原則,但事實上1x1卷積確實有助于以更好的方式組合卷積特征,這無法通過簡單地堆疊更多的卷積層來達成。這和使用原始像素作為下一層的做法不同。這里1x1的卷積用來在空間上組合卷積后特征映射上的特征,所以它們實際上使用非常少的參數,在所有像素間共享這些特征!
通過將卷積特征組合成更復雜的特征組,MLP的能力可以大大增強單個卷積特征的效用。最近的架構同樣使用了這一想法,例如ResNet、Inception及其衍生物。
NiN也使用平均池化層作為最終的分類器的組成部分,另一個在之后的架構中變得常見的做法。這是為了在分類前平均網絡對多張輸入圖像的反應。
Google 和 Inception
Google的Christian Szegedy開始探索減少深度神經網絡的計算負擔,提出了第一個Inception架構GoogLeNet。
到2014年秋為止,深度學習模型在分類圖像與視頻幀方面變得極其有用。大多數懷疑者已經放下了疑心,深度學習與神經網絡這次是真的回歸了,并將持續下去。鑒于這些技術的用處,Google這樣的互聯網巨頭非常有興趣面向他們的服務器農場設計高效的大規模部署架構。
Christian考慮了很多在保持深度神經網絡的較先進表現(例如在ImageNet上的表現)的前提下,減輕其計算負擔的方式。或者維持現有的計算開銷的前提下改進表現。
他和他的團隊提出了Inception模塊:
乍看起來,這基本上是1×1、3×3、5×5卷積過濾器的并行組合。但是Inception的偉大洞見是用1×1的卷積塊(NiN)在昂貴的并行模塊之前減少特征的數量。這通常被稱為“瓶頸(bottleneck)”。下面的“瓶頸層(bottleneck layer)”一節將具體解釋。
GoogLeNet使用不帶inception模塊的主干作為初始層,之后是與NiN類似的一個平均池化層與softmax分類器。相比AlexNet和VGG,這個分類器的運算數量極少。這也促成了一種非常高效的網絡設計。
瓶頸層
受NiN的啟發,Inception的瓶頸層減少了每一層的特征數量,從而減少了運算量;因此得以保持較低的推斷時間。在將數據傳入昂貴的卷積模塊前,特征的數量會減少,比方說,4倍。這大大節省了計算開銷,也導致了架構的成功。
讓我們驗證下細節。假設你有256個特征輸入,256個特征輸出,同時假設Inception層只執行3×3的卷積。這意味著總共要進行 256×256×3×3的卷積(589000次乘積累加(MAC)運算)。這可能超出了我們的計算預算,比方說,在Google服務器上花0.5毫秒運行該層。作為替代,我們決定減少需要卷積的特征的數量,比如減少到64(256/4)個。在這種情況下,我們首先進行256到64的1×1卷積,然后在所有Inception的分支上進行64次卷積,接著再使用一個64到256的1×1卷積。現在運算如下:
256×64×1×1 = 16000
64×64×3×3 = 36000
64×256×1×1 = 16000s
現在的計算量大約是70000,相比之前的約600000,幾乎減少了10倍。
而且,盡管我們進行了更少的運算,我們在此層上并沒有損失其概括性。事實證明瓶頸層在ImageNet這樣的數據集上的表現達到了較先進的水平,而且瓶頸層也被用于之后出現的一些架構,比如ResNet。
瓶頸層取得成功的原因是輸入特征是相關的,因此可通過1×1卷積適當結合以減少冗余。然后,對數量較少的特征進行卷積,并在下一層再次擴展成有意義的組合。
Inception V3(和V2)
Christian和他的團隊是非常高產的研究人員。2015年2月,他們引入了作為Inception V2的Batch-normalized Inception。批量歸一化(batch-normalization)在一層的輸出上計算所有特征映射的均值和標準差,基于這些值歸一化神經網絡層的響應。這相當于“漂白”了數據,使所有神經映射在同一范圍內響應,同時均值為零。這有助于訓練,因為下一層不需要從輸入數據中學習偏移量,得以重點關注如何較好地結合特征。
2015年12月,他們發布了Inception模塊的新版本及相應的架構。這篇論文更好地解釋了原始的GoogLeNet架構,給出了更多設計選擇的細節。原本的想法如下:
平衡深度與寬度,小心地構建網絡,從而較大化進入網絡的信息流。每次池化前,增加特征映射。
當深度增加時,特征數量和網絡層寬度也同步增加。
在每一層增加寬度,以便在下一層之前增加特征的組合。
在可能的情況下只使用3×3的卷積,因為5×5和7×7的過濾器能分解為多個3×3的卷積。見下圖:
因此新的Inception模塊變為:
過濾器也可以通過扁平化卷積分解為更復雜的模塊:
在進行inception運算時,inception模塊也可以通過提供池化縮減數據的尺寸。這基本上等于基于一個簡單的池化層并行跨距進行卷積操作。
Inception仍然使用池化層和softmax作為最終分類器。
ResNet
2015年12月,大約在Inception V3提出的同時,ResNet出世了,掀起了網絡架構的革命。ResNet(殘差網絡)的想法很簡單:將兩個連續的卷積層的輸出加上跳過了這兩層的輸入傳給下一層。
這和之前的一些想法(比如這個)類似。ResNet跳過了兩個網絡層,并應用于更大規模的網絡。跳過2層是一個關鍵的直覺,因為跳過1層并沒有帶來多少提升。2層網絡可能被看成一個小型的分類器,或者一個網中網(Network-In-Network)!
這也是第一次訓練超過一百,甚至一千層的網絡。
具有海量網絡層的ResNet開始使用一個瓶頸層,與Inception的瓶頸層類似:
這一層首先使用輸出較小(通常是輸入的 1/4)的1×1卷積,接著是一3×3的層,再接著是更多特征的1×1層,從而減少每一層的特征數量。和在Inception模塊中的情形一樣,這允許保持運算量處于較低水平的前提下,提供豐富的特征組合。參考“瓶頸層”一節(“GoogLeNet和Inception”一節之后)。
ResNet在輸入(主干)上使用一個相當簡單的初始層:一個7x7的卷積層,之后是2個池化。和使用更復雜、不那么直觀的主干的Inception V3、V4大相徑庭。
Inception也使用池化層和softmax作為最終分類器。
每天都產生關于ResNet的更多洞見:
ResNet既可以被看成并行的模塊,也可以被看成序列化的模塊。輸入并行地進入多個模塊,而每個模塊的輸出以序列化的方式連接。
ResNet也可以被看成并行或連續模塊的多個系綜。
ResNet通常在相對較淺的20-30層的網絡塊上以并行的方式運行,而不是序列化地流過整個網絡。
當ResNet像RNN一樣把輸出反向傳播到輸入時,該網絡可以被看成更好的生物學上可解釋的皮層模型。
Inception V4
Christian與其團隊又提出了Inception的一個新版本。
Inception V4模塊主干之后的部分和Inception V3很相似:
Inception V4也結合了ResNet模塊:
不過,這次提出的方案,在我看來,不那么優雅,也更復雜了,充滿了不那么透明的啟發。其中的選擇難以理解,作者也難以論證。
因此,基于這點考慮,我們認為ResNet更為優秀,因為它是一個易于理解和修改的簡明清晰的網絡。
SqueezeNet
最近發表的SqueezeNet重新整理了ResNet與Inception之中的許多概念,表明一個更好的架構設計無需復雜的壓縮算法就能實現較小的網絡尺寸和較少的參數數目。
ENet
我們組建了一個團隊,結合最近的架構的所有特性,構建一個非常高效的輕量網絡,該網絡使用很少的參數和計算就能達到較先進的結果。該網絡架構被稱為ENet,由Adam Paszke設計。我們已經將其用于像素層次的標注和場景解析。這里是一些展示ENet效果的視頻。這些視頻展示的是在訓練集之外的數據上的表現。
這里是ENet的技術報告。ENet是一個由編碼器和解碼器組成的網絡。編碼器是一個常規的用于分類的CNN,解碼器是一個升采樣網絡,將分類反向傳播到原始圖像尺寸以切分圖像。圖像切分只使用了神經網絡,沒有使用其他算法。
你可以看到,在所有的神經網絡中,折算參數數量后,ENet的較精確度較高!
ENet從一開始就被設計為盡可能使用最小數目的資源。就此而言,它的尺寸很小,在16浮點精度下,編碼器和解碼器網絡總共只使用0.7 MB。即使在這樣小的尺寸下,ENet在切分精度上也達到或超過了其他純神經網絡方案。
模塊分析
有一篇論文對各CNN模塊進行了系統分析,提出了一些有益的發現:
使用ELU非線性,但不使用批量歸一化或ReLU。
應用一個學習過的RGB彩色空間轉換。
使用線性學習率衰減策略。
使用平均和較大池化層的和。
使用約128或256的mini-batch大小。如果你的GPU無法承受這么大的batch,等比例縮小batch,并據此降低學習率。
使用全連接層作為卷積,并平均其預測以得出最后的結果。
計劃增加訓練集大小的時候,檢查下是否未曾到達高原。
數據的清潔度比數據的尺寸更重要。
如果你不能增加輸入圖像的尺寸,減少作為結果的層的跨距(stride),大致上效果一樣。
如果你使用的網絡是高度優化的復雜架構,例如GoogLeNet,謹慎修改。
XCeption
Xception改進了inception模塊和架構,基于一個更為簡單優雅的架構達到了ResNet和Inception V4的表現。
Xception模塊如下所示:
這一網絡架構上的簡單性和優雅性將受到任何人的喜愛,如下所示:
這一架構有36個卷積階段,和ResNet-34有些類似。Xception的模型和代碼和ResNet一樣簡單,比Inception好理解太多。
這里有一個Torch7的實現。這里則是一個Keras/TF的實現。
有趣的是,我們的工作使用了可分卷積過濾器,最近的Xception架構受此啟發,同樣使用了可分卷積過濾器。
MobileNets
2017年4月,出現了一個新的MobileNets架構。該架構使用可分卷積以減少參數數目。可分卷積和前文提及的Xception相同。論文聲稱大大減少了參數——據論文報告,FaceNet案例中參數減少了一半。下面是該模型的完整架構:
不幸的是,我們在實際應用中測試了這個網絡,發現在Titan Xp GPU上,batch尺寸為1張圖像的情況下,這一網絡異常緩慢。下面是單張圖片的推斷時間的比較:
resnet18: 0.002871
alexnet: 0.001003
vgg16: 0.001698
squeezenet: 0.002725
mobilenet: 0.033251
很清楚,MobileNets不是快速推斷的競爭者!它可能降低了網絡的參數數量和在硬盤上的尺寸,但并不可用。
其他值得關注的架構
FractalNet使用遞歸架構,在此之前,沒有人在ImageNet上嘗試過遞歸架構。FractalNet是ResNet的衍生物,或者說,ResNet的泛化版本。
未來
我們相信,打造神經網絡架構對深度學習領域的進展至關重要。我們強烈建議仔細閱讀并理解本文提到的所有論文。
但有人現在可能會想,為什么我們不得不花費這么多時間來打造架構,為什么我們不讓數據來告訴我們要使用什么架構,以及如何組合模塊。這個想法很好,但現在尚處于研究之中。這里有一些有趣的初步結果。
同時注意,我們這里主要討論了用于計算機視覺的架構。其他領域也發展了類似的神經網絡架構,研究所有其他任務的架構演化也很有趣。
我們最近的論文比較了上述神經網絡架構及其計算性能,如果你對此感興趣,請參閱我們的論文。(論文鏈接:https://arxiv.org/abs/1605.07678)
致謝
本文受到了與Abhishek Chaurasia、Adam Paszke、Sangpil Kim、Alfredo Canziani及Purdue大學e-Lab的其他人的討論的啟發。
歡迎加入本站公開興趣群商業智能與數據分析群
興趣范圍包括各種讓數據產生價值的辦法,實際應用案例分享與討論,分析工具,ETL工具,數據倉庫,數據挖掘工具,報表系統等全方位知識
QQ群:81035754
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/4713.html
摘要:為了優化動靜混合站點和純動態站點的加速效果,阿里云推出了全站加速方案,通過智能區分動靜態請求,實現整站加速效果的全面提升。 摘要: 伴隨著近幾年O2O的爆發,網絡已經不僅是傳統的展示企業品牌的渠道,而逐漸演變成為嫁接企業和用戶之間服務和交流的橋梁,我們開始賦予網絡更多的功能,比如購物、出行、學習、娛樂等等。 同時,網絡內容形態的進階發展,網頁內容已經從靜態的圖片、文字向短視頻、直播演變...
摘要:淺談秒殺系統架構設計后端掘金秒殺是電子商務網站常見的一種營銷手段。這兩個項目白話網站架構演進后端掘金這是白話系列的文章。 淺談秒殺系統架構設計 - 后端 - 掘金秒殺是電子商務網站常見的一種營銷手段。 不要整個系統宕機。 即使系統故障,也不要將錯誤數據展示出來。 盡量保持公平公正。 實現效果 秒殺開始前,搶購按鈕為活動未開始。 秒殺開始時,搶購按鈕可以點擊下單。 秒殺結束后,按鈕按鈕變...
摘要:谷歌發布的一篇論文給出了較早的關于深度神經網絡訓練相關的理論證明,實驗觀察結果也為初步解釋梯度下降強于貝葉斯優化奠定了基礎。 谷歌 AI 發布的一篇論文給出了較早的關于深度神經網絡訓練相關的理論證明,實驗觀察結果也為初步解釋梯度下降強于貝葉斯優化奠定了基礎。神經網絡的理論面紗,正逐步被揭開。原來,神經網絡實際上跟線性模型并沒那么大不同!谷歌 AI 的研究人員日前在 arxiv 貼出一篇文章,...
摘要:這一切始于年的一篇論文,其使用了稱為的算法用來提取感興趣候選區域,并用一個標準的卷積神經網絡去分類和調整這些區域。 本文詳細解釋了 Faster R-CNN 的網絡架構和工作流,一步步帶領讀者理解目標檢測的工作原理,作者本人也提供了 Luminoth 實現,供大家參考。Luminoth 實現:https://github.com/tryolabs/luminoth/tree/master/l...
摘要:在這篇博客文章中,我將討論使用深度學習的方法對時間序列數據進行分類,而無需手動設計特征。卷積神經網絡第一步是將數據投射到具有一定形狀的數組中,其中是訓練期間批次中的示例數,是時間序列的長度在我們的情況下為,并且是進行測量的通道的數量。 摘要:2017年深度學習框架關注度排名tensorflow以絕對的優勢占領榜首,本文通過使用tensorflow優化過去一個使用特征提取方法的框架,證實...
閱讀 1369·2021-10-13 09:39
閱讀 1333·2021-09-23 11:22
閱讀 2242·2019-08-30 14:05
閱讀 1059·2019-08-29 17:03
閱讀 770·2019-08-29 16:24
閱讀 2227·2019-08-29 13:51
閱讀 655·2019-08-29 13:00
閱讀 1290·2019-08-29 11:24