進(jìn)入到不惑境界,就是向高手邁進(jìn)的開(kāi)始了,在這個(gè)境界需要自己獨(dú)立思考。如果說(shuō)學(xué)習(xí)是一個(gè)從模仿,到追隨,到創(chuàng)造的過(guò)程,那么到這個(gè)階段,應(yīng)該躍過(guò)了模仿和追隨的階段,進(jìn)入了創(chuàng)造的階段。從這個(gè)境界開(kāi)始,講述的問(wèn)題可能不再有答案,更多的是激發(fā)大家一起來(lái)思考。
作者&編輯 | 言有三
上一期咱們說(shuō)到深度學(xué)習(xí)模型之所以在各種任務(wù)中取得了成功,足夠的網(wǎng)絡(luò)深度起到了很關(guān)鍵的作用。
在一定的程度上,網(wǎng)絡(luò)越深,性能越好。這一次我們來(lái)考慮另一個(gè)維度,寬度,即通道(channel)的數(shù)量。注意我們這里說(shuō)的和寬度學(xué)習(xí)一類(lèi)的模型沒(méi)有關(guān)系,而是特指深度卷積神經(jīng)網(wǎng)絡(luò)的寬度。
1 為什么需要足夠的寬度
網(wǎng)絡(luò)更深帶來(lái)的一個(gè)非常大的好處,就是逐層的抽象,不斷精煉提取知識(shí),如下圖第一層學(xué)習(xí)到了邊緣,第二層學(xué)習(xí)到了簡(jiǎn)單的形狀,第三層開(kāi)始學(xué)習(xí)到了目標(biāo)的形狀,更深的網(wǎng)絡(luò)層能學(xué)習(xí)到更加復(fù)雜的表達(dá)。如果只有一層,那就意味著要學(xué)習(xí)的變換非常的復(fù)雜,這很難做到。

而寬度就起到了另外一個(gè)作用,那就是讓每一層學(xué)習(xí)到更加豐富的特征,比如不同方向,不同頻率的紋理特征。
下面是AlexNet模型的第一個(gè)卷積層的96個(gè)通道,盡管其中有一些形狀和紋理相似的卷積核(這將成為優(yōu)化寬度的關(guān)鍵),還是可以看到各種各種的模式。

因?yàn)樵摼矸e層的輸入是RGB彩色圖,所以這里就將其可視化為3通道的彩色圖,每一個(gè)大小是11*11。
有的是彩色有的是灰色,說(shuō)明有的側(cè)重于提取紋理信息,有的側(cè)重于提取顏色信息。
可以發(fā)現(xiàn)卷積核可視化之后和Gabor特征算子其實(shí)很像。Gabor特征算子就是使用一系列不同頻率的Gabor濾波核與圖像卷積,得到圖像上的每個(gè)點(diǎn)和附近區(qū)域的頻率分布。通常有8個(gè)方向,5個(gè)尺度。
太窄的網(wǎng)絡(luò),每一層能捕獲的模式有限,此時(shí)網(wǎng)絡(luò)再深都不可能提取到足夠的信息往下層傳遞。
2 網(wǎng)絡(luò)到底需要多寬
那么一個(gè)網(wǎng)絡(luò)是越寬越好嗎?我們又該如何利用好寬度呢?
2.1、網(wǎng)絡(luò)寬度的下限在哪?
就算一個(gè)網(wǎng)絡(luò)越寬越好,我們也希望效率越高越好,因?yàn)閷挾葞?lái)的計(jì)算量是成平方數(shù)增長(zhǎng)的。我們知道對(duì)于一個(gè)模型來(lái)說(shuō),淺層的特征非常重要,因此網(wǎng)絡(luò)淺層的寬度是一個(gè)非常敏感的系數(shù),那么發(fā)展了這么久,那些經(jīng)典的網(wǎng)絡(luò)第一個(gè)卷積層的寬度都是多少呢?

