吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

Inception 網絡(Inception network)

在上節筆記中,你已經見到了所有的Inception網絡基礎模塊。在本節筆記中,我們將學習如何將這些模塊組合起來,構築你自己的Inception網絡。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

Inception模塊會將之前層的激活或者輸出作為它的輸入,作為前提,這是一個28×28×192的輸入,和我們之前筆記中的一樣。

我們詳細分析過的例子是,先通過一個1×1的層,再通過一個5×5的層,1×1的層可能有16個通道,而5×5的層輸出為28×28×32,共32個通道,這就是上個筆記最後講到的我們處理的例子。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

為了在這個3×3的卷積層中節省運算量,你也可以做相同的操作,這樣的話3×3的層將會輸出28×28×128。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

或許你還想將其直接通過一個1×1的卷積層,這時就不必在後面再跟一個1×1的層了,這樣的話過程就只有一步,假設這個層的輸出是28×28×64。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

最後是池化層。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

這裡我們要做些有趣的事情,為了能在最後將這些輸出都連接起來,我們會使用same類型的padding來池化,使得輸出的高和寬依然是28×28,這樣才能將它與其他輸出連接起來。但注意,如果你進行了最大池化,即便用了same padding,3×3的過濾器,stride為1,其輸出將會是28×28×192,其通道數或者說深度與這裡的輸入(通道數)相同

所以看起來它會有很多通道,我們實際要做的就是再加上一個1×1的卷積層,去進行我們在1×1卷積層的筆記裡所介紹的操作,將通道的數量縮小,縮小到28×28×32。也就是使用32個維度為1×1×192的過濾器,所以輸出的維度其通道數縮小為32。這樣就避免了最後輸出時,池化層佔據所有的通道。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

最後,將這些方塊全都連接起來。在這過程中,把得到的各個層的通道都加起來,最後得到一個28×28×256的輸出。通道連接實際就是之前筆記中看到過的,把所有方塊連接在一起的操作。

這就是一個Inception模塊,而Inception網絡所做的就是將這些模塊都組合到一起

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

這是一張取自Szegety et al的論文中關於Inception網絡的圖片,你會發現圖中有許多重複的模塊,可能整張圖看上去很複雜,但如果你只截取其中一個環節(編號1),就會發現這是在前一圖中所見的Inception模塊。

我們深入看看裡邊的一些細節,這是另一個Inception模塊(編號2),這也是一個Inception模塊(編號3)。3之後這裡有一些額外的最大池化層(編號6)來

修改高和寬的維度。這是另外一個Inception模塊(編號4),這是另外一個最大池化層(編號7),它改變了高和寬。而這裡又是另一個Inception模塊(編號5)。

所以Inception網絡只是很多這些你學過的模塊在不同的位置重複組成的網絡,所以如果你理解了之前所學的Inception模塊,你就也能理解Inception網絡。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

事實上,如果你讀過論文的原文,你就會發現,這裡其實還有一些分支,我現在把它們加上去。所以這些分支有什麼用呢?在網絡的最後幾層,通常稱為全連接層,在它之後是一個softmax層(編號1)來做出預測,這些分支(編號2)所做的就是通過隱藏層(編號3)來做出預測,所以這其實是一個softmax輸出(編號2),這(編號1)也是。這是另一條分支(編號4),它也包含了一個隱藏層,通過一些全連接層,然後有一個softmax來預測,輸出結果的標籤。

你應該把它看做Inception網絡的一個細節,它確保了即便是隱藏單元和中間層(編號5)也參與了特徵計算,它們也能預測圖片的分類。它在Inception網絡中,起到一種調整的效果,並且能防止網絡發生過擬合。

還有這個特別的Inception網絡是由Google公司的作者所研發的,它被叫做GoogleLeNet,這個名字是為了向LeNet網絡致敬。

在之前的筆記中你應該瞭解了LeNet網絡。我覺得這樣非常好,因為深度學習研究人員是如此重視協作,深度學習工作者對彼此的工作成果有一種強烈的敬意。

最後,有個有趣的事實,Inception網絡這個名字又是緣何而來呢?

Inception的論文特地提到了這個模因(meme,網絡用語即“梗”),就是“我們需要走的更深”(We need to go deeper),論文還引用了這個網址(http://knowyourmeme.com/memes/we-need-to-go-deeper),連接到這幅圖片上,如果你看過Inception(盜夢空間)這個電影,你應該能看懂這個由來。作者其實是通過它來表明了建立更深的神經網絡的決心,他們正是這樣構建了Inception。我想一般研究論文,通常不會引用網絡流行模因(梗),但這裡顯然很合適。

吳恩達深度學習筆記(88)-谷歌 Inception 網絡簡介Inception(2)

最後總結一下,如果你理解了Inception模塊,你就能理解Inception網絡,無非是很多個Inception模塊一環接一環,最後組成了網絡。

自從Inception模塊誕生以來,經過研究者們的不斷髮展,衍生了許多新的版本。所以在你們看一些比較新的Inception算法的論文時,會發現人們使用這些新版本的算法效果也一樣很好,比如Inception V2、V3以及V4,還有一個版本引入了跳躍連接的方法,有時也會有特別好的效果。

但所有的這些變體都建立在同一種基礎的思想上,在之前的筆記中你就已經學到過,就是把許多Inception模塊通過某種方式連接到一起。通過這節課,我想你應該能去閱讀和理解這些Inception的論文,甚至是一些新版本的論文。

直到現在,你已經瞭解了許多專用的神經網絡結構。在下節筆記中,我將會告訴你們如何真正去使用這些算法來構建自己的計算機視覺系統,我們下節筆記再見。


分享到:


相關文章: