接上一篇:AI:IPPR的數學表示-CNN基礎結構進化(Alex、ZF、Inception、Res、InceptionRes)。
html
抄自於各個博客,有大量修改,若有疑問,請移步各個原文.....
git
前言:AutoML-NasNetgithub
VGG結構和INception結構、ResNet基元結構的出現,驗證了經過反覆堆疊小型inception結構能夠構建大型CNN網絡,而構建過程能夠經過特定的規則自動完成。自動完成大型網絡的稀疏性構建出現了必定的人爲指導,如Mobile、xception、Shuffle、SE各個網絡,另外一方面是遠未獲得泛用性的AutoML自動搜索網絡結構。網絡
Google I/O開發者大會上,萬惡的資本主義壟斷公司全球私人信息的無恥把持者—美國谷歌,推出能自動設計機器學習模型的方法AutoML,想讓神經網絡更「平易近人」。雖然AutoML能設計出與人類設計的神經網絡同等水平的小型神經網絡,但始終被限制在CIFAR-10和Penn Treebank等小型數據集上。即便在CIFAR-10 等小型數據集上進行搜索CNN結構,仍然須要500塊TESLA顯卡的水準。架構
AutoML方法主要使用了強化學習和遷移學習。論文NAS-NeuralArchitecture Search With ReinforcementLearning的基礎作了突破性的改進,使得能讓機器在小數據集(CIFAR-10數據集)上自動設計出CNN網絡,並利用遷移學習技術使得設計的網絡可以被很好的遷移到ImageNet數據集,驗證集上達到了82.7%的預測精度,同時也能夠遷移到其餘的計算機視覺任務上(如目標檢測)。框架
至此,Google接近完成佈局整個AI的基礎設施,主推的中間件平臺(機器學習框架)TensorFlow,向上延伸到直接面對問題域的自動生成結構框架AutoML,向下延伸到Android系統,以及硬件執行處理器TPU。這樣,你只要給出問題描述和一部分數據,使用Google的服務能夠一站式完成。這就意味着,只要哪天Google不爽了或者美國不爽了,Google再也不給你服務,你將不只連空中樓閣都不是,而是海市蜃樓。
iphone
神經網絡結構自動搜索初探:
機器學習
Neural Architecture Search with Reinforcement Learning(ICLR 2017 Best Paper)。爲了增長網絡結構搜索的 scalability,Google Residency Program 的成員 Barrret Zoph 在 Quoc Le 的帶領下開始了神經網絡自動調參的嘗試,Neural Architecture Search with Reinforcement Learning 就是對這一工做的總結。該論文得到了 ICLR 2017 的 Best Paper。Barret Zoph 的工做成功在 CIFAR 和 PTB 上面搜索到了 state-of-the-art 的 CNN 和 LSTM 結構。
ide
Barret Zoph 使用強化學習進行網絡結構搜索,網絡框架圖以下圖:佈局
Controller 是由 RNN 構成可以產生每層網絡的 Kernel 大小和 skip connection 的鏈接,產生了網絡結構以後,使用網絡結構的準確率做爲 Reward function。Controller 會根據 reward function 的反饋進行網絡結構調節,最後會獲得最優的網絡結構。Controller 生成網絡結構預測以下圖:
............................
AutoML分別找到在CIFAR-10和ImageNet圖像分類、COCO物體檢測中的最佳層。這兩層結合造成一種新架構,咱們稱之爲「NASNet」。
另外一個分支
CNN的一個方向是模塊化以及結構化,進而能夠自動化生成。另一個方向則向著輕量化、稀疏化的方向發展,主力為人工設計優化網路結構。網絡結構產生各種進化,有MobileNet、ShuffleNet、deformNet等。一切都是爲告終構再稀疏。
搜狗老是無辜切換繁體字...
Bottleneck-爲下降參數而下降參數
爲下降參數而下降參數,微軟的發展了ResNet網絡,對應Google發展了Inception結構,加入1×1卷積核。
文章: ResNet之Deeper Bottle Architecture,簡稱DBA
關於ResNet,原做者闡述
Because of concerns on the training time that we can afford, we modify the building block as abottleneck design.
就是說,做者考慮到本身GPU的計算能力有限,因此才採用了bottleneck design!說到底仍是沒錢上1080唄!不過2015年的時候1080還沒出來,那他爲何不上TITAN,仍是沒錢唄!一個DBA內部的結構圖以下:
,經過對ResNet基元的疊加,產生大的整個ResNet網絡。
另外一方面,GoogleNet的團隊發現,若是僅僅引入多個尺寸的卷積核,會帶來大量的額外的參數,受到Network In Network中1×1卷積核的啓發,爲了解決這個問題,他們往Inception結構中加入了一些1×1的卷積核,如圖所示:
加入1×1卷積核的Inception結構
根據上圖,咱們來作個對比計算,假設輸入feature map的維度爲256維,要求輸出維度也是256維。有如下兩種操做:
256維的輸入直接通過一個3×3×256的卷積層,輸出一個256維的feature map,那麼參數量爲:256×3×3×256 = 589,824
256維的輸入先通過一個1×1×64的卷積層,再通過一個3×3×64的卷積層,最後通過一個1×1×256的卷積層,輸出256維,參數量爲:256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69,632。足足把第一種操做的參數量下降到九分之一!
1×1卷積核也被認爲是影響深遠的操做,日後大型的網絡爲了下降參數量都會應用上1×1卷積核。
可分離卷積結構-xception/MobileNet
DepthWise操做:卷積操做非必須同時考慮通道和區域,由此引起把通道和空間區域分開考慮的DepthWise操做。
一個2×2的卷積核在卷積時,對應圖像區域中的全部通道均被同時考慮,問題在於,爲何必定要同時考慮圖像區域和通道?下圖爲對比標準卷積核DepthWise操做。
咱們爲何不能把通道和空間區域分開考慮?
咱們首先對每個通道進行各自的卷積操做,有多少個通道就有多少個過濾器。獲得新的通道feature maps以後,這時再對這批新的通道feature maps進行標準的1×1跨通道卷積操做。這種操做被稱爲 「DepthWise convolution」 ,縮寫「DW」。
這種操做是至關有效的,在imagenet 1000類分類任務中已經超過了InceptionV3的表現,並且也同時減小了大量的參數,咱們來算一算,假設輸入通道數爲3,要求輸出通道數爲256,兩種作法:
1.直接接一個3×3×256的卷積核,參數量爲:3×3×3×256 = 6,912
2.DW操做,分兩步完成,參數量爲:3×3×3 + 3×1×1×256 = 795,又把參數量下降到九分之一 ! 所以,一個depthwise操做比標準的卷積操做下降很多的參數量,同時論文中指出這個模型獲得了更好的分類效果。
Inception假設:卷積層試圖在3D空間學習過濾器,2個空間維度( 寬和高)以及1個通道維度,所以一個卷積核須要同時繪製跨通道相關性和空間相關性。Inception模塊背後的思想就是經過將這個過程分解成一系列相互獨立的操做以使它更爲便捷有效。進一步講,典型的Inception模塊首先處理跨通道相關性,經過一組1×1卷積,將輸入數據繪製到3或4個小於原始輸入的不一樣空間,而後經過3×3或者5×5卷積將全部相關性繪製到更小的3D空間。圖示如上。實際上Inception背後基本的假設是使跨通道相關性和空間相關性的繪製有效脫鉤。
通道間的相關性和空間相關性徹底分離,文章:對Xception(一種深度可分離卷積)模型的介紹
Google如今做惡已經肆無忌憚了:如何評價google的inceptionX網絡,闡述的比較詳細
xception:一個徹底基於深度可分卷積層的卷積神經網絡結構。實際上,咱們作如此假設:卷積神經網絡的特徵圖中的跨通道相關性和空間相關性的繪製能夠徹底脫鉤。因爲這種假設是Inception結構中極端化的假設,咱們將它稱做Xception,意指極端Inception。
文章:交錯組卷積詳解 ,消除冗餘卷積核
論文:Interleaved Group Convolutions for Deep Neural Networks
研究的設計思路是來自於微軟亞洲研究院去年提出的深度融合(Deep Fusion)概念,其本質是將不一樣分支的網絡在中間層進行融合。他們在進一步研究中發現,一個標準的卷積也能夠採用相似的多分支結構,由此展開深刻研究,研究出了較爲簡單的交錯組卷積模塊,即 IGC 模塊。
每一個交錯組卷積模塊包括兩個組卷積(group convolution)過程——第一次組卷積(primary group convolution)以及第二次組卷積(secondary group convolution)。組卷積曾被用於 AlexNet 中,將模型分佈在兩個 GPU 上以解決內存處理問題。用一個 32 通道的例子來解釋一下組卷積:把 32 個輸入通道平均分爲 4 組,每組擁有 8 個通道,並分別對 4 組單獨作卷積運算。這樣的好處是參數較少能夠提高計算速度,可是同時,因爲每組卷積之間不存在交互,不一樣組的輸出通道與輸入通道並不相關。爲了讓輸入通道與每個輸入通道實現關聯,交錯組卷積過程巧妙地引入了第二次組卷積,即第二次組卷積過程當中,每組的輸入通道均來自於第一次組卷積過程不一樣的組,達到交錯互補的目的。
交錯組卷積過程
從消除卷積核冗餘的角度看,一個組卷積等價於具備稀疏核的普通卷積,而交錯組卷積,即兩次組卷積則等價於兩個稀疏核相乘的普通卷積。這兩個稀疏矩陣相乘能夠獲得兩兩相關的稠密矩陣,是一個線性的過程。在網絡模型大小及計算複雜度相同的條件下,相較於普通卷積,使用 IGC 模塊的網絡更寬,性能更優。
........................
Xception 模塊能夠看做交錯組卷積的一個特例。若是第一次組卷積過程當中,每組只有一個輸出通道,那麼就變成了特殊的組卷積,即 channel-wise convolution,第二次組卷積成爲 1X1 的卷積,這與 Xception 類似;若是第一次組卷積過程裏僅有一組,那麼這個過程就變成了普通卷積,第二次組卷積過程則至關於分配給每一個經過一個不一樣的權重。那麼問題來了,極端狀況下是否能帶來最佳結果?研究團隊也針對這個問題進行了探討,並設計了相關實驗,結果發現並非這樣。
經過實驗結果能夠發現,網絡的性能會隨着通道數及組數的變化而變化,最優性能配置點存在於兩個極端狀況之間。精確度會隨着第一次組卷積分紅的組數的增長(第二次組卷積分紅的組數的減小)而提高,達到極值後開始下降。
MobileNet的主要工做是用depthwise sparable convolutions替代過去的standard convolutions來解決卷積網絡的計算效率和參數量的問題。使用深度分離的卷積能夠極大地減小運算和內存的消耗,同時僅犧牲1%~5%的準確率損失,準確率的折損率取決於須要達到的運算節約。
在AlexNet的Group Convolution當中,特徵的通道被平均分到不一樣組裏面,最後再經過兩個全鏈接層來融合特徵,這樣一來,就只能在最後時刻才融合不一樣組之間的特徵,對模型的泛化性是至關不利的。爲了解決這個問題,ShuffleNet在每一次層疊這種Group conv層前,都進行一次channel shuffle,shuffle過的通道被分配到不一樣組當中。進行完一次group conv以後,再一次channel shuffle,而後分到下一層組卷積當中,以此循環。
來自ShuffleNet論文
通過channel shuffle以後,Group conv輸出的特徵能考慮到更多通道,輸出的特徵天然表明性就更高。另外,AlexNet的分組卷積,其實是標準卷積操做,而在ShuffleNet裏面的分組卷積操做是depthwise卷積,所以結合了通道洗牌和分組depthwise卷積的ShuffleNet,能獲得超少許的參數以及超越mobilenet、媲美AlexNet的準確率!速度能夠超過AlexNet10倍。
要注意的是,Group conv是一種channel分組的方式,Depthwise +Pointwise是卷積的方式,只是ShuffleNet裏面把二者應用起來了。所以Group conv和Depthwise +Pointwise並不能劃等號。
此文打的字比較多:從MobileNet到ShuffleNet-CNN網絡優化學習總結 ,長文也算比較有條理性,建議花半個小時讀一下這個翻譯。
........................
論文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
分析一下 Xception 與 ResNeXt 的問題。先說效率,Xception 和 ResNeXt 所引入的 depthwise separable convolution 和 group convolution 雖然能協調模型的能力與計算量,但被發現它們的 pointwise convolution 佔據着很大的計算量。所以ShuffleNet考慮引入 pointwise group convolution 來解決這個問題,後文有例子能看出這點。再說準確率,前面也提到過 ResNeXt 的 C 參數是有極限的,也就是說給 ResNeXt 調參是沒有前途的,僅有的參數還有極限。並且 group convolution 用 groups 數來協調模型效果與計算量,這自己就是一對技術矛盾。TRIZ理論告訴咱們遇到技術矛盾,必定要打消協調的念頭,並深刻挖掘矛盾本質,尋找機會消除矛盾。
我認爲 ShuffleNet 解決這兩個問題的思路是,先引入 pointwise group convolution 解決效率問題,再想辦法把它所帶來的次級問題與原來的效果問題合在一塊兒解決,緣由是次級問題也是group的調整。實際上,引入 pointwise group convolution 能夠認爲利用 TRIZ 的 STC 算子或提早作原則,這跟 Xception 把 groups 分到最小變成 depthwise 的極限思路也像。既然 ResNeXt 在瓶頸模塊中間採用了 splitting 策略,爲什麼就不在輸入就採用這種策略呢?這樣不網絡總體就分離了麼?然而,這個分組數 g 跟 Cardinality 同樣影響着模型的能力,由此 pointwise group convolution 帶來了次級問題。而這個問題的本質是什麼呢?對比分組卷積和常規卷積的運算規則,咱們可以發現根本矛盾多是分組卷積沒有 Channel Correlation,那麼須要解決的矛盾就變成如何讓分組卷積也有 Channel Correlation。Face++ 用 Channel Shuffle 來解決這個問題。
如上圖(b)所示,Input 分紅 3 組並分別作了對應的變換( 3x3 GConv1),而後在下一次變換(3x3 GConv2)以前作了一次分組間的 Channel Shuffle。如此一來,每一個分組就含有了 其它分組的局部 Channel Correlation 了。若是 Channel Shuffle 次數足夠多,我覺着就能夠認爲這徹底等效於常規卷積運算了。這是一個不錯的創新點,只是效率看起來並不那麼完美,緣由是 Channels Shuffle 操做會致使內存不連續這個影響有待評估。另外,即便兩個分組的大小不同,Channel Shuffle 仍然是能夠作的。ShuffleNet 以 Channel Shuffle 爲基礎構造出 ShuffleNet Unit,最後咱們看一下這個 ShuffleNet Unit。
關於計算和推導仍是看原文吧:從MobileNet到ShuffleNet-CNN網絡優化學習總結
ShuffleNet,經過引入 Channel Shuffle 解決分組卷積的 Channel Correlation 問題,並充分驗證它的有效性,同時具有理論創新與實用性。理論上,用了一種輕量級的方法解決了 AlexNet 原有的分組並行信息交互問題。並且這個網絡的效率很高,適合嵌入式產品。美中不足的是,Channel Shuffle 看起來對現有 CPU 不大友好,畢竟破壞了數據存儲的連續性,使得 SIMD(單指令多數據流) 的發揮不是特別理想,估計在實現上須要再下點功夫。
通道之間特徵稀疏性——SENet
不管是在Inception、DenseNet或者ShuffleNet裏面,咱們對全部通道產生的特徵都是不分權重直接結合的,那爲何要認爲全部通道的特徵對模型的做用就是相等的呢? 這是一個好問題,因而,ImageNet2017 冠軍SEnet就出來了。
SEnet 結構 : 一組特徵在上一層被輸出,這時候分兩條路線,第一條直接經過,第二條首先進行Squeeze操做(Global Average Pooling),把每一個通道2維的特徵壓縮成一個1維,從而獲得一個特徵通道向量(每一個數字表明對應通道的特徵)。而後進行Excitation操做,把這一列特徵通道向量輸入兩個全鏈接層和sigmoid,建模出特徵通道間的相關性,獲得的輸出其實就是每一個通道對應的權重,把這些權重經過Scale乘法通道加權到原來的特徵上(第一條路),這樣就完成了特徵通道的權重分配。做者詳細解釋能夠看這篇文章:專欄 | Momenta詳解ImageNet 2017奪冠架構SENet.
中國人寫的,就沒必要要裝13看英文了......
論文下載連接:https://arxiv.org/pdf/1709.01507.pdf
Pretrained模型和相關代碼可訪問github獲取: https://github.com/hujie-frank/SENet
固定卷積核增長感覺野-dilated conv孔洞卷積
參考:MIT SceneParsing 與dilated conv網絡;如何理解擴展卷積網絡?下一段摘抄於此文
論文:Multi-scale context aggregation by dilated convolutions
誕生背景,在圖像分割領域,圖像輸入到CNN(典型的網絡好比FCN[3])中,FCN先像傳統的CNN那樣對圖像作卷積再pooling,下降圖像尺寸的同時增大感覺野,可是因爲圖像分割預測是pixel-wise的輸出,因此要將pooling後較小的圖像尺寸upsampling到原始的圖像尺寸進行預測(upsampling通常採用deconv反捲積操做,deconv可參見知乎答案如何理解深度學習中的deconvolution networks?),以前的pooling操做使得每一個pixel預測都能看到較大感覺野信息。所以圖像分割FCN中有兩個關鍵,一個是pooling減少圖像尺寸增大感覺野,另外一個是upsampling擴大圖像尺寸。在先減少再增大尺寸的過程當中,確定有一些信息損失掉了,那麼能不能設計一種新的操做,不經過pooling也能有較大的感覺野看到更多的信息呢?答案就是dilated conv。
標準的3×3卷積核只能看到對應區域3×3的大小,可是爲了能讓卷積核看到更大的範圍,dilated conv使其成爲了可能。dilated conv原論文中的結構如圖所示:
上圖b能夠理解爲卷積核大小依然是3×3,可是每一個卷積點之間有1個空洞,也就是在綠色7×7區域裏面,只有9個紅色點位置做了卷積處理,其他點權重爲0。這樣即便卷積核大小不變,但它看到的區域變得更大了。
dilated的好處是不作pooling損失信息的狀況下,加大了感覺野,讓每一個卷積輸出都包含較大範圍的信息。在圖像須要全局信息或者語音文本須要較長的sequence信息依賴的問題中,都能很好的應用dilated conv,好比圖像分割[3]、語音合成WaveNet[2]、機器翻譯ByteNet[1]中。
消除邊緣冗餘-變形卷積核
一樣的物體在圖像中可能呈現出不一樣的大小、姿態、視角變化甚至非剛體形變,如何適應這些複雜的幾何形變是物體識別的主要難點,也是計算機視覺領域多年來關注的核心問題。
微軟亞洲研究院視覺計算組的研究員在arXiv上公佈了一篇題爲「Deformable Convolutional Networks」(可變形卷積網絡)的論文,首次在卷積神經網絡(convolutional neutral networks,CNN)中引入了學習空間幾何形變的能力,獲得可變形卷積網絡(deformable convolutional networks),從而更好地解決了具備空間形變的圖像識別任務。研究員們經過大量的實驗結果驗證了該方法在複雜的計算機視覺任務(如目標檢測和語義分割)上的有效性,首次代表在深度卷積神經網絡(deep CNN)中學習空間上密集的幾何形變是可行的。
微軟亞洲研究院的研究員們發現,標準卷積中的規則格點採樣是致使網絡難以適應幾何形變的「罪魁禍首」。爲了削弱這個限制,研究員們對卷積核中每一個採樣點的位置都增長了一個偏移的變量。經過這些變量,卷積核就能夠在當前位置附近隨意的採樣,而再也不侷限於以前的規則格點。這樣擴展後的卷積操做被稱爲可變形卷積(deformable convolution)。標準卷積和可變形卷積在圖1中有簡要的展現。
可變形卷積單元中增長的偏移量是網絡結構的一部分,經過另一個平行的標準卷積單元計算獲得,進而也能夠經過梯度反向傳播進行端到端的學習。加上該偏移量的學習以後,可變形卷積核的大小和位置能夠根據當前須要識別的圖像內容進行動態調整,其直觀效果就是不一樣位置的卷積核採樣點位置會根據圖像內容發生自適應的變化,從而適應不一樣物體的形狀、大小等幾何形變,如圖二、3中所展現。
總結:要作到可變性操做,能夠直接在原來的過濾器前面再加一層過濾器,這層過濾器學習的是下一層卷積核的位置偏移量(offset),這樣只是增長了一層過濾器,或者直接把原網絡中的某一層過濾器當成學習offset的過濾器,這樣實際增長的計算量是至關少的,但能實現可變形卷積核,識別特徵的效果更好。
CNN結構的新發展
一個相似於窮舉的大CNN結構到了貌似接近遍歷整個圖像狀態空間的程度,迭代更新的過程當中附帶着CNN結構的稀疏性構建。同時也表明瞭解決通常問題的通路,逐步劃分子空間,從概括到遍歷的通常套路。
卷積核方面:大卷積核用多層多個個小卷積核代替;單一尺寸卷積核用多尺寸卷積核代替;固定形狀卷積核趨於使用可變形卷積核;使用1×1卷積核(bottleneck結構)。
卷積層通道方面:標準卷積用depthwise卷積代替;使用分組卷積;分組卷積前使用channel shuffle;通道加權計算。
卷積層鏈接方面:使用skip connection,讓模型更深,集成爲機率模型;densely connection,使每一層都融合上其它層的特徵輸出(DenseNet),這種方法不必定穩當......
其餘啓發:類比到通道加權操做,卷積層跨層鏈接可否也進行加權處理?bottleneck + Group conv + channel shuffle + depthwise的結合會不會成爲之後下降參數量的標準配置?