深度學(xué)習(xí)已經(jīng)成為解決許多具有挑戰(zhàn)性的現(xiàn)實(shí)世界問(wèn)題的方法。對(duì)目標(biāo)檢測(cè),語(yǔ)音識(shí)別和語(yǔ)言翻譯來(lái)說(shuō),這是迄今為止表現(xiàn)最好的方法。許多人將深度神經(jīng)網(wǎng)絡(luò)(DNNs)視為神奇的黑盒子,我們放進(jìn)去一堆數(shù)據(jù),出來(lái)的就是我們的解決方案!事實(shí)上,事情沒(méi)那么簡(jiǎn)單。
在設(shè)計(jì)和應(yīng)用DNN到一個(gè)特定的問(wèn)題上可能會(huì)遇到很多挑戰(zhàn)。為了達(dá)到現(xiàn)實(shí)世界應(yīng)用所需的性能標(biāo)準(zhǔn),對(duì)數(shù)據(jù)準(zhǔn)備,網(wǎng)絡(luò)設(shè)計(jì),訓(xùn)練和推斷等各個(gè)階段的正確設(shè)計(jì)和執(zhí)行至關(guān)重要。在這里,我將與大家分享7個(gè)實(shí)用技巧,讓您的深度神經(jīng)網(wǎng)絡(luò)發(fā)揮最大作用。
1 - 數(shù)據(jù),數(shù)據(jù),數(shù)據(jù)
這不是一個(gè)大秘密。一直工作得很好的深度學(xué)習(xí)機(jī)器需要燃料 - 大量的燃料; 燃料是數(shù)據(jù)。我們擁有的標(biāo)記數(shù)據(jù)越多,模型的表現(xiàn)就越好。更多的數(shù)據(jù)導(dǎo)致更好的性能,已經(jīng)由谷歌大規(guī)模的探索3億圖像的數(shù)據(jù)集印證!
在實(shí)際應(yīng)用中部署Deep Learning模型時(shí),您應(yīng)該不斷地為其提供更多的數(shù)據(jù)和微調(diào)以繼續(xù)提高其性能。喂飽怪獸:如果你想提高你的模型的性能,那就獲得更多的數(shù)據(jù)!
不斷增加的數(shù)據(jù)產(chǎn)生更好的性能
2 - 你應(yīng)該使用哪個(gè)優(yōu)化器?
多年來(lái),已經(jīng)開(kāi)發(fā)了許多梯度下降優(yōu)化算法,各有其優(yōu)缺點(diǎn)。一些最流行的包括:
· 隨機(jī)梯度下降(SGD)+動(dòng)量方法
· Adam
· RMSprop
· Adadelta
RMSprop,Adadelta和Adam被認(rèn)為是自適應(yīng)優(yōu)化算法,因?yàn)樗鼈儠?huì)自動(dòng)更新學(xué)習(xí)速率。使用SGD時(shí),您必須手動(dòng)選擇學(xué)習(xí)率和動(dòng)量參數(shù),通常會(huì)隨著時(shí)間的推移而降低學(xué)習(xí)率。
在實(shí)踐中,自適應(yīng)優(yōu)化器傾向于比SGD更快地收斂,然而,他們的最終表現(xiàn)通常稍差。SGD通常會(huì)達(dá)到更好的最小值,從而獲得更好的最終準(zhǔn)確性,但這可能需要比某些優(yōu)化程序長(zhǎng)得多的時(shí)間。它也更依賴于強(qiáng)大的初始化和學(xué)習(xí)速率衰減時(shí)間表,這在實(shí)踐中可能非常困難。
因此,如果你需要一些快速的結(jié)果,或者只是想測(cè)試一個(gè)新的技術(shù),選擇自適應(yīng)優(yōu)化器。我發(fā)現(xiàn)Adam很容易使用,因?yàn)樗鼘?duì)你選擇完美的學(xué)習(xí)率并不是很敏感。如果您想獲得絕對(duì)最佳的最終表現(xiàn),請(qǐng)使用SGD + Momentum,并使用學(xué)習(xí)率,衰減和動(dòng)量值來(lái)最大化表現(xiàn)。
兩全其美的方法有木有!
它最近的研究顯示,你可以做到兩全其美:高速訓(xùn)練頂尖的性能通過(guò)切換從Adam到SGD!這個(gè)想法是,訓(xùn)練的早期階段實(shí)際上是SGD對(duì)參數(shù)調(diào)整和初始化非常敏感的時(shí)候。因此,我們可以通過(guò)使用Adam來(lái)啟動(dòng)我們的訓(xùn)練,這將使您節(jié)省相當(dāng)長(zhǎng)的時(shí)間,而不必?fù)?dān)心初始化和參數(shù)調(diào)整。那么,一旦Adam運(yùn)轉(zhuǎn)起來(lái),我們可以切換到SGD +動(dòng)量?jī)?yōu)化,以達(dá)到最佳性能!
Adam vs SGD表現(xiàn)。由于魯棒性和自適應(yīng)學(xué)習(xí)速度,Adam在一開(kāi)始表現(xiàn)更好,而SGD最終達(dá)到更好的全局最小值。
3 - 如何處理不平衡的數(shù)據(jù)
在很多情況下,您將處理不平衡的 數(shù)據(jù),特別是在現(xiàn)實(shí)世界的應(yīng)用程序中。舉一個(gè)簡(jiǎn)單而實(shí)際的例子:為了安全起見(jiàn),您正在訓(xùn)練您的深度網(wǎng)絡(luò)以預(yù)測(cè)視頻流中是否有人持有致命武器。但是在你的訓(xùn)練數(shù)據(jù)中,你只有50個(gè)拿著武器的人的視頻和1000個(gè)沒(méi)有武器的人的視頻!如果你只是用這些數(shù)據(jù)來(lái)訓(xùn)練你的網(wǎng)絡(luò),那么你的模型肯定會(huì)非常偏向于預(yù)測(cè)沒(méi)有人有武器!
有幾件事你可以做到這一點(diǎn):
· 在損失函數(shù)中使用類(lèi)權(quán)重:本質(zhì)上,代表性不足的類(lèi)在損失函數(shù)中獲得更高的權(quán)重,因此對(duì)該特定類(lèi)的任何錯(cuò)誤分類(lèi)將導(dǎo)致?lián)p失函數(shù)中的非常高的誤差。
· 過(guò)度抽樣:重復(fù)一些包含代表性不足的訓(xùn)練樣例,有助于平衡分配。如果可用的數(shù)據(jù)很小,這最好。
· 欠采樣:您可以簡(jiǎn)單地跳過(guò)一些包含過(guò)度表示類(lèi)的訓(xùn)練示例。如果可用數(shù)據(jù)非常大,這最好。
· 數(shù)據(jù)增加為少數(shù)類(lèi):您可以綜合創(chuàng)建更多的代表性不足的訓(xùn)練示例!例如,在前面檢測(cè)致命武器的例子中,你可以改變屬于具有致命武器的類(lèi)別的視頻的一些顏色和光照。
4 - 遷移學(xué)習(xí)
正如我們?cè)诘谝粋€(gè)提示中所看到的,深層網(wǎng)絡(luò)需要大量的數(shù)據(jù)。不幸的是,對(duì)于許多新的應(yīng)用程序來(lái)說(shuō),這些數(shù)據(jù)可能很難并且花費(fèi)很高。如果我們希望我們的模型表現(xiàn)良好,我們可能需要數(shù)十或數(shù)十萬(wàn)個(gè)新的訓(xùn)練樣例進(jìn)行訓(xùn)練。如果數(shù)據(jù)集不易獲取,則必須全部收集并手動(dòng)標(biāo)記。
這就是遷移學(xué)習(xí)的起點(diǎn)。通過(guò)遷移學(xué)習(xí),我們不需要太多的數(shù)據(jù)!這個(gè)想法是從一個(gè)以前在數(shù)百萬(wàn)圖像上訓(xùn)練過(guò)的網(wǎng)絡(luò)開(kāi)始的,比如在ImageNet上預(yù)訓(xùn)練的ResNet。然后,我們將通過(guò)僅重新訓(xùn)練最后幾個(gè)層并使其他層獨(dú)立來(lái)微調(diào)ResNet模型。那樣的話,我們正在將ResNet從數(shù)百萬(wàn)圖像中學(xué)到的信息(圖像特征)進(jìn)行微調(diào),以便我們可以將它應(yīng)用于不同的任務(wù)。這是可能的,因?yàn)榭缬虻膱D像的特征信息通常非常相似,但是這些特征的分析可以根據(jù)應(yīng)用而不同。
一個(gè)基本的遷移學(xué)習(xí)通道
5 - 快速簡(jiǎn)單的數(shù)據(jù)增強(qiáng),以提高性能
我們現(xiàn)在說(shuō)過(guò)幾次:更多的數(shù)據(jù)=更好的表現(xiàn)。除了遷移學(xué)習(xí)之外,另一種快速而簡(jiǎn)單的方法來(lái)提高模型的性能,即數(shù)據(jù)增強(qiáng)。數(shù)據(jù)增強(qiáng)涉及通過(guò)在使用原始類(lèi)別標(biāo)簽的同時(shí)通過(guò)改變數(shù)據(jù)集中的一些原始圖像來(lái)生成合成訓(xùn)練示例。例如,圖像數(shù)據(jù)增強(qiáng)的常見(jiàn)方式包括:
· 水平和垂直旋轉(zhuǎn)或翻轉(zhuǎn)圖像
· 改變圖像的亮度和顏色
· 隨機(jī)模糊圖像
· 隨機(jī)從圖像裁剪補(bǔ)丁
基本上,你可以進(jìn)行任何改變,改變圖像的外觀,但不是整體的內(nèi)容,即你可以制作一個(gè)藍(lán)色的狗的照片,但你仍然應(yīng)該能夠清楚地看到,照片上是一個(gè)狗。
數(shù)據(jù)裂變!
6 - 訓(xùn)練模型的合奏!
在機(jī)器學(xué)習(xí)中,集合訓(xùn)練多個(gè)模型,然后將它們組合在一起以獲得更高的性能。因此,這個(gè)想法是在相同的數(shù)據(jù)集上訓(xùn)練同一個(gè)任務(wù)上的多個(gè)深度網(wǎng)絡(luò)模型。模型的結(jié)果然后可以通過(guò)投票方案來(lái)進(jìn)行組合,即具有最高票數(shù)的勝出。
為了確保所有模型不同,可以使用隨機(jī)權(quán)重初始化和隨機(jī)數(shù)據(jù)增強(qiáng)。眾所周知,由于使用了多個(gè)模型,因此集合通常比單個(gè)模型精確得多,因此從不同角度接近任務(wù)。在現(xiàn)實(shí)世界的應(yīng)用中,尤其是挑戰(zhàn)或競(jìng)爭(zhēng)中,幾乎所有頂級(jí)模型都使用合奏。
合奏模型
7 - 加快修剪
我們知道模型精度隨深度而增加,但速度又如何呢?更多的圖層意味著更多的參數(shù),更多的參數(shù)意味著更多的計(jì)算,更多的內(nèi)存消耗和更慢的速度。理想情況下,我們希望在提高速度的同時(shí)保持高精度。我們可以通過(guò)修剪來(lái)做到這一點(diǎn)。
深度神經(jīng)網(wǎng)絡(luò)修剪的步驟
這個(gè)想法是,在網(wǎng)絡(luò)中的許多參數(shù)中,有些是多余的,對(duì)輸出沒(méi)有太大貢獻(xiàn)。如果您可以根據(jù)對(duì)網(wǎng)絡(luò)的貢獻(xiàn)排列網(wǎng)絡(luò)中的神經(jīng)元,則可以從網(wǎng)絡(luò)中移除低排名的神經(jīng)元,從而形成更小,更快的網(wǎng)絡(luò)。可以根據(jù)神經(jīng)元權(quán)重的L1 / L2均值,平均激活,一些驗(yàn)證集上神經(jīng)元不為零的次數(shù)以及其他創(chuàng)造性方法來(lái)進(jìn)行排序。獲得更快/更小的網(wǎng)絡(luò)對(duì)于在移動(dòng)設(shè)備上運(yùn)行深度學(xué)習(xí)網(wǎng)絡(luò)非常重要。
修剪網(wǎng)絡(luò)的最基本的方法是簡(jiǎn)單地放棄某些卷積濾波器。在近期的一篇文章中,這樣做是相當(dāng)成功的。這項(xiàng)工作中的神經(jīng)元排名相當(dāng)簡(jiǎn)單:它是每個(gè)濾波器權(quán)重的L1范數(shù)。在每個(gè)修剪迭代中,他們對(duì)所有的過(guò)濾器進(jìn)行排序,在全部層中修剪m個(gè)排名最低的過(guò)濾器,重新訓(xùn)練和重復(fù)!
在近期的另一篇分析剩余網(wǎng)絡(luò)結(jié)構(gòu)的文章中提出了修剪過(guò)濾器的一個(gè)關(guān)鍵洞察。作者指出,在刪除層的時(shí)候,具有剩余快捷連接的網(wǎng)絡(luò)(例如ResNets)與沒(méi)有使用任何快捷連接的網(wǎng)絡(luò)(如VGG或AlexNet)相比,保留更加良好的精度并且穩(wěn)健得多。這個(gè)有趣的發(fā)現(xiàn)具有重要的實(shí)際意義,因?yàn)樗嬖V我們?cè)谛藜艟W(wǎng)絡(luò)進(jìn)行部署和應(yīng)用時(shí),網(wǎng)絡(luò)設(shè)計(jì)是至關(guān)重要的(使用ResNets?。K允褂?a href="http://m.1cnz.cn/article/zt/" target="_blank">最新最好的方法總是很好的!
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4775瀏覽量
100921 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5508瀏覽量
121312 -
遷移學(xué)習(xí)
+關(guān)注
關(guān)注
0文章
74瀏覽量
5574
原文標(biāo)題:7個(gè)實(shí)用的深度學(xué)習(xí)技巧
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論