小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

無需數(shù)學背景,讀懂ResNet、Inception和Xception三大變革性架構(gòu)

 Rainbow_Heaven 2017-11-06

“本文經(jīng)機器之心(微信公眾號:almosthuman2014)授權(quán)轉(zhuǎn)載。

選自Medium

作者:Joyce Xu

機器之心編譯

參與:Pandas

神經(jīng)網(wǎng)絡領域近年來出現(xiàn)了很多激動人心的進步,斯坦福大學的 Joyce Xu 近日在 Medium 上談了她認為「真正重新定義了我們看待神經(jīng)網(wǎng)絡的方式」的三大架構(gòu): ResNet、Inception 和 Xception。機器之心對本文進行了編譯介紹。

過去幾年來,計算機視覺領域中深度學習的諸多進展都可以歸結(jié)到幾種神經(jīng)網(wǎng)絡架構(gòu)。除開其中的所有數(shù)學內(nèi)容、代碼和實現(xiàn)細節(jié),我想探索一個簡單的問題:這些模型的工作方式和原因是什么?

在本文寫作時,Keras 已經(jīng)將這 6 種預訓練模型集成到了庫中:

  • VGG16

  • VGG19

  • ResNet50

  • Inception v3

  • Xception

  • MobileNet

VGG 網(wǎng)絡以及從 2012 年以來的 AlexNet 都遵循現(xiàn)在的基本卷積網(wǎng)絡的原型布局:一系列卷積層、最大池化層和激活層,最后還有一些全連接的分類層。MobileNet 本質(zhì)上是為移動應用優(yōu)化后的 Xception 架構(gòu)的流線型(streamline)版本。但剩下的三個卻真正重新定義了我們看待神經(jīng)網(wǎng)絡的方式。

本文的剩余部分將聚焦于 ResNet、Inception 和 Xception 架構(gòu)背后的直觀原理,并將解釋為什么它們成為了計算機視覺領域后續(xù)許多成果的構(gòu)建模塊。

ResNet

ResNet 誕生于一個美麗而簡單的觀察:為什么非常深度的網(wǎng)絡在增加更多層時會表現(xiàn)得更差?

直覺上推測,更深度的網(wǎng)絡不會比更淺度的同類型網(wǎng)絡表現(xiàn)更差吧,至少在訓練時間上是這樣(當不存在過擬合的風險時)。讓我們進行一個思想實驗,假設我們已經(jīng)構(gòu)建了一個 n 層網(wǎng)絡,并且實現(xiàn)了一定準確度。那么一個 n+1 層網(wǎng)絡至少也應該能夠?qū)崿F(xiàn)同樣的準確度——只要簡單復制前面 n 層,再在最后一層增加一層恒等映射就可以了。類似地,n+2、n+3 和 n+4 層的網(wǎng)絡都可以繼續(xù)增加恒等映射,然后實現(xiàn)同樣的準確度。但是在實際情況下,這些更深度的網(wǎng)絡基本上都會表現(xiàn)得更差。

ResNet 的作者將這些問題歸結(jié)成了一個單一的假設:直接映射是難以學習的。而且他們提出了一種修正方法:不再學習從 x 到 H(x) 的基本映射關(guān)系,而是學習這兩者之間的差異,也就是「殘差(residual)」。然后,為了計算 H(x),我們只需要將這個殘差加到輸入上即可。

假設殘差為 F(x)=H(x)-x,那么現(xiàn)在我們的網(wǎng)絡不會直接學習 H(x) 了,而是學習 F(x)+x。

這就帶來了你可能已經(jīng)見過的著名 ResNet(殘差網(wǎng)絡)模塊:

ResNet 模塊

ResNet 的每一個「模塊(block)」都由一系列層和一個「捷徑(shortcut)」連接組成,這個「捷徑」將該模塊的輸入和輸出連接到了一起。然后在元素層面上執(zhí)行「加法(add)」運算,如果輸入和輸出的大小不同,那就可以使用零填充或投射(通過 1×1 卷積)來得到匹配的大小。

回到我們的思想實驗,這能大大簡化我們對恒等層的構(gòu)建。直覺上就能知道,比起從頭開始學習一個恒等變換,學會使 F(x) 為 0 并使輸出仍為 x 要容易得多。一般來說,ResNet 會給層一個「參考」點 x,以 x 為基礎開始學習。

這一想法在實踐中的效果好得讓人吃驚。在此之前,深度神經(jīng)網(wǎng)絡常常會有梯度消失問題的困擾,即來自誤差函數(shù)的梯度信號會在反向傳播回更早的層時指數(shù)級地下降。本質(zhì)上講,在誤差信號反向回到更早的層時,它們會變得非常小以至于網(wǎng)絡無法學習。但是,因為 ResNet 的梯度信號可以直接通過捷徑連接回到更早的層,所以我們一下子就可以構(gòu)建 50 層、101 層、152 層甚至 1000 層以上的網(wǎng)絡了,而且它們的表現(xiàn)依然良好。那時候,這在當時最佳的基礎上實現(xiàn)了巨大的飛躍——這個 22 層的網(wǎng)絡贏得了 ILSVRC 2014 挑戰(zhàn)賽。