從AlexNet的96層到Vgg,Resnet等多數(shù)網(wǎng)絡(luò)使用的64層,到高效網(wǎng)絡(luò)Mobilenet的32層和Shufflenet的24層,似乎已經(jīng)探到了下限,再往下性能就無(wú)法通過(guò)其他的方法來(lái)彌補(bǔ)了。
前次我們說(shuō)過(guò)有許多的研究都驗(yàn)證了網(wǎng)絡(luò)必須具有足夠的深度才能逼近一些函數(shù),比如文[1]中構(gòu)造的3層網(wǎng)絡(luò),如果想要2層網(wǎng)絡(luò)能夠逼近表達(dá)能力,寬度會(huì)是指數(shù)級(jí)的增加。
那么反過(guò)來(lái),是不是也有一些函數(shù)只有足夠?qū)挷拍軌虮磉_(dá)呢?
針對(duì)網(wǎng)絡(luò)寬度的研究雖不如網(wǎng)絡(luò)深度多,但是也有學(xué)者做了相關(guān)研究。文[2]中就提出了任何Lebesgue-integrable函數(shù),不能被一個(gè)寬度小于n的ReLU網(wǎng)絡(luò)逼近,n是輸入的維度,Lebesgue-integrable函數(shù)就是滿(mǎn)足下面積分條件的函數(shù)。

不過(guò)與深度不同的是,這樣的一些函數(shù)寬度減少后,用于補(bǔ)償模型性能的深度不是呈指數(shù)級(jí)增長(zhǎng),而是多項(xiàng)式增長(zhǎng),這似乎反應(yīng)了寬度并沒(méi)有深度那么重要。
不過(guò)不管怎么樣,當(dāng)前研究者們都從理論上探索了寬度和深度的下限,表明寬度和深度是缺一不可的。
2.2、網(wǎng)絡(luò)寬度對(duì)模型性能的影響
網(wǎng)絡(luò)的寬度自然也不是越寬越好,下面我們看看網(wǎng)絡(luò)的寬度帶來(lái)的性能提升。
我們看一下Mobilenet網(wǎng)絡(luò)的結(jié)果,Mobilenet研究了網(wǎng)絡(luò)的寬度對(duì)性能的影響,通過(guò)一個(gè)乘因子來(lái)對(duì)每一層的寬度進(jìn)行縮放,它們?cè)囼?yàn)了1, 0.75, 0.5和0.25共4個(gè)值。

從上面結(jié)果可以看得出來(lái),性能是持續(xù)下降的。
那么,是不是網(wǎng)絡(luò)越寬越好呢?下面我們還是通過(guò)幾個(gè)實(shí)驗(yàn)來(lái)證明就是了。公開(kāi)論文中使用的ImageNet等數(shù)據(jù)集研究者已經(jīng)做過(guò)很多實(shí)驗(yàn)了,我們另外選了兩個(gè)數(shù)據(jù)集和一個(gè)全卷積模型。
第一個(gè)數(shù)據(jù)集是GHIM數(shù)據(jù)集,第二個(gè)數(shù)據(jù)集是從Place20中選擇了20個(gè)類(lèi)別,可見(jiàn)兩者一個(gè)比較簡(jiǎn)單,一個(gè)比較困難。
使用全卷積模型的基準(zhǔn)結(jié)構(gòu),包含5層卷積和一個(gè)全連接層, 因此我們稱(chēng)其為allconv6吧,表示深度為6的一個(gè)卷積網(wǎng)絡(luò)。

對(duì)這個(gè)網(wǎng)絡(luò)的各個(gè)卷積層,我們也設(shè)置了不同的參數(shù)配置如下,每一個(gè)卷積層的stride都等于2。

首先我們比較Allconv6_1,Allconv6_2,Allconv6_3,Allconv6_4這4個(gè)模型和基準(zhǔn)模型的結(jié)果,它們是以Allconv6_1為基礎(chǔ)的模型。
Allconv6_1是各個(gè)通道數(shù)為baseline的四分之一的網(wǎng)絡(luò),而Allconv6_2,Allconv6_3,Allconv6_4分別是將Allconv6_1的第1,2層,第3,4層,第5層卷積通道數(shù)加倍的網(wǎng)絡(luò)。
在GHIM數(shù)據(jù)集上的收斂結(jié)果如下:

