Inception 網(wǎng)絡(luò)(Inception network)
在上節(jié)筆記中,你已經(jīng)見到了所有的Inception網(wǎng)絡(luò)基礎(chǔ)模塊。在本節(jié)筆記中,我們將學(xué)習(xí)如何將這些模塊組合起來(lái),構(gòu)筑你自己的Inception網(wǎng)絡(luò)。
Inception模塊會(huì)將之前層的激活或者輸出作為它的輸入,作為前提,這是一個(gè)28×28×192的輸入,和我們之前筆記中的一樣。
我們?cè)敿?xì)分析過(guò)的例子是,先通過(guò)一個(gè)1×1的層,再通過(guò)一個(gè)5×5的層,1×1的層可能有16個(gè)通道,而5×5的層輸出為28×28×32,共32個(gè)通道,這就是上個(gè)筆記最后講到的我們處理的例子。
為了在這個(gè)3×3的卷積層中節(jié)省運(yùn)算量,你也可以做相同的操作,這樣的話3×3的層將會(huì)輸出28×28×128。
或許你還想將其直接通過(guò)一個(gè)1×1的卷積層,這時(shí)就不必在后面再跟一個(gè)1×1的層了,這樣的話過(guò)程就只有一步,假設(shè)這個(gè)層的輸出是28×28×64。
最后是池化層。
這里我們要做些有趣的事情,為了能在最后將這些輸出都連接起來(lái),我們會(huì)使用same類型的padding來(lái)池化,使得輸出的高和寬依然是28×28,這樣才能將它與其他輸出連接起來(lái)。但注意,如果你進(jìn)行了最大池化,即便用了same padding,3×3的過(guò)濾器,stride為1,其輸出將會(huì)是28×28×192,其通道數(shù)或者說(shuō)深度與這里的輸入(通道數(shù))相同。
所以看起來(lái)它會(huì)有很多通道,我們實(shí)際要做的就是再加上一個(gè)1×1的卷積層,去進(jìn)行我們?cè)?×1卷積層的筆記里所介紹的操作,將通道的數(shù)量縮小,縮小到28×28×32。也就是使用32個(gè)維度為1×1×192的過(guò)濾器,所以輸出的維度其通道數(shù)縮小為32。這樣就避免了最后輸出時(shí),池化層占據(jù)所有的通道。
最后,將這些方塊全都連接起來(lái)。在這過(guò)程中,把得到的各個(gè)層的通道都加起來(lái),最后得到一個(gè)28×28×256的輸出。通道連接實(shí)際就是之前筆記中看到過(guò)的,把所有方塊連接在一起的操作。這就是一個(gè)Inception模塊,而Inception網(wǎng)絡(luò)所做的就是將這些模塊都組合到一起。
這是一張取自Szegety et al的論文中關(guān)于Inception網(wǎng)絡(luò)的圖片,你會(huì)發(fā)現(xiàn)圖中有許多重復(fù)的模塊,可能整張圖看上去很復(fù)雜,但如果你只截取其中一個(gè)環(huán)節(jié)(編號(hào)1),就會(huì)發(fā)現(xiàn)這是在前一圖中所見的Inception模塊。
我們深入看看里邊的一些細(xì)節(jié),這是另一個(gè)Inception模塊(編號(hào)2),這也是一個(gè)Inception模塊(編號(hào)3)。3之后這里有一些額外的最大池化層(編號(hào)6)來(lái)修改高和寬的維度。這是另外一個(gè)Inception模塊(編號(hào)4),這是另外一個(gè)最大池化層(編號(hào)7),它改變了高和寬。而這里又是另一個(gè)Inception模塊(編號(hào)5)。
所以Inception網(wǎng)絡(luò)只是很多這些你學(xué)過(guò)的模塊在不同的位置重復(fù)組成的網(wǎng)絡(luò),所以如果你理解了之前所學(xué)的Inception模塊,你就也能理解Inception網(wǎng)絡(luò)。
事實(shí)上,如果你讀過(guò)論文的原文,你就會(huì)發(fā)現(xiàn),這里其實(shí)還有一些分支,我現(xiàn)在把它們加上去。所以這些分支有什么用呢?在網(wǎng)絡(luò)的最后幾層,通常稱為全連接層,在它之后是一個(gè)softmax層(編號(hào)1)來(lái)做出預(yù)測(cè),這些分支(編號(hào)2)所做的就是通過(guò)隱藏層(編號(hào)3)來(lái)做出預(yù)測(cè),所以這其實(shí)是一個(gè)softmax輸出(編號(hào)2),這(編號(hào)1)也是。這是另一條分支(編號(hào)4),它也包含了一個(gè)隱藏層,通過(guò)一些全連接層,然后有一個(gè)softmax來(lái)預(yù)測(cè),輸出結(jié)果的標(biāo)簽。
你應(yīng)該把它看做Inception網(wǎng)絡(luò)的一個(gè)細(xì)節(jié),它確保了即便是隱藏單元和中間層(編號(hào)5)也參與了特征計(jì)算,它們也能預(yù)測(cè)圖片的分類。它在Inception網(wǎng)絡(luò)中,起到一種調(diào)整的效果,并且能防止網(wǎng)絡(luò)發(fā)生過(guò)擬合。
還有這個(gè)特別的Inception網(wǎng)絡(luò)是由Google公司的作者所研發(fā)的,它被叫做GoogleLeNet,這個(gè)名字是為了向LeNet網(wǎng)絡(luò)致敬。
在之前的筆記中你應(yīng)該了解了LeNet網(wǎng)絡(luò)。我覺得這樣非常好,因?yàn)樯疃葘W(xué)習(xí)研究人員是如此重視協(xié)作,深度學(xué)習(xí)工作者對(duì)彼此的工作成果有一種強(qiáng)烈的敬意。
最后,有個(gè)有趣的事實(shí),Inception網(wǎng)絡(luò)這個(gè)名字又是緣何而來(lái)呢?
Inception的論文特地提到了這個(gè)模因(meme,網(wǎng)絡(luò)用語(yǔ)即“梗”),就是“我們需要走的更深”(We need to go deeper),論文還引用了這個(gè)網(wǎng)址(http://knowyourmeme.com/memes/we-need-to-go-deeper),連接到這幅圖片上,如果你看過(guò)Inception(盜夢(mèng)空間)這個(gè)電影,你應(yīng)該能看懂這個(gè)由來(lái)。作者其實(shí)是通過(guò)它來(lái)表明了建立更深的神經(jīng)網(wǎng)絡(luò)的決心,他們正是這樣構(gòu)建了Inception。我想一般研究論文,通常不會(huì)引用網(wǎng)絡(luò)流行模因(梗),但這里顯然很合適。
最后總結(jié)一下,如果你理解了Inception模塊,你就能理解Inception網(wǎng)絡(luò),無(wú)非是很多個(gè)Inception模塊一環(huán)接一環(huán),最后組成了網(wǎng)絡(luò)。
自從Inception模塊誕生以來(lái),經(jīng)過(guò)研究者們的不斷發(fā)展,衍生了許多新的版本。所以在你們看一些比較新的Inception算法的論文時(shí),會(huì)發(fā)現(xiàn)人們使用這些新版本的算法效果也一樣很好,比如Inception V2、V3以及V4,還有一個(gè)版本引入了跳躍連接的方法,有時(shí)也會(huì)有特別好的效果。
但所有的這些變體都建立在同一種基礎(chǔ)的思想上,在之前的筆記中你就已經(jīng)學(xué)到過(guò),就是把許多Inception模塊通過(guò)某種方式連接到一起。通過(guò)這節(jié)課,我想你應(yīng)該能去閱讀和理解這些Inception的論文,甚至是一些新版本的論文。
直到現(xiàn)在,你已經(jīng)了解了許多專用的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。在下節(jié)筆記中,我將會(huì)告訴你們?nèi)绾握嬲ナ褂眠@些算法來(lái)構(gòu)建自己的計(jì)算機(jī)視覺系統(tǒng),我們下節(jié)筆記再見。