ResNet 是神經(jīng)網(wǎng)絡領域我個人最喜歡的進展之一。很多深度學習論文都是通過對數(shù)學、優(yōu)化和訓練過程進行調(diào)整而取得一點點微小的進步,而沒有思考模型的底層任務。ResNet 則從根本上改變了我們對神經(jīng)網(wǎng)絡及其學習方式的理解。

有趣的事實:

  • 上面提到的 1000 多層的網(wǎng)絡是開源的!我并不推薦你嘗試再訓練,但如果你就是要上:https://github.com/KaimingHe/resnet-1k-layers

  • 如果你覺得這有用而且有點躍躍欲試,我最近將 ResNet50 移植到了開源的 Clojure ML 庫 Cortex 中:https://github.com/thinktopic/cortex。你可以試試,看與 Keras 比較如何!

Inception

如果 ResNet 是為了更深,那么 Inception 家族就是為了更寬。Inception 的作者對訓練更大型網(wǎng)絡的計算效率尤其感興趣。換句話說:我們怎樣在不增加計算成本的前提下擴展神經(jīng)網(wǎng)絡?

Inception 最早的論文關(guān)注的是一種用于深度網(wǎng)絡的新型構(gòu)建模塊,現(xiàn)在這一模塊被稱為「Inception module」。究其核心,這種模塊源自兩種思想見解的交匯。

第一個見解與對層的操作有關(guān)。在傳統(tǒng)的卷積網(wǎng)絡中,每一層都會從之前的層提取信息,以便將輸入數(shù)據(jù)轉(zhuǎn)換成更有用的表征。但是,不同類型的層會提取不同種類的信息。5×5 卷積核的輸出中的信息就和 3×3 卷積核的輸出不同,又不同于最大池化核的輸出……在任意給定層,我們怎么知道什么樣的變換能提供最「有用」的信息呢?

見解 1:為什么不讓模型選擇?

Inception 模塊會并行計算同一輸入映射上的多個不同變換,并將它們的結(jié)果都連接到單一一個輸出。換句話說,對于每一個層,Inception 都會執(zhí)行 5×5 卷積變換、3×3 卷積變換和最大池化。然后該模型的下一層會決定是否以及怎樣使用各個信息。

這種模型架構(gòu)的信息密度更大了,這就帶來了一個突出的問題:計算成本大大增加。不僅大型(比如 5×5)卷積過濾器的固有計算成本高,并排堆疊多個不同的過濾器更會極大增加每一層的特征映射的數(shù)量。而這種計算成本增長就成為了我們模型的致命瓶頸。

想一下,每額外增加一個過濾器,我們就必須對所有輸入映射進行卷積運算以計算單個輸出。如下圖所示:從單個過濾器創(chuàng)建一個輸出映射涉及到在之前一層的每個單個映射上執(zhí)行計算。

假設這里有 M 個輸入映射。增加一個過濾器就意味著要多卷積 M 次映射;增加 N 個過濾器就意味著要多卷積 N*M 次映射。換句話說,正如作者指出的那樣:「過濾器數(shù)量的任何統(tǒng)一增長都會導致計算量的 4 倍增長。」我們的樸素 Inception 模塊只是將過濾器的數(shù)量增加了三四倍。但從計算成本上看,這簡直就是一場大災難。

這就涉及到了見解 2:

使用 1×1 卷積來執(zhí)行降維。為了解決上述計算瓶頸,Inception 的作者使用了 1×1 卷積來「過濾」輸出的深度。一個 1×1 卷積一次僅查看一個值,但在多個通道上,它可以提取空間信息并將其壓縮到更低的維度。比如,使用 20 個 1×1 過濾器,一個大小為 64×64×100(具有 100 個特征映射)的輸入可以被壓縮到 64×64×20。通過減少輸入映射的數(shù)量,Inception 可以將不同的層變換并行地堆疊到一起,從而得到既深又寬(很多并行操作)的網(wǎng)絡。

這能達到多好的效果?Inception 的第一個版本是 GoogLeNet,也就是前面提及的贏得了 ILSVRC 2014 比賽的 22 層網(wǎng)絡。一年之后,研究者在第二篇論文中發(fā)展出了 Inception v2 和 v3,并在原始版本上實現(xiàn)了多種改進——其中最值得一提的是將更大的卷積重構(gòu)成了連續(xù)的更小的卷積,讓學習變得更輕松。比如在 v3 中,5×5 卷積被替換成了兩個 連續(xù)的 3×3 卷積。

Inception 很快就變成了一種具有決定性意義的模型架構(gòu)。最新的版本 Inception v4 甚至將殘差連接放進了每一個模組中,創(chuàng)造出了一種 Inception-ResNet 混合結(jié)構(gòu)。但更重要的是,Inception 展現(xiàn)了經(jīng)過良好設計的「網(wǎng)中有網(wǎng)」架構(gòu)的能力,讓神經(jīng)網(wǎng)絡的表征能力又更上了一層樓。

