簡化理解:Keras中最新體系結構的卷積塊列表

點擊上方關注,All in AI中國

我一直保持著定期閱讀ML和AI相關論文的習慣,這是瞭解這一領域最新進展的唯一方法。作為一名計算機科學家,但每當瀏覽科學著論或數學公式時,我經常會碰壁。在不斷的嘗試中,我發現簡單代碼可以降低理解上的難度。因此,在本文中,我希望幫助你瞭解Keras中最新體系結構的卷積塊列表。

簡化理解:Keras中最新體系結構的卷積塊列表

當你在GitHub上查找最新流行的體系架構時,你會驚訝它們包含了很多代碼。因為它包括著很多的註釋,並使用額外的參數增強模型。但同時,這可能會分散我們對體系結構本質掌握的注意力。為了進一步簡化和縮短代碼片段,作者將使用一些alias()函數:

簡化理解:Keras中最新體系結構的卷積塊列表

簡化理解:Keras中最新體系結構的卷積塊列表

作者發現當去掉模板碼時,代碼的可讀性要高得多。當然,前提是你得理解了這些代碼的縮略語才行。我們開始吧。

Bottleneck塊

卷積層的參數數目取決於核大小、輸入濾波器的數目和輸出濾波器的數目。你的網絡越寬,3x3卷積成本越高

簡化理解:Keras中最新體系結構的卷積塊列表

bottleneck塊的核心思想是確保速率r使用更加便宜的1x1卷積以減少信道數,從而使下面的3x3卷積具有更少的參數。最後我們用另一個1x1卷積來擴展網絡。

Inception Module

Inception Module介紹了在並行和合並結果中使用不同運算的想法。這樣,網絡就可以學習不同類型的濾波器。

簡化理解:Keras中最新體系結構的卷積塊列表

在這裡,我們使用核大小為1、3和5的與MaxPooling層合併卷積層。這個片段是對Inception Module的簡單應用。現實中,我們更多的是將它bottleneck塊結合起來,進行更加複雜的應用。

簡化理解:Keras中最新體系結構的卷積塊列表

簡化理解:Keras中最新體系結構的卷積塊列表

殘差塊(residual block)

簡化理解:Keras中最新體系結構的卷積塊列表

ResNet是由微軟研究人員引入的一種架構,該架構不僅允許神經網絡擁有很多層,還能提高模型的準確性。現在你可能已經習慣了ResNet的存在,但在ResNet出現之前,情況就不一樣了。

簡化理解:Keras中最新體系結構的卷積塊列表

其思想是將初始激活添加到卷積塊的輸出中。這樣,網絡就可以通過學習過程來決定輸出中有多少新的卷積。注意,inception module連接輸出,而殘差塊添加輸出。

ResNeXt Block

根據它的名字,你可以猜到ResNeXt和ResNet是密切相關的。作者將"cardinality(基數)"這個術語引入到卷積塊中,作為另一個維度,比如指寬度(信道數)和深度(層數)。

基數指的是出現在一個塊中的並行路徑數。這聽起來類似於inception block,它同時包含4種運算。然而,與並行地使用不同類型的運算不同,基數為4表示同一運算運行4次。

如果它們做同樣的事情,為什麼要讓它們並行呢?這就要聯繫到分組卷積這個概念。它的提出最早可以追溯到AlexNet的論文。儘管當時,它主要用於將訓練過程拆分放入多個GPU中,而ResNeXt則使用它們來提高參數的效率。

簡化理解:Keras中最新體系結構的卷積塊列表

這樣做的目的是把所有的輸入信道分成幾個組。卷積只會在固定的信道中起作用,而不是"跨越"所有信道。研究發現,在提高權重效率的同時,每一組都會學習不同類型的特徵。

假設有一個bottleneck block,首先使用速率4將256個輸入信道減少到64個,然後將它們恢復到256個信道作為輸出。如果我們想引入一個32的基數和一個2的壓縮,我們將使用32個1x1的卷積層並與4個(256 /(32*2))輸出信道並行。然後我們使用32個3x3的卷積層,4個輸出信道,然後是32個1x1的卷積層,每個層有256個輸出信道。最後一步是添加32條並行路徑,在添加初始輸入以創建殘差連接之前,給出單個輸出。

簡化理解:Keras中最新體系結構的卷積塊列表

這有很多東西需要消化。通過上面的圖像步驟使正在發生的事情以可視化的形式表示出來,或者複製這些代碼片段,在Keras中自己構建一個小的網絡。把作者這種複雜的描述概括在這9行簡單的代碼中,這不是很棒嗎?

順便說一下,如果基數等於信道數,我們會得到深度可分離卷積。自引入Xception體系結構以來,它們得到了越來越多人的關注。

稠密塊

