?姓名:樊松松
?學(xué)號:17021211234
?轉(zhuǎn)載自https://www.leiphone.com/news/201805/027shV6WaPp5HiBa.html,有刪節(jié)
【嵌牛導(dǎo)讀】:我們一直在尋找更好的方法來改善模型的性能。有很多技術(shù)可以幫助我們實(shí)現(xiàn)這一目標(biāo)。遵循這些技術(shù)來了解它們,并建立自己的準(zhǔn)確的神經(jīng)網(wǎng)絡(luò)。
【嵌牛鼻子】:神經(jīng)網(wǎng)絡(luò)
【嵌牛提問】:在哪些方面做了改進(jìn)?
【嵌牛正文】:

神經(jīng)網(wǎng)絡(luò)是機(jī)器學(xué)習(xí)算法,提供許多示例的精確度狀態(tài)。但是,很多時候,我們構(gòu)建的網(wǎng)絡(luò)的準(zhǔn)確性可能不令人滿意,或者可能無法引領(lǐng)我們進(jìn)入數(shù)據(jù)科學(xué)競爭排行榜的頂端。因此,我們一直在尋找更好的方法來改善模型的性能。有很多技術(shù)可以幫助我們實(shí)現(xiàn)這一目標(biāo)。遵循這些技術(shù)來了解它們,并建立自己的準(zhǔn)確的神經(jīng)網(wǎng)絡(luò)。
檢查過擬合
確保神經(jīng)網(wǎng)絡(luò)在測試數(shù)據(jù)上表現(xiàn)良好的第一步是驗證神經(jīng)網(wǎng)絡(luò)沒有過擬合。好的,停一下,什么是過擬合?過擬合發(fā)生在模型開始記憶訓(xùn)練數(shù)據(jù)的值而不是從中學(xué)習(xí)。因此,當(dāng)模型遇到一個它以前從未見過的數(shù)據(jù)時,就無法很好地執(zhí)行。為了讓你更好地理解,讓我們來看一個類比:我們都會有一個善于背誦的同學(xué),并且假設(shè)即將有一場數(shù)學(xué)考試。你和你這位善于記憶的朋友從課本開始學(xué)習(xí)。你的朋友會記住教科書中的每一個公式、問題和答案,但另一方面,你比他更聰明,所以你決定基于直覺來解決問題,并了解這些公式是如何發(fā)揮作用的??荚嚨娜兆拥搅?。如果試卷中的問題直接出自教科書,那么你可以料到你的記憶力強(qiáng)的朋友做得更好,但如果問題是涉及直覺方面的新問題,那么你在考試中做得更好,你的記憶力強(qiáng)的朋友會慘遭失敗。
如何識別模型是否過擬合?你可以交叉檢查訓(xùn)練的準(zhǔn)確性和測試的準(zhǔn)確性。如果訓(xùn)練的準(zhǔn)確性遠(yuǎn)遠(yuǎn)高于測試的準(zhǔn)確性,那么你可以假設(shè)模型已經(jīng)過擬合。你還可以繪制圖表上的預(yù)測點(diǎn)來驗證。有一些技巧可以避免過擬合:
數(shù)據(jù)正則化(L1 或者 L2)
Dropouts - 隨機(jī)丟棄神經(jīng)元之間的連接,迫使網(wǎng)絡(luò)找到新的路徑并歸納
提早停止 - 減少神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,從而減少測試集中的錯誤。
超參數(shù)調(diào)整
超參數(shù)是必須初始化到網(wǎng)絡(luò)的值,這些值在訓(xùn)練時無法通過網(wǎng)絡(luò)獲知。比如,在卷積神經(jīng)網(wǎng)絡(luò)中,一些超參數(shù)是核的大小、神經(jīng)網(wǎng)絡(luò)中的層數(shù)、激活函數(shù)、損失函數(shù)、使用的優(yōu)化器(梯度下降,RMSprop)、批量大小、訓(xùn)練的時代數(shù)量等。
每個神經(jīng)網(wǎng)絡(luò)都會有它的最優(yōu)超參數(shù)集,這個參數(shù)集將會產(chǎn)生最大的精確度。你也許會問,「有這么多的超參數(shù),對于一個神經(jīng)網(wǎng)絡(luò)我如何選擇使用哪些呢?」不幸的是,現(xiàn)在還沒有一個明確的方法去為每個神經(jīng)網(wǎng)絡(luò)指定一個最優(yōu)超參數(shù)集,所以這個最優(yōu)參數(shù)集通常通過試錯(trial and error)來獲得。接下來我們會提到關(guān)于超參數(shù)的一些通用慣例:
學(xué)習(xí)率(Learning Rate)——選擇一個最優(yōu)的學(xué)習(xí)率是很重要的,因為它決定了你的網(wǎng)絡(luò)是否收斂于全局最小值。選擇一個高的學(xué)習(xí)率幾乎不會得到全局最小值,因為你有很大概率直接越過最小值。因此,一直在全局最小值附近徘徊但從來沒有收斂于這一點(diǎn)。選擇一個小的學(xué)習(xí)率可以幫助一個神經(jīng)網(wǎng)絡(luò)收斂到全局最小值,但是這會耗費(fèi)大量的時間。因此,必須用大量的時間來訓(xùn)練網(wǎng)絡(luò)。一個小的學(xué)習(xí)率也會使網(wǎng)絡(luò)陷入局部最優(yōu)解。也就是說,由于學(xué)習(xí)率小,網(wǎng)絡(luò)會收斂于局部最小值且無法跳出。因此,當(dāng)設(shè)置學(xué)習(xí)率時,需要謹(jǐn)慎。
網(wǎng)絡(luò)架構(gòu)(Network Architecture)——現(xiàn)在并沒有一種標(biāo)準(zhǔn)的架構(gòu)會在所有測試案例中都得出高的精確度。你需要去實(shí)驗,嘗試不同架構(gòu),從結(jié)果中得到推論然后再嘗試。我建議的一種方法是:使用一些經(jīng)過證明的架構(gòu)去替代你自己創(chuàng)造的。例如:對于圖像識別任務(wù),你有 VGG 網(wǎng)絡(luò),Resnet(殘差網(wǎng)絡(luò)),谷歌(Google)的 Inception 網(wǎng)絡(luò)等。這些都是開源的且已經(jīng)被證明有高的精確度,因此,你可以使用他們的架構(gòu)再根據(jù)你的目的來微調(diào)他們。
優(yōu)化方式及損失函數(shù)(Optimizers and Loss function?)——對于優(yōu)化方式及損失函數(shù),我們已經(jīng)有大量的可供選擇的選項。事實(shí)上,如果需要的話,你甚至可以自定義損失函數(shù)。但是最常用的優(yōu)化方法是 RMSprop 算法,隨機(jī)梯度下降(Stochastic Gradient Descent)算法及 Adam 算法。這些優(yōu)化方法可以應(yīng)用于大多數(shù)的情況。對于通用的損失函數(shù),如果應(yīng)用于分類任務(wù),可以使用分類交叉熵(categorical cross entropy)。如果是在回歸任務(wù)中,常用的損失函數(shù)是均方誤差(MSE)。多去調(diào)試這些優(yōu)化方法的超參數(shù),同時也要嘗試不同的優(yōu)化方式和損失函數(shù)的組合。
批量規(guī)模(Batch Size)和訓(xùn)練完整數(shù)據(jù)的次數(shù)(Number of Epochs)——再強(qiáng)調(diào)一下,批量大小和訓(xùn)練次數(shù)沒有對所有情況都有效的通用的值。你需要去實(shí)驗然后嘗試不同的數(shù)值。在通常情況下,批量規(guī)模的值被設(shè)置為 8,16,32。訓(xùn)練完整數(shù)據(jù)的次數(shù)由開發(fā)者的偏好和其擁有的計算力來決定。
ReLU 激活函數(shù)
激活函數(shù)(Activation Function?)——通過激活函數(shù)可以在輸出中加入非線性映射。激活函數(shù)非常重要,選擇一個恰當(dāng)?shù)募せ詈瘮?shù)可以幫助你的模型學(xué)習(xí)的更好?,F(xiàn)在,ReLU 是最廣泛使用的激活函數(shù)因為它解決了梯度消失的問題。早年間,Sigmoid 和 Tanh 函數(shù)是最常用的激活函數(shù)。但是,他們都存在著梯度消失的問題。也就是說,在反向傳播的過程中,當(dāng)傳播到起始層時,梯度會在數(shù)值上消失。這會阻止神經(jīng)網(wǎng)絡(luò)擴(kuò)大到有更大規(guī)模更多層的狀態(tài)。ReLU 有效的克服了這個問題因此使神經(jīng)網(wǎng)絡(luò)可以有更大的規(guī)模。
算法集成
如果單一神經(jīng)網(wǎng)絡(luò)的精度不是你所想要的那樣,你還可以構(gòu)建一個神經(jīng)網(wǎng)絡(luò)的集成并使它們的預(yù)測性能結(jié)合起來。你可以選取不同的神經(jīng)網(wǎng)絡(luò)架構(gòu),用數(shù)據(jù)的不同部分來訓(xùn)練它們,之后將它們「組裝」起來,用其聯(lián)合的預(yù)測性能在測試集上取得高精度。假設(shè),你正在構(gòu)建一個貓狗分類器,0 代表貓 1 代表狗。當(dāng)將不同的貓狗分類器結(jié)合起來時,集成算法的精度將會根據(jù)它與各個單一分類器的皮爾森相關(guān)性(Pearson Correlation)提升。讓我們來看一個例子,測試 3 個模型并評估它們的精度。
這三個模型之間的皮爾森相關(guān)性較高。因此,集成它們沒有提升精度。如果我們通過多數(shù)投票來集成上述三個模型,我們會得到下面的結(jié)果。
現(xiàn)在,讓我們看另外三個模型,它們預(yù)測結(jié)果之間的皮爾森相關(guān)性很低。
當(dāng)我們將這三個「中等生」結(jié)合起來,得到如下結(jié)果。
你可以從上看到,同樣是三個「中等生」的集成,皮爾森相關(guān)性低的一方性能要勝過高的一方。
數(shù)據(jù)的缺乏

在運(yùn)用了上述所有的技術(shù)之后,如果你的模型在你的測試集上依舊沒有表現(xiàn)得更好,那可能得歸因于缺少訓(xùn)練數(shù)據(jù)了。當(dāng)可利用的訓(xùn)練數(shù)據(jù)的數(shù)量受限時,也有很多的使用案例。如果你無法采集更多的數(shù)據(jù),那么你可能得求助于數(shù)據(jù)增強(qiáng)(data augmentation)技術(shù)了。

數(shù)據(jù)增強(qiáng)技術(shù)
如果你正在研究圖片的數(shù)據(jù)集,你可以通過圖片剪切,翻轉(zhuǎn),隨機(jī)裁剪等等,來為訓(xùn)練集增添新的圖片。這可以為神經(jīng)網(wǎng)絡(luò)的訓(xùn)練提供不同的實(shí)例。