從上圖結(jié)果可以看出,基準(zhǔn)模型allconv6的性能最好,allconv6_2,allconv6_3,allconv6_4的模型性能都超過(guò)allconv6_1,說(shuō)明此時(shí)增加任何一個(gè)網(wǎng)絡(luò)層的通道數(shù)都有益于模型性能的提升,而且性能仍舊未超過(guò)基準(zhǔn)模型。
然后我們?cè)倏碼llconv6_5,allconv6_6,allconv6_7,allconv6_8與基準(zhǔn)模型的對(duì)比,allconv6_5的各層的通道數(shù)只有baseline模型的一半。

從上圖可以看出,模型的性能相差不大,這說(shuō)明allconv6_5已經(jīng)有足夠好的寬度,再增加無(wú)益于性能的提升。這一點(diǎn)可以通過(guò)Place20上的實(shí)驗(yàn)結(jié)果進(jìn)行證明,結(jié)果如下:

2.3、網(wǎng)絡(luò)寬度和深度誰(shuí)更加重要?
這個(gè)問(wèn)題目前沒(méi)有答案,兩者都很重要,不過(guò)目前的研究是模型性能對(duì)深度更加敏感,而調(diào)整寬度更加有利于提升模型性能。
Mobilenet的作者們將深層更窄的網(wǎng)絡(luò)和淺層更寬的網(wǎng)絡(luò)進(jìn)行了對(duì)比,去掉了conv5_2到conv5_6這5層不改變分辨率的depth seperable卷積塊,結(jié)果對(duì)比如下:

更窄的網(wǎng)絡(luò)擁有了更少的參數(shù)和更好的性能,這似乎也驗(yàn)證了增加網(wǎng)絡(luò)的寬度比增加網(wǎng)絡(luò)的深度更有利于提升性能。
在Wide Resnet網(wǎng)絡(luò)中,作者們?cè)贑IFAR10和CIFAR100上用參數(shù)只是稍微增加的一個(gè)16層的寬網(wǎng)絡(luò)取得了比1000層的窄網(wǎng)絡(luò)更好的性能,而且計(jì)算代價(jià)更低。在ImageNet上50層的寬Resnet在參數(shù)增加少量的基礎(chǔ)上,也比相應(yīng)的ResNet152層的性能更好。

另一方面,寬度相對(duì)于深度對(duì)GPU也更加友好,因?yàn)镚PU是并行處理的,許多研究也表明加寬網(wǎng)絡(luò)比加深網(wǎng)絡(luò)也更加容易訓(xùn)練。
根據(jù)筆者的經(jīng)驗(yàn),我們應(yīng)該優(yōu)先調(diào)整網(wǎng)絡(luò)的寬度。
3 如何更加有效地利用寬度?
從前面的結(jié)果我們可知,網(wǎng)絡(luò)的寬度是非常關(guān)鍵的參數(shù),它體現(xiàn)在兩個(gè)方面:(1) 寬度對(duì)計(jì)算量的貢獻(xiàn)非常大。(2)寬度對(duì)性能的影響非常大。
我們的追求當(dāng)然是越窄同時(shí)性能越高的網(wǎng)絡(luò),確實(shí)很貪婪,不過(guò)這是要實(shí)現(xiàn)的目標(biāo),可以從以下幾個(gè)方向入手。
3.1、提高每一層通道的利用率
寬度既然這么重要,那么每一個(gè)通道就要好好利用起來(lái),所以,第一個(gè)發(fā)力點(diǎn),便是提高每一層的通道利用率。下面我們首先觀察一下AlexNet網(wǎng)絡(luò)的第一個(gè)卷積層。

看出來(lái)了吧,有些卷積核很相似,相互之間可以通過(guò)反轉(zhuǎn)得到,比如前面兩個(gè),那么就只需要學(xué)習(xí)一個(gè)就行了,這便是網(wǎng)絡(luò)參數(shù)互補(bǔ)現(xiàn)象,如果將減半后的通道補(bǔ)上它的反,會(huì)基本上相當(dāng)于原有的模型。
基于這個(gè)原理,文[3]便是通過(guò)輸入通道取反和輸入通道進(jìn)行concat的方式來(lái)擴(kuò)充通道。這樣僅僅以原來(lái)一半的計(jì)算量便維持了原來(lái)的網(wǎng)絡(luò)寬度和性能。
3.2、用其他通道的信息來(lái)補(bǔ)償
這個(gè)思想在DenseNet網(wǎng)絡(luò)中被發(fā)揮地淋漓盡致。DenseNet網(wǎng)絡(luò)通過(guò)各層之間進(jìn)行concat,可以在輸入層保持非常小的通道數(shù)的配置下,實(shí)現(xiàn)高性能的網(wǎng)絡(luò)。

這一次的網(wǎng)絡(luò)寬度對(duì)模型性能的影響就說(shuō)到這里,更多請(qǐng)大家至我的知乎live中交流。
如何設(shè)計(jì)性能更強(qiáng)的 CNN 網(wǎng)絡(luò)結(jié)構(gòu)?
參考文獻(xiàn)
[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.
總結(jié)
深度學(xué)習(xí)成功的關(guān)鍵在于深,但是我們也不能忘了它的寬度,即通道數(shù)目,這對(duì)于模型性能的影響不亞于深度,在計(jì)算量上的影響甚至尤比深度更加重要。
下期預(yù)告:學(xué)習(xí)率和batchsize如何影響模型的性能。
AI白身境系列完整閱讀:
第一期:【AI白身境】深度學(xué)習(xí)從棄用windows開(kāi)始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】學(xué)AI必備的python基礎(chǔ)
第四期:【AI白身境】深度學(xué)習(xí)必備圖像基礎(chǔ)
第五期:【AI白身境】搞計(jì)算機(jī)視覺(jué)必備的OpenCV入門(mén)基礎(chǔ)
第六期:【AI白身境】只會(huì)用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】學(xué)深度學(xué)習(xí)你不得不知的爬蟲(chóng)基礎(chǔ)
第八期:【AI白身境】深度學(xué)習(xí)中的數(shù)據(jù)可視化
第九期:【AI白身境】入行AI需要什么數(shù)學(xué)基礎(chǔ):左手矩陣論,右手微積分
第十期:【AI白身境】一文覽盡計(jì)算機(jī)視覺(jué)研究方向
第十一期:【AI白身境】AI+,都加在哪些應(yīng)用領(lǐng)域了
第十二期:【AI白身境】究竟誰(shuí)是paper之王,全球前10的計(jì)算機(jī)科學(xué)家
AI初識(shí)境系列完整閱讀
第一期:【AI初識(shí)境】從3次人工智能潮起潮落說(shuō)起
第二期:【AI初識(shí)境】從頭理解神經(jīng)網(wǎng)絡(luò)-內(nèi)行與外行的分水嶺
第三期:【AI初識(shí)境】近20年深度學(xué)習(xí)在圖像領(lǐng)域的重要進(jìn)展節(jié)點(diǎn)
第四期:【AI初識(shí)境】激活函數(shù):從人工設(shè)計(jì)到自動(dòng)搜索
第五期:【AI初識(shí)境】什么是深度學(xué)習(xí)成功的開(kāi)始?參數(shù)初始化
第六期:【AI初識(shí)境】深度學(xué)習(xí)模型中的Normalization,你懂了多少?
第七期:【AI初識(shí)境】為了圍剿SGD大家這些年想過(guò)的那十幾招
第八期:【AI初識(shí)境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
第九期:【AI初識(shí)境】如何增加深度學(xué)習(xí)模型的泛化能力
第十期:【AI初識(shí)境】深度學(xué)習(xí)模型評(píng)估,從圖像分類(lèi)到生成模型
第十一期:【AI初識(shí)境】深度學(xué)習(xí)中常用的損失函數(shù)有哪些?
第十二期:【AI初識(shí)境】給深度學(xué)習(xí)新手開(kāi)始項(xiàng)目時(shí)的10條建議
AI不惑境系列完整閱讀:
第一期:【AI不惑境】數(shù)據(jù)壓榨有多狠,人工智能就有多成功
第二期:【AI不惑境】網(wǎng)絡(luò)深度對(duì)深度學(xué)習(xí)模型性能有什么影響?
作者:言有三
鏈接:http://www.itdecent.cn/p/e608d175e5fc
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。