簡化理解:Keras中最新體系結構的卷積塊列表

稠密塊是殘差塊的一個極端"版本",每個卷積層都得到塊中所有先前卷積層的輸出。首先,我們將輸入激活添加到一個列表中,然後開始循環,這個循環需要深入到卷積塊中。每個卷積輸出也被連接到列表中,以便隨著迭代得到越來越多的輸入特性映射。該方案一直持續到達到預期的深度為止。

簡化理解:Keras中最新體系結構的卷積塊列表

雖然要花幾個月的研究才能找到一個和DenseNet一樣的體系架構,但是實際構建中如此簡單的確令人欣喜。

Squeeze-and-Excitation塊

在短時間內,Senet一直是ImageNet上最先進的技術。它建立在ResNext之上,並專注於對網絡的信道信息進行建模。在常規的卷積層中,每個信道在點積運算中對加法操作的權重相同。

簡化理解:Keras中最新體系結構的卷積塊列表

SENet介紹了一個非常簡單的模塊,可以添加到任何現有的體系結構中。它創建了一個小的神經網絡,它瞭解了每個濾波器應該如何根據輸入來加權。正如你所看到的,它本身並不是一個卷積塊,但是因為它可以被添加到任何卷積塊中,並可能提高它的性能,所以我們想把它添加到卷積塊中。

簡化理解:Keras中最新體系結構的卷積塊列表

每個信道被壓縮成一個單獨的值,並輸入到一個雙層神經網絡中。根據信道的分佈情況,神經網絡會對信道的重要性進行衡量。最後,權重將與卷積激活相乘。

SENets引入了一個微小的計算開銷,同時改進了卷積模型。在作者看來,它值得更多人的關注。

NASNet Normal Cell

我們給人們留下了一個簡單而有效的設計決策的空間,並進入了一個設計神經網絡體系結構的世界。Nasnet給人是一種簡單的感覺,但實際的架構是相對複雜的。我們所知道的是,它在ImageNet上運行得非常好。

簡化理解:Keras中最新體系結構的卷積塊列表

作者著手定義了不同類型的卷積層和池化層的搜索空間,每個層可能設置都各不相同。同時還定義瞭如何以並行的或依次的方式排列這些層,以及如何添加或連接這些層。一旦定義好了,他們就建立了一個基於遞歸神經網絡的強化學習算法(RL),如果某一個特定的設計方案在CIFAR-10數據集上表現良好,該算法就會得到"獎勵"。

由此產生的體系架構不僅在CIFAR-10上表現良好,而且在ImageNet上也取得了最先進的結果。NASNet由Normal Cell和 Reduction Cell 組成,它們相互重複。

簡化理解:Keras中最新體系結構的卷積塊列表

簡化理解:Keras中最新體系結構的卷積塊列表

這就是如何在Keras中實現Normal Cell。除了層和設置的完美結合之外,沒有什麼新東西。

反向殘差塊

到目前為止,你已經聽說過bottleneck block和可分離卷積。讓我們把它們放在一起。如果你運行一些測試,你將注意到,由於可分離卷積已經減少了參數的數量,壓縮它們可能會損害性能,而不是增加性能。

簡化理解:Keras中最新體系結構的卷積塊列表

作者提出了與bottleneck residual block相反的想法。它們使用廉價的1x1卷積來增加信道數,因為下面的可分離卷積層已經大大減少了參數的數量。在將其添加到初始激活之前,它會關閉信道。

簡化理解:Keras中最新體系結構的卷積塊列表

這個難題的最後一部分是可分離卷積後面沒有激活函數。相反,它直接添加到輸入中。這個塊在放入架構時非常有效。

AmoebaNet Normal Cell

簡化理解:Keras中最新體系結構的卷積塊列表

通過AmoebaNet,我們就可以瞭解到ImageNet上的最新技術,可能還有圖像識別技術。和Nasnet一樣,它是由一種算法設計的,使用的搜索空間和以前一樣。唯一的問題是,他們把強化學習算法換成了遺傳算法。深入瞭解這一工作原理的細節超出了本文的範圍。最後,作者找到了一個比NASNet更好的解決方案,而且計算成本更低。它在ImageNet上的準確率達到了97.87%,這在單個架構中還是第一次。

結論

作者希望這篇文章能讓你對重要的卷積塊有一個深刻的理解,並且實現它們可能比你想象的要容易。要更詳細地瞭解這些架構,請查看各自的論文。你會注意到,一旦你掌握了論文的核心理念,就會更容易理解其餘部分。還請注意,現實中通常會將BatchNormalization添加到mix 中,並且在應用激活函數的位置方面會有所不同。

作者:Paul-Louis Pröve

簡化理解:Keras中最新體系結構的卷積塊列表

編譯出品


分享到:


相關文章: