【AI不惑境】网络宽度对模型性能有什么影响?
大家好,這是專欄《AI不惑境》的第三篇文章,講述模型寬度與模型性能的關系。
進入到不惑境界,就是向高手邁進的開始了,在這個境界需要自己獨立思考。如果說學習是一個從模仿,到追隨,到創造的過程,那么到這個階段,應該躍過了模仿和追隨的階段,進入了創造的階段。從這個境界開始,講述的問題可能不再有答案,更多的是激發大家一起來思考。
作者&編輯 | 言有三
上一期咱們說到深度學習模型之所以在各種任務中取得了成功,足夠的網絡深度起到了很關鍵的作用。
在一定的程度上,網絡越深,性能越好。這一次我們來考慮另一個維度,寬度,即通道(channel)的數量。注意我們這里說的和寬度學習一類的模型沒有關系,而是特指深度卷積神經網絡的寬度。
?
1 為什么需要足夠的寬度
網絡更深帶來的一個非常大的好處,就是逐層的抽象,不斷精煉提取知識,如下圖第一層學習到了邊緣,第二層學習到了簡單的形狀,第三層開始學習到了目標的形狀,更深的網絡層能學習到更加復雜的表達。如果只有一層,那就意味著要學習的變換非常的復雜,這很難做到。
而寬度就起到了另外一個作用,那就是讓每一層學習到更加豐富的特征,比如不同方向,不同頻率的紋理特征。
下面是AlexNet模型的第一個卷積層的96個通道,盡管其中有一些形狀和紋理相似的卷積核(這將成為優化寬度的關鍵),還是可以看到各種各種的模式。
因為該卷積層的輸入是RGB彩色圖,所以這里就將其可視化為3通道的彩色圖,每一個大小是11*11。
有的是彩色有的是灰色,說明有的側重于提取紋理信息,有的側重于提取顏色信息。
可以發現卷積核可視化之后和Gabor特征算子其實很像。Gabor特征算子就是使用一系列不同頻率的Gabor濾波核與圖像卷積,得到圖像上的每個點和附近區域的頻率分布。通常有8個方向,5個尺度。
太窄的網絡,每一層能捕獲的模式有限,此時網絡再深都不可能提取到足夠的信息往下層傳遞。
?
2 網絡到底需要多寬
那么一個網絡是越寬越好嗎?我們又該如何利用好寬度呢?
2.1、網絡寬度的下限在哪?
就算一個網絡越寬越好,我們也希望效率越高越好,因為寬度帶來的計算量是成平方數增長的。我們知道對于一個模型來說,淺層的特征非常重要,因此網絡淺層的寬度是一個非常敏感的系數,那么發展了這么久,那些經典的網絡第一個卷積層的寬度都是多少呢?
從AlexNet的96層到Vgg,Resnet等多數網絡使用的64層,到高效網絡Mobilenet的32層和Shufflenet的24層,似乎已經探到了下限,再往下性能就無法通過其他的方法來彌補了。
前次我們說過有許多的研究都驗證了網絡必須具有足夠的深度才能逼近一些函數,比如文[1]中構造的3層網絡,如果想要2層網絡能夠逼近表達能力,寬度會是指數級的增加。
那么反過來,是不是也有一些函數只有足夠寬才能夠表達呢?
針對網絡寬度的研究雖不如網絡深度多,但是也有學者做了相關研究。文[2]中就提出了任何Lebesgue-integrable函數,不能被一個寬度小于n的ReLU網絡逼近,n是輸入的維度,Lebesgue-integrable函數就是滿足下面積分條件的函數。
不過與深度不同的是,這樣的一些函數寬度減少后,用于補償模型性能的深度不是呈指數級增長,而是多項式增長,這似乎反應了寬度并沒有深度那么重要。
不過不管怎么樣,當前研究者們都從理論上探索了寬度和深度的下限,表明寬度和深度是缺一不可的。
2.2、網絡寬度對模型性能的影響
網絡的寬度自然也不是越寬越好,下面我們看看網絡的寬度帶來的性能提升。
我們看一下Mobilenet網絡的結果,Mobilenet研究了網絡的寬度對性能的影響,通過一個乘因子來對每一層的寬度進行縮放,它們試驗了1, 0.75, 0.5和0.25共4個值。
從上面結果可以看得出來,性能是持續下降的。
那么,是不是網絡越寬越好呢?下面我們還是通過幾個實驗來證明就是了。公開論文中使用的ImageNet等數據集研究者已經做過很多實驗了,我們另外選了兩個數據集和一個全卷積模型。
第一個數據集是GHIM數據集,第二個數據集是從Place20中選擇了20個類別,可見兩者一個比較簡單,一個比較困難。
使用全卷積模型的基準結構,包含5層卷積和一個全連接層, 因此我們稱其為allconv6吧,表示深度為6的一個卷積網絡。
對這個網絡的各個卷積層,我們也設置了不同的參數配置如下,每一個卷積層的stride都等于2。
首先我們比較Allconv6_1,Allconv6_2,Allconv6_3,Allconv6_4這4個模型和基準模型的結果,它們是以Allconv6_1為基礎的模型。
Allconv6_1是各個通道數為baseline的四分之一的網絡,而Allconv6_2,Allconv6_3,Allconv6_4分別是將Allconv6_1的第1,2層,第3,4層,第5層卷積通道數加倍的網絡。
在GHIM數據集上的收斂結果如下:
從上圖結果可以看出,基準模型allconv6的性能最好,allconv6_2,allconv6_3,allconv6_4的模型性能都超過allconv6_1,說明此時增加任何一個網絡層的通道數都有益于模型性能的提升,而且性能仍舊未超過基準模型。
然后我們再看allconv6_5,allconv6_6,allconv6_7,allconv6_8與基準模型的對比,allconv6_5的各層的通道數只有baseline模型的一半。
從上圖可以看出,模型的性能相差不大,這說明allconv6_5已經有足夠好的寬度,再增加無益于性能的提升。這一點可以通過Place20上的實驗結果進行證明,結果如下:
2.3、網絡寬度和深度誰更加重要?
這個問題目前沒有答案,兩者都很重要,不過目前的研究是模型性能對深度更加敏感,而調整寬度更加有利于提升模型性能。
Mobilenet的作者們將深層更窄的網絡和淺層更寬的網絡進行了對比,去掉了conv5_2到conv5_6這5層不改變分辨率的depth seperable卷積塊,結果對比如下:
更窄的網絡擁有了更少的參數和更好的性能,這似乎也驗證了增加網絡的寬度比增加網絡的深度更有利于提升性能。
在Wide Resnet網絡中,作者們在CIFAR10和CIFAR100上用參數只是稍微增加的一個16層的寬網絡取得了比1000層的窄網絡更好的性能,而且計算代價更低。在ImageNet上50層的寬Resnet在參數增加少量的基礎上,也比相應的ResNet152層的性能更好。
另一方面,寬度相對于深度對GPU也更加友好,因為GPU是并行處理的,許多研究也表明加寬網絡比加深網絡也更加容易訓練。
根據筆者的經驗,我們應該優先調整網絡的寬度。
?
3 如何更加有效地利用寬度?
從前面的結果我們可知,網絡的寬度是非常關鍵的參數,它體現在兩個方面:(1) 寬度對計算量的貢獻非常大。(2)寬度對性能的影響非常大。
我們的追求當然是越窄同時性能越高的網絡,確實很貪婪,不過這是要實現的目標,可以從以下幾個方向入手。
3.1、提高每一層通道的利用率
寬度既然這么重要,那么每一個通道就要好好利用起來,所以,第一個發力點,便是提高每一層的通道利用率。下面我們首先觀察一下AlexNet網絡的第一個卷積層。
看出來了吧,有些卷積核很相似,相互之間可以通過反轉得到,比如前面兩個,那么就只需要學習一個就行了,這便是網絡參數互補現象,如果將減半后的通道補上它的反,會基本上相當于原有的模型。
基于這個原理,文[3]便是通過輸入通道取反和輸入通道進行concat的方式來擴充通道。這樣僅僅以原來一半的計算量便維持了原來的網絡寬度和性能。
3.2、用其他通道的信息來補償
這個思想在DenseNet網絡中被發揮地淋漓盡致。DenseNet網絡通過各層之間進行concat,可以在輸入層保持非常小的通道數的配置下,實現高性能的網絡。
這一次的網絡寬度對模型性能的影響就說到這里,更多請大家至我的知乎live中交流。
如何設計性能更強的 CNN 網絡結構??
?
參考文獻
[1] Eldan R, Shamir O. The power of depth for feedforward neural networks[C]//Conference on learning theory. 2016: 907-940.
[2] Lu Z, Pu H, Wang F, et al. The expressive power of neural networks: A view from the width[C]//Advances in Neural Information Processing Systems. 2017: 6231-6239.
[3] Shang W, Sohn K, Almeida D, et al. Understanding and improving convolutional neural networks via concatenated rectified linear units[C]//international conference on machine learning. 2016: 2217-2225.
[4] Huang G, Liu Z, Van Der Maaten L, et al. Densely connected convolutional networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4700-4708.
?
總結
深度學習成功的關鍵在于深,但是我們也不能忘了它的寬度,即通道數目,這對于模型性能的影響不亞于深度,在計算量上的影響甚至尤比深度更加重要。
下期預告:學習率和batchsize如何影響模型的性能。
AI白身境系列完整閱讀:
第一期:【AI白身境】深度學習從棄用windows開始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】學AI必備的python基礎
第四期:【AI白身境】深度學習必備圖像基礎
第五期:【AI白身境】搞計算機視覺必備的OpenCV入門基礎
第六期:【AI白身境】只會用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】學深度學習你不得不知的爬蟲基礎
第八期:?【AI白身境】深度學習中的數據可視化
第九期:【AI白身境】入行AI需要什么數學基礎:左手矩陣論,右手微積分
第十期:【AI白身境】一文覽盡計算機視覺研究方向
第十一期:【AI白身境】AI+,都加在哪些應用領域了
第十二期:【AI白身境】究竟誰是paper之王,全球前10的計算機科學家
AI初識境系列完整閱讀
第一期:【AI初識境】從3次人工智能潮起潮落說起
第二期:【AI初識境】從頭理解神經網絡-內行與外行的分水嶺
第三期:【AI初識境】近20年深度學習在圖像領域的重要進展節點
第四期:【AI初識境】激活函數:從人工設計到自動搜索
第五期:【AI初識境】什么是深度學習成功的開始?參數初始化
第六期:【AI初識境】深度學習模型中的Normalization,你懂了多少?
第七期:【AI初識境】為了圍剿SGD大家這些年想過的那十幾招
第八期:【AI初識境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
第九期:【AI初識境】如何增加深度學習模型的泛化能力
第十期:【AI初識境】深度學習模型評估,從圖像分類到生成模型
第十一期:【AI初識境】深度學習中常用的損失函數有哪些?
第十二期:【AI初識境】給深度學習新手開始項目時的10條建議
AI不惑境系列完整閱讀:
第一期:【AI不惑境】數據壓榨有多狠,人工智能就有多成功
第二期:【AI不惑境】網絡深度對深度學習模型性能有什么影響?
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續內容將會不定期奉上,歡迎大家關注有三公眾號 有三AI!
總結
以上是生活随笔為你收集整理的【AI不惑境】网络宽度对模型性能有什么影响?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【AI不惑境】网络的宽度如何影响深度学习
- 下一篇: 【AI产品】五一出游赏花草,你一定需要这