有趣的事實:

  • 最早的 Inception 論文確實引用了來自電影《盜夢空間(Inception)》的「我們需要更深」的互聯(lián)網(wǎng)模因作為其名字的來源,參見:http:///memes/we-need-to-go-deeper。這肯定是 (http:///) 第一次出現(xiàn)在一篇谷歌論文的參考文獻里。

  • 第二篇 Inception 論文(提出 v2 和 v3)是在最早的 ResNet 論文發(fā)布之后的第二天發(fā)布的。2015 年 12 月真是深度學習的好日子。

Xception

Xception 表示「extreme inception」。和前面兩種架構(gòu)一樣,它重塑了我們看待神經(jīng)網(wǎng)絡的方式——尤其是卷積網(wǎng)絡。而且正如其名字表達的那樣,它將 Inception 的原理推向了極致。

它的假設是:「跨通道的相關(guān)性和空間相關(guān)性是完全可分離的,最好不要聯(lián)合映射它們?!?/p>

這是什么意思?在傳統(tǒng)的卷積網(wǎng)絡中,卷積層會同時尋找跨空間和跨深度的相關(guān)性。讓我們再看一下標準的卷積層:

在上圖中,過濾器同時考慮了一個空間維度(每個 2×2 的彩色方塊)和一個跨通道或「深度」維度(4 個方塊的堆疊)。在輸入圖像的輸入層,這就相當于一個在所有 3 個 RGB 通道上查看一個 2×2 像素塊的卷積過濾器。那問題來了:我們有什么理由去同時考慮圖像區(qū)域和通道?

在 Inception 中,我們開始將兩者稍微分開。我們使用 1×1 的卷積將原始輸入投射到多個分開的更小的輸入空間,而且對于其中的每個輸入空間,我們都使用一種不同類型的過濾器來對這些數(shù)據(jù)的更小的 3D 模塊執(zhí)行變換。Xception 更進一步。不再只是將輸入數(shù)據(jù)分割成幾個壓縮的數(shù)據(jù)塊,而是為每個輸出通道單獨映射空間相關(guān)性,然后再執(zhí)行 1×1 的深度方面的卷積來獲取跨通道的相關(guān)性。

其作者指出這本質(zhì)上相當于一種已有的被稱為「深度方面可分的卷積(depthwise separable convolution)」的運算,它包含一個深度方面的卷積(一個為每個通道單獨執(zhí)行的空間卷積),后面跟著一個逐點的卷積(一個跨通道的 1×1 卷積)。我們可以將其看作是首先求跨一個 2D 空間的相關(guān)性,然后再求跨一個 1D 空間的相關(guān)性??梢钥闯?,這種 2D+1D 映射學起來比全 3D 映射更加簡單。

而且這種做法是有效的!在 ImageNet 數(shù)據(jù)集上,Xception 的表現(xiàn)稍稍優(yōu)于 Inception v3,而且在一個有 17000 類的更大規(guī)模的圖像分類數(shù)據(jù)集上的表現(xiàn)更是好得多。最重要的是,它的模型參數(shù)的數(shù)量和 Inception 一樣多,說明它的計算效率也更高。Xception 非常新(2017 年 4 月才公開),但正如前面提到的那樣,這個架構(gòu)已經(jīng)在通過 MobileNet 助力谷歌的移動視覺應用了。

有趣的事實:

  • Xception 的作者也是 Keras 的作者。Francois Chollet 是真正的大神。

未來發(fā)展

這就是 ResNet、Inception 和 Xception!我堅信我們需要對這些網(wǎng)絡有很好的直觀理解,因為它們在研究界和產(chǎn)業(yè)界的應用越來越普遍。我們甚至可以通過所謂的遷移學習將它們用在我們自己的應用中。

遷移學習是一種機器學習技術(shù),即我們可以將一個領域的知識(比如 ImageNet)應用到目標領域,從而可以極大減少所需要的數(shù)據(jù)點。在實踐中,這通常涉及到使用來自 ResNet、Inception 等的預訓練的權(quán)重初始化模型,然后要么將其用作特征提取器,要么就在一個新數(shù)據(jù)集上對最后幾層進行微調(diào)。使用遷移學習,這些模型可以在任何我們想要執(zhí)行的相關(guān)任務上得到重新利用,從自動駕駛汽車的目標檢測到為視頻片段生成描述。

要了解遷移學習,Keras 有一個關(guān)于微調(diào)模型的很棒的指南:https://blog./building-powerful-image-classification-models-using-very-little-data.html。如果你對此有興趣,一定不要錯過!

原文鏈接:https:///towards-data-science/an-intuitive-guide-to-deep-network-architectures-65fdc477db41

本文為機器之心編譯,轉(zhuǎn)載請聯(lián)系機器之心公眾號獲得授權(quán)。

?------------------------------------------------

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多