自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

無需數學背景,讀懂ResNet、Inception和Xception三大變革性架構

開發(fā) 開發(fā)工具
本文將聚焦于 ResNet、Inception 和 Xception 架構背后的直觀原理,并將解釋為什么它們成為了計算機視覺領域后續(xù)許多成果的構建模塊。

神經網絡領域近年來出現(xiàn)了很多激動人心的進步,斯坦福大學的 Joyce Xu 近日在 Medium 上談了她認為「真正重新定義了我們看待神經網絡的方式」的三大架構: ResNet、Inception 和 Xception。機器之心對本文進行了編譯介紹,更多架構可參閱機器之心文章《10 大深度學習架構:計算機視覺優(yōu)秀從業(yè)者必備(附代碼實現(xiàn))》。

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

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

  • VGG16
  • VGG19
  • ResNet50
  • Inception v3
  • Xception
  • MobileNet

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

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

ResNet

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

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

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

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

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

ResNet 模塊

ResNet 模塊

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

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

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

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

有趣的事實:

  • 上面提到的 1000 多層的網絡是開源的!我并不推薦你嘗試再訓練,但如果你就是要上:https://github.com/KaimingHe/resnet-1k-layers
  • 如果你覺得這有用而且有點躍躍欲試,我最近將 ResNet50 移植到了開源的 Clojure ML 庫 Cortex 中:https://github.com/thinktopic/cortex。你可以試試,看與 Keras 比較如何!

Inception

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

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

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

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

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

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

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

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

這就涉及到了見解 2:

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

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

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

有趣的事實:

  • 最早的 Inception 論文確實引用了來自電影《盜夢空間(Inception)》的「我們需要更深」的互聯(lián)網模因作為其名字的來源,參見:http://knowyourmeme.com/memes/we-need-to-go-deeper。這肯定是 knowyourmeme.com (http://knowyourmeme.com/) ***次出現(xiàn)在一篇谷歌論文的參考文獻里。
  • 第二篇 Inception 論文(提出 v2 和 v3)是在最早的 ResNet 論文發(fā)布之后的第二天發(fā)布的。2015 年 12 月真是深度學習的好日子。

Xception

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

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

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

標準的卷積層

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

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

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

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

有趣的事實:

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

未來發(fā)展

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

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

要了解遷移學習,Keras 有一個關于微調模型的很棒的指南:

https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html。如果你對此有興趣,一定不要錯過!

原文:

https://medium.com/towards-data-science/an-intuitive-guide-to-deep-network-architectures-65fdc477db41

【本文是51CTO專欄機構“機器之心”的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

 

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2015-09-14 13:51:16

2010-08-03 16:09:52

三網融合中國IDC行業(yè)資訊大全

2021-08-26 16:45:51

數字化

2024-10-12 13:00:24

2010-07-30 14:45:10

2015-08-18 13:36:52

2024-05-15 16:07:03

Python框架

2012-02-24 09:55:03

Adobe

2023-05-22 14:31:42

數字孿生開發(fā)

2014-05-21 10:17:06

SDN企業(yè)網絡簡化網絡管理

2011-06-09 15:30:31

HTML 5

2014-10-08 16:32:00

GITC2014全球互聯(lián)網技術大會

2016-03-25 17:44:16

2010-03-19 16:59:56

云計算

2014-02-11 14:29:15

IBM

2009-07-29 10:11:40

網絡管理軟件軟件變革

2017-09-14 12:45:28

2018-03-14 21:29:23

2016-12-09 10:03:39

AMD

2018-06-14 10:15:22

金融
點贊
收藏

51CTO技術棧公眾號