0
本文作者: AI研習(xí)社-譯站 | 2018-08-22 14:28 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 History of Convolutional Blocks in simple Code,作者為 Paul-Louis Pr?ve。
翻譯 | 孟凡 校對(duì) | Lamaric 審核 | Lamaric
我會(huì)努力定期去閱讀機(jī)器學(xué)習(xí)和人工智能相關(guān)的論文。這也是能夠持續(xù)跟進(jìn)最新進(jìn)展的唯一途徑。作為一名計(jì)算機(jī)科學(xué)家,我經(jīng)常在翻閱科學(xué)描述文本或者公式的數(shù)學(xué)符號(hào)時(shí)碰壁。我發(fā)現(xiàn)在普通代碼中理解它要容易的多。因此在本文中,我想引導(dǎo)你通過(guò)
Keras 實(shí)現(xiàn)精選的最新架構(gòu)的重要卷積塊。
當(dāng)你在 GitHub 上查閱受歡迎的架構(gòu)實(shí)現(xiàn)的時(shí)候,你一定會(huì)驚訝于他們?cè)趺磿?huì)包含這么多代碼。這是一個(gè)很好的包含足夠數(shù)量的注釋并且使用額外參數(shù)來(lái)增強(qiáng)模型的實(shí)踐,但是與此同時(shí)這會(huì)分散架構(gòu)本質(zhì)的注意力。為了更加簡(jiǎn)化和縮短代碼,我將使用一些別名函數(shù):
我發(fā)現(xiàn)當(dāng)刪除模版代碼時(shí)更具有可讀性。當(dāng)然,這只有在您理解我的首字母縮寫(xiě)后才有效,讓我們開(kāi)始吧!
瓶頸塊
卷積層的參數(shù)數(shù)量取決于卷積核大小、輸入濾波器和輸出濾波器的的數(shù)量。你的網(wǎng)絡(luò)越寬,3x3 卷積就會(huì)付出更大的代價(jià)。
瓶頸塊背后的思想是通過(guò)一個(gè)確定的比率 r 采用代價(jià)小的 1x1 卷積來(lái)減少通道數(shù),以便隨后的 3x3 卷積具有更少的參數(shù)。最后,我們?cè)谠偈褂靡粋€(gè) 1x1 的卷積拓寬網(wǎng)絡(luò)。
Inception 模塊
Inception 模塊引入了并行使用不同操作并且合并結(jié)果的思想。因此網(wǎng)絡(luò)可以學(xué)習(xí)不同類(lèi)型的濾波器。
這里我們使用卷積核大小為 1、3 和 5 的卷積層和 MaxPooling 層進(jìn)行合并。這段代碼展示了inception模塊的原始實(shí)現(xiàn)。實(shí)際的實(shí)現(xiàn)是將它與上述瓶頸的思想結(jié)合起來(lái),這使得它稍微復(fù)雜了一些。
Residual 塊
ResNet 是一個(gè)被來(lái)自微軟的研究者推出的架構(gòu),它允許神經(jīng)網(wǎng)絡(luò)擁有他們希望得到的層數(shù),同時(shí)仍能夠提高模型的準(zhǔn)確度。到現(xiàn)在你或許已經(jīng)習(xí)慣它了了,但是在ResNet 之前情況并非如此。
這個(gè)想法是將初始的激活添加到卷積塊的輸出。因此網(wǎng)絡(luò)可以通過(guò)學(xué)習(xí)過(guò)程決定用于輸出的新卷積的數(shù)量。做的注意的是Inception模塊串聯(lián)輸出,而Residual模塊是求和。
ResNeXt 塊
基于它的名字你就能夠猜到ResNeXt與ResNet的密切聯(lián)系。作者將基數(shù)一詞云如到另一個(gè)維度,比如寬度(通道數(shù))和深度(層數(shù))。
基數(shù)(cardinality)是指出現(xiàn)在模塊中的平行路徑數(shù)。這聽(tīng)起來(lái)像inception塊并行發(fā)生的四個(gè)操作。然而,并非并行使用不同類(lèi)型的操作,基數(shù)為4時(shí)是簡(jiǎn)單的使用相同操作四次。
如果它們做的是同樣的事情為什么還要把他們并列?好問(wèn)題。這個(gè)概念也被稱(chēng)作分組卷積而且可以追溯到原始的AlexNet論文。雖然,當(dāng)時(shí)它主要被用做分解訓(xùn)練過(guò)程到多個(gè)GPU,而ResNeXt則用他們來(lái)增加參數(shù)的利用效率。
這個(gè)想法是將所有的輸入通道分成幾個(gè)組。卷積只會(huì)在它們專(zhuān)屬的通道組中進(jìn)行而不會(huì)影響到所有通道組。發(fā)型每個(gè)組將會(huì)學(xué)到不同類(lèi)型的特征,同時(shí)提高了權(quán)重的效率。
想象一個(gè)瓶頸塊,首先使用一個(gè)為4的壓縮率將256個(gè)輸入通道減少到64個(gè),然后將它們恢復(fù)到256個(gè)通道作為輸出。如果我們想引入基數(shù)32和壓縮率2,我們將使用32個(gè)平行的1x1的卷積層,其每個(gè)的輸出通道為4(256/(32*2))個(gè)。之后我們使用32個(gè)擁有4個(gè)輸出通道的3x3的卷積層,緊接著是32個(gè)1x1層,每個(gè)層有256個(gè)輸出通道。最后一步包含將32個(gè)平行路徑相加,使得在加上初始輸入作為一個(gè)殘差連接之前為我們提供單個(gè)輸出。
左側(cè):ResNet塊 右側(cè):參數(shù)復(fù)雜度大致相同的ResNeXt塊
這里有很多東西需要消化。利用上圖可以直觀(guān)了解其如何起作用的,也可以直接復(fù)制這些代碼,以便自己用Keras構(gòu)建一個(gè)小型網(wǎng)絡(luò)。我的復(fù)雜描述可以用這9行簡(jiǎn)單的代碼總結(jié)出來(lái),難道不是很棒嗎?
順便提一下,如果基數(shù)與通道的數(shù)量相同我們會(huì)得到一個(gè)稱(chēng)為深度可分離卷積的東西。自從引入了Xception架構(gòu)以來(lái),得到了廣泛的使用。
Dense 塊
一個(gè)dense塊是一個(gè)residual塊的極端版本,其中每個(gè)卷積層都會(huì)這個(gè)塊中之前所有卷積層的輸出。首先,我們將輸入激活到列表中,之后我們進(jìn)入一個(gè)循環(huán),循環(huán)遍歷塊的深度。以便后續(xù)的迭代的到越來(lái)越多的輸入特征映射。這個(gè)方案會(huì)持續(xù)進(jìn)行直到達(dá)到所需要的深度為止。
雖然的到一個(gè)能夠像DenseNet一樣的出色的架構(gòu)需要花費(fèi)數(shù)月的研究,但實(shí)際的構(gòu)建模塊就是這么簡(jiǎn)單,令人著迷。
Squeeze-and-Excitation 塊
SENet在短時(shí)間內(nèi)是ImageNet的很杰出的架構(gòu)。它建立在ResNext之上,而且專(zhuān)注于對(duì)網(wǎng)絡(luò)逐個(gè)通道的信息進(jìn)行建模。在常規(guī)的卷積層中每個(gè)通道對(duì)于點(diǎn)積運(yùn)算中的加法操作有著相同的權(quán)重。
Squeeze- and-Excitation塊
SENet引入了一個(gè)非常簡(jiǎn)單的模塊,它能夠加入任何已經(jīng)存在的架構(gòu)。它創(chuàng)造了一個(gè)小的神經(jīng)網(wǎng)絡(luò),能夠根據(jù)輸入學(xué)習(xí)每個(gè)濾波器的權(quán)重。你可以看到它本身并不是卷積塊,但是因?yàn)樗軌蛱砑拥饺魏尉矸e塊中而且能夠提高性能,所以我想要將它添加到混合架構(gòu)中。
每個(gè)通道被壓縮成一個(gè)單值并饋入兩層神經(jīng)網(wǎng)絡(luò)。根據(jù)分布的通道,這個(gè)網(wǎng)絡(luò)會(huì)基于重要性加權(quán)這些通道,最后這些權(quán)重會(huì)與卷積激活相乘。
SENet引入了一個(gè)很小的計(jì)算開(kāi)銷(xiāo),但是卻可能改進(jìn)任何卷機(jī)模型。在我看來(lái),這個(gè)塊并沒(méi)有得到應(yīng)有的重視。
NASNet 標(biāo)準(zhǔn)單元
這就是事情開(kāi)始變得丑陋的地方。我們正在離開(kāi)人們的空間,提出簡(jiǎn)單而有效的設(shè)計(jì)決策并且進(jìn)去一個(gè)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)架構(gòu)的算法世界。NASNet在設(shè)計(jì)方面令人難以置信,但是他的實(shí)際架構(gòu)卻相對(duì)復(fù)雜。我們知道,在他ImageNet的表現(xiàn)是相當(dāng)?shù)暮谩?/p>
通過(guò)手工,作者定義了不同類(lèi)型的卷積和池化層的搜索空間,每個(gè)層都有不同的可能性設(shè)置。他還定義了這些層如何平行排列,排列順序以及怎樣加或者串聯(lián)這些層。一定這樣定義,他們就建立了一個(gè)基于遞歸神經(jīng)網(wǎng)絡(luò)的強(qiáng)化學(xué)習(xí)(RL)算法,如果特定的方案設(shè)計(jì)在CIFAR-10數(shù)據(jù)集上表現(xiàn)的良好,那么就會(huì)得到獎(jiǎng)勵(lì)。
由此產(chǎn)生的架構(gòu)不僅再在CIFAR-10上表現(xiàn)良好,它也在ImageNet得到了杰出的結(jié)果。NASNet由標(biāo)準(zhǔn)單元和還原單元組成,它們彼此重復(fù)。
這是你如何在Keras中使用標(biāo)準(zhǔn)單元的代碼。除了層的組合和設(shè)置非常好用之外沒(méi)有什么新的東西。
倒置殘差塊
......
想要繼續(xù)閱讀,請(qǐng)移步至我們的AI研習(xí)社社區(qū):https://club.leiphone.com/page/TextTranslation/614
更多精彩內(nèi)容盡在 AI 研習(xí)社。雷鋒網(wǎng)雷鋒網(wǎng)
不同領(lǐng)域包括計(jì)算機(jī)視覺(jué),語(yǔ)音語(yǔ)義,區(qū)塊鏈,自動(dòng)駕駛,數(shù)據(jù)挖掘,智能控制,編程語(yǔ)言等每日更新。
雷鋒網(wǎng)雷鋒
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。