改進(jìn)卷積神經(jīng)網(wǎng)絡(luò),你需要這14種設(shè)計(jì)模式
深度學(xué)習(xí)領(lǐng)域近來(lái)已經(jīng)發(fā)展出大量的新架構(gòu),而如何選擇使用這些新架構(gòu)提升卷積神經(jīng)網(wǎng)絡(luò)的性能就顯得越發(fā)重要了。機(jī)器之心之前報(bào)道過(guò)提交 ICLR 2017 的論文: 解析深度卷積神經(jīng)網(wǎng)絡(luò)的14種設(shè)計(jì)模式 也正是關(guān)注于此。而本文在描述14種設(shè)計(jì)模式之余更加注重于闡述構(gòu)建和訓(xùn)練卷積網(wǎng)絡(luò)的小技巧。
自從 2011 年深度卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像分類任務(wù)中優(yōu)于人類開(kāi)始,它們就成為了計(jì)算機(jī)視覺(jué)任務(wù)中的行業(yè)標(biāo)準(zhǔn),這些任務(wù)包括圖像分割、目標(biāo)檢測(cè)、場(chǎng)景標(biāo)記、跟蹤以及文本檢測(cè)等等。
然而,訓(xùn)練神經(jīng)網(wǎng)絡(luò)的技巧并不容易掌握。與之前的機(jī)器學(xué)習(xí)方法一樣,細(xì)節(jié)是最恐怖的地方,然而在卷積神經(jīng)網(wǎng)絡(luò)中有更多的細(xì)節(jié)需要去管理:你所用的數(shù)據(jù)和硬件的限制是什么?你應(yīng)該以哪種網(wǎng)絡(luò)作為開(kāi)始呢?AlexNet、VGG、GoogLeNet 還是 ResNet 呢?甚至 ResNet 里面還有 ResNet 分支選項(xiàng)。你應(yīng)當(dāng)建立多少與卷積層相對(duì)應(yīng)的密集層?你使用哪種激活函數(shù)?即使你選擇了廣為流行的 ReLU,你也還要選擇是不是使用普通的 ReLU、Very Leaky ReLU、RReLU、PReLU 或通用版本的 ELU。
最難優(yōu)化的參數(shù)之一就是學(xué)習(xí)率(learning rate),它是調(diào)節(jié)神經(jīng)網(wǎng)絡(luò)訓(xùn)練的最重要的超參數(shù)。學(xué)習(xí)率太小,可能導(dǎo)致你永遠(yuǎn)不會(huì)收斂到一個(gè)解決方案,學(xué)習(xí)率太大,可能導(dǎo)致你剛好跳過(guò)了最優(yōu)解。即便是適應(yīng)性學(xué)習(xí)率的方法,也可能在計(jì)算上過(guò)于昂貴,這取決于你的硬件資源。
設(shè)計(jì)的選擇和超參數(shù)的設(shè)定會(huì)嚴(yán)重地影響 CNN 的訓(xùn)練和表現(xiàn),然而對(duì)于剛進(jìn)入深度學(xué)習(xí)領(lǐng)域的人而言,建立一種設(shè)計(jì)架構(gòu)的直覺(jué)所需要的資源是稀缺的,而且是分散的。
每個(gè)人都知道 VGG 是緩慢而龐大的,但是,倘若你正確地調(diào)節(jié)它,你仍然可以生成最先進(jìn)的結(jié)果以及高性能的商用應(yīng)用。圖片來(lái)源:Canziani, et al
著重于實(shí)際調(diào)節(jié)的主要書(shū)籍是《神經(jīng)網(wǎng)絡(luò):權(quán)衡技巧(Neural Networks: Tricks Of The Trade)》,作者:Orr & Muller,最初出版于 2003 年,再版于 2012 年。關(guān)于深度學(xué)習(xí)的熱潮始于 2012 年《紐約時(shí)報(bào)》報(bào)導(dǎo)的 Geoffrey Hinton 的團(tuán)隊(duì)在 Merck Drug Discovery Challenge 上的驚人成功,所以最近幾年先進(jìn)的研究是缺失的。
幸運(yùn)的是,美國(guó)海軍研究室的研究員 Leslie Smit 等人已經(jīng)發(fā)表了關(guān)于卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)改進(jìn)和技術(shù)提升的系統(tǒng)性研究。下面列舉一些他所強(qiáng)調(diào)的最重要的一些設(shè)計(jì)模式。
關(guān)于圖像分類的卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)模式
根據(jù) Smith 的觀點(diǎn),這「14 種原創(chuàng)設(shè)計(jì)模式可以幫助沒(méi)有經(jīng)驗(yàn)的研究者去嘗試將深度學(xué)習(xí)與各種新應(yīng)用相結(jié)合」。盡管高級(jí)人工智能研究員可以依靠直覺(jué)、經(jīng)驗(yàn)以及針對(duì)性的實(shí)驗(yàn),但這些建議對(duì)于剩下的沒(méi)有機(jī)器學(xué)習(xí)博士學(xué)位的人來(lái)說(shuō)是一個(gè)很好的起點(diǎn)。
1)架構(gòu)要遵循應(yīng)用
你也許會(huì)被 Google Brain 或者 DeepMind 這些奇特的實(shí)驗(yàn)室所發(fā)明的那些耀眼的新模型所吸引,但是其中許多在你的用例或者業(yè)務(wù)環(huán)境中要么是不可能實(shí)現(xiàn),要么是實(shí)現(xiàn)起來(lái)非常不現(xiàn)實(shí)。你應(yīng)該使用對(duì)你的特定應(yīng)用最有意義的模型,這種模型或許比較簡(jiǎn)單,但是仍然很強(qiáng)大,例如 VGG。
較新的架構(gòu)可能在學(xué)術(shù)性的基準(zhǔn)測(cè)試上會(huì)更加準(zhǔn)確,但是你應(yīng)該選擇你自己理解的并且最適合你的應(yīng)用的架構(gòu)。圖片來(lái)源:Canziani 等。
2)網(wǎng)絡(luò)路徑的激增
每年的 ImageNet Challenge 的冠軍都會(huì)使用比上一屆冠軍更加深層的網(wǎng)絡(luò)。從 AlexNet 到 Inception,再到 ResNet,Smith 注意到了「網(wǎng)絡(luò)中路徑數(shù)量倍增」的趨勢(shì),并且「ResNet 可以是不同長(zhǎng)度的網(wǎng)絡(luò)的指數(shù)集合」。
3)爭(zhēng)取簡(jiǎn)單
然而,更大的并不一定是更好的。在名為「Bigger is not necessarily better」的論文中,Springenberg 等人演示了如何用更少的單元實(shí)現(xiàn)最先進(jìn)的結(jié)果。參考:https://arxiv.org/pdf/1412.6806.pdf
4)增加對(duì)稱性
無(wú)論是在建筑上,還是在生物上,對(duì)稱性被認(rèn)為是質(zhì)量和工藝的標(biāo)志。Smith 將 FractalNet 的優(yōu)雅歸功于網(wǎng)絡(luò)的對(duì)稱性。
5)金字塔式的形狀
你也許經(jīng)常在表征能力和減少冗余或者無(wú)用信息之間權(quán)衡。卷積神經(jīng)網(wǎng)絡(luò)通常會(huì)降低激活函數(shù)的采樣,并會(huì)增加從輸入層到最終層之間的連接通道。
6)過(guò)度訓(xùn)練
另一個(gè)權(quán)衡是訓(xùn)練準(zhǔn)確度和泛化能力。用類似 drop-out 或者 drop-path 的方法進(jìn)行正則化可以提高泛化能力,這是神經(jīng)網(wǎng)絡(luò)的重要優(yōu)勢(shì)。請(qǐng)?jiān)诒饶愕膶?shí)際用例更加苛刻的問(wèn)題下訓(xùn)練你的網(wǎng)絡(luò),以提高泛化性能。
7)全面覆蓋問(wèn)題空間
為了擴(kuò)展你的訓(xùn)練數(shù)據(jù)和提升泛化能力,請(qǐng)使用噪聲和數(shù)據(jù)增強(qiáng),例如隨機(jī)旋轉(zhuǎn)、裁剪和一些圖像操作。
8)遞增的特征構(gòu)造
隨著網(wǎng)絡(luò)結(jié)構(gòu)越來(lái)越成功,它們進(jìn)一部簡(jiǎn)化了每一層的「工作」。在非常深層的神經(jīng)網(wǎng)絡(luò)中,每一層僅僅會(huì)遞增的修改輸入。在 ResNets 中,每一層的輸出和它的輸入時(shí)很相似的,這意味著將兩層加起來(lái)就是遞增。實(shí)踐中,請(qǐng)?jiān)?ResNet 中使用較短的跳變長(zhǎng)度。
9)標(biāo)準(zhǔn)化層的輸入
標(biāo)準(zhǔn)化是另一個(gè)可以使計(jì)算層的工作變得更加容易的方法,在實(shí)踐中被證明可以提升訓(xùn)練和準(zhǔn)確率。批量標(biāo)準(zhǔn)化(batch normalization)的發(fā)明者認(rèn)為原因在于處理內(nèi)部的協(xié)變量,但是 Smith 認(rèn)為,「標(biāo)準(zhǔn)化把所有層的輸入樣本放在了一個(gè)平等的基礎(chǔ)上(類似于一種單位轉(zhuǎn)換),這允許反向傳播可以更有效地訓(xùn)練」。
10)輸入變換
研究表明,在 Wide ResNets 中,性能會(huì)隨著連接通道的增加而增強(qiáng),但是你需要權(quán)衡訓(xùn)練代價(jià)與準(zhǔn)確度。AlexNet、VGG、Inception 和 ResNets 都在第一層使用了輸入變換以讓輸入數(shù)據(jù)能夠以多種方式被檢查。
11)可用的資源決指引著層的寬度
然而,可供選擇的輸出數(shù)量并不是顯而易見(jiàn)的,這依賴于你的硬件能力以及期望的準(zhǔn)確度。
12)Summation Joining
Summation 是一種常用的合并分支的方式。在 ResNets 中,使用總和作為連接的機(jī)制可以讓每一個(gè)分支都能計(jì)算殘差和整體近似。如果輸入跳躍連接一直存在,那么 summation 會(huì)讓每一層學(xué)到正確地東西(例如與輸入的差別)。在任何分支都可以被丟棄的網(wǎng)絡(luò)(例如 FractalNet)中,你應(yīng)該使用這種方式類保持輸出的平滑。
13)下采樣變換
在池化的時(shí)候,利用級(jí)聯(lián)連接(concatenation joining)來(lái)增加輸出的數(shù)量。當(dāng)使用大于 1 的步長(zhǎng)時(shí),這會(huì)同時(shí)處理連接并增加連接通道的數(shù)量。
14)用于競(jìng)爭(zhēng)的 Maxout
Maxout 被用在你只需要選擇一個(gè)激活函數(shù)的局部競(jìng)爭(zhēng)網(wǎng)絡(luò)中。使用求和以及平均值會(huì)包含所有的激活函數(shù),所以不同之處在于 maxout 只選擇一個(gè)「勝出者」。Maxout 的一個(gè)明顯的用例是每個(gè)分支具有不同大小的內(nèi)核,而 Maxout 可以包含尺度不變性。
提示與技巧
除了這些設(shè)計(jì)模式之外,還出現(xiàn)了幾個(gè)最新的技巧和訣竅,以減少架構(gòu)的復(fù)雜性和訓(xùn)練時(shí)間,并且可以使用有噪聲的標(biāo)簽。
1)使用調(diào)優(yōu)過(guò)的預(yù)訓(xùn)練網(wǎng)絡(luò)
「如果你的視覺(jué)數(shù)據(jù)和 ImageNet 相似,那么使用預(yù)訓(xùn)練網(wǎng)絡(luò)會(huì)幫助你學(xué)習(xí)得更快」,機(jī)器學(xué)習(xí)公司 Diffbot 的 CEO Mike Tung 解釋說(shuō)。低水平的卷積神經(jīng)網(wǎng)絡(luò)通??梢员恢貜?fù)使用,因?yàn)樗鼈兇蠖嗄軌驒z測(cè)到像線條以及邊緣這些模式。將分類層用你自己的層替換,并且用你特定的數(shù)據(jù)去訓(xùn)練最后的幾個(gè)層。
2)使用 freeze-drop-path
Drop-path 會(huì)在訓(xùn)練的迭代過(guò)程中隨機(jī)地刪除一些分支。Smith 測(cè)試了一種相反的方法,它被稱為 freeze-path,就是一些路徑的權(quán)重是固定的、不可訓(xùn)練的,而不是整體刪除。因?yàn)橄乱粋€(gè)分支比以前的分支包含更多的層,并且正確的內(nèi)容更加容易近似得到,所以網(wǎng)絡(luò)應(yīng)該會(huì)得到更好的準(zhǔn)確度。
3)使用循環(huán)的學(xué)習(xí)率
關(guān)于學(xué)習(xí)率的實(shí)驗(yàn)會(huì)消耗大量的時(shí)間,并且會(huì)讓你遇到錯(cuò)誤。自適應(yīng)學(xué)習(xí)率在計(jì)算上可能是非常昂貴的,但是循環(huán)學(xué)習(xí)率不會(huì)這樣。使用循環(huán)學(xué)習(xí)率(CLR)時(shí),你可以設(shè)置一組最大最小邊界,在邊界范圍內(nèi)改變學(xué)習(xí)率。Smith 甚至還在論文《Cyclical Learning Rates for Training Neural Networks》中提供了計(jì)算學(xué)習(xí)率的最大值和最小值的方法。參考:https://arxiv.org/pdf/1506.01186.pdf
4)在有噪聲的標(biāo)簽中使用 bootstrapping
在現(xiàn)實(shí)中,很多數(shù)據(jù)都是混亂的,標(biāo)簽都是主觀性的或者是缺失的,而且預(yù)測(cè)的對(duì)象可能是訓(xùn)練的時(shí)候未曾遇到過(guò)的。Reed 等人在文章《TRAINING DEEP NEURAL NETWORKS ON NOISY LABELS WITH BOOTSTRAPPING》中描述了一種給網(wǎng)絡(luò)預(yù)測(cè)目標(biāo)注入一致性的方法。直觀地講,這可以奏效,通過(guò)使網(wǎng)絡(luò)利用對(duì)環(huán)境的已知表示(隱含在參數(shù)中)來(lái)過(guò)濾可能具有不一致的訓(xùn)練標(biāo)簽的輸入數(shù)據(jù),并在訓(xùn)練時(shí)清理該數(shù)據(jù)。參考:https://arxiv.org/pdf/1412.6596
5)采用有 Maxout 的 ELU,而不是 ReLU
ELU 是 ReLU 的一個(gè)相對(duì)平滑的版本,它能加速收斂并提高準(zhǔn)確度。與 ReLU 不同,ELU 擁有負(fù)值,允許它們以更低的計(jì)算復(fù)雜度將平均單位激活推向更加接近 0 的值,就像批量標(biāo)準(zhǔn)化一樣參考論文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》,https://arxiv.org/pdf/1511.07289.pdf。如果您使用具有全連接層的 Maxout,它們是特別有效的。