Google研究员Ilya Sutskever:成功训练LDNN的13点建议
Google研究員Ilya Sutskever:成功訓(xùn)練LDNN的13點(diǎn)建議
width="22" height="16" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2015-06-29%2F2825073&type=3&count=&appkey=&title=%E6%9C%AC%E6%96%87%E7%94%B1Ilya%20Sutskever%EF%BC%88Google%E7%A0%94%E7%A9%B6%E5%91%98%E3%80%81%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%B3%B0%E6%96%97Geoffrey%20Hinton%E7%9A%84%E5%AD%A6%E7%94%9F%E3%80%81DNNresearch%E8%81%94%E5%90%88%E5%88%9B%E5%A7%8B%E4%BA%BA%EF%BC%89%E6%89%80%E5%86%99%EF%BC%8C%E8%AE%B2%E8%BF%B0%E4%BA%86%E6%9C%89%E5%85%B3%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E7%9A%84%E8%A7%81%E8%A7%A3%E5%8F%8A%E5%AE%9E%E7%94%A8%E5%BB%BA%E8%AE%AE%EF%BC%8C%E5%8C%85%E6%8B%AC%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BC%BA%E5%A4%A7%EF%BC%8C%E5%A6%82%E4%BD%95%E5%BC%BA%E5%A4%A7%EF%BC%8C%E4%BB%A5%E5%8F%8A%E8%AE%AD%E7%BB%83%E6%B7%B1%E5%BA%A6%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84tricks%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1435670500257" frameborder="0" scrolling="no" allowtransparency="true">摘要:本文由Ilya Sutskever(Google研究員、深度學(xué)習(xí)泰斗Geoffrey Hinton的學(xué)生、DNNresearch聯(lián)合創(chuàng)始人)所寫,講述了有關(guān)深度學(xué)習(xí)的見解及實(shí)用建議,包括深度學(xué)習(xí)為什么強(qiáng)大,如何強(qiáng)大,以及訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的tricks。
【編者按】本文由Ilya Sutskever(Google研究員、深度學(xué)習(xí)泰斗Geoffrey Hinton的學(xué)生、DNNresearch的聯(lián)合創(chuàng)始人)受Yisong Yue之邀所寫,綜合講述了有關(guān)深度學(xué)習(xí)的見解及實(shí)用建議。文章由Yisong Yue授權(quán)《程序員》電子刊翻譯,并刊載于《程序員》15·2B期。
近年來IT界里掀起了一股深度學(xué)習(xí)熱,有望成為下一個技術(shù)創(chuàng)新風(fēng)口。在諸如語音識別、影像識別及其他語言相關(guān)的如機(jī)器翻譯等領(lǐng)域里,深度學(xué)習(xí)業(yè)已取得了相當(dāng)不錯的成績。
為什么呢?深度學(xué)習(xí)究竟有何神通?(接下來在論述深度神經(jīng)網(wǎng)絡(luò)時,會簡寫為LDNN,Large Deep Neural Networks)現(xiàn)在的LDNN與過去又有何異同?最后,或許你會問及如何訓(xùn)練一個LDNN。坊間流行的說法是“難,難,難”,同時給LDNN訓(xùn)練披上了一件有著“黑色魔法”的外衣——經(jīng)驗(yàn),經(jīng)驗(yàn)!誠然經(jīng)驗(yàn)不可或缺,但不應(yīng)過分夸大。此外,很多開源神經(jīng)網(wǎng)絡(luò)方案已幫助不少初學(xué)者找到了入門捷徑(如Caffe、cuda-convnet、Torch、Theano等)。
為什么深度學(xué)習(xí)是可行的
首先,工欲善其事,必先利其器。如果缺乏一個足夠強(qiáng)大的模型,再好的學(xué)習(xí)算法也只能隔靴搔癢。
其次,該模型必須是可訓(xùn)練的。否則在瞬息萬變的時代,不可訓(xùn)練的模型無疑是阿喀琉斯之踵。
慶幸的是,LDNN既強(qiáng)大又可訓(xùn)練。
LDNN究竟強(qiáng)在哪里
談及LDNN時,我通常指的是10-20層的神經(jīng)網(wǎng)絡(luò)(這是現(xiàn)有算法所能駕馭的)。以下列舉了幾點(diǎn)有關(guān)LDNN的強(qiáng)大之處。
傳統(tǒng)統(tǒng)計學(xué)模型學(xué)習(xí)的是簡單的模式或群集。相反,LDNN學(xué)習(xí)的是計算,盡管進(jìn)行大規(guī)模并行運(yùn)算時需要適量的計算步驟。這就是LDNN與其他統(tǒng)計模型的重要分水嶺。
更具體地說:眾所周知,任何算法都可由合適的深層電路圖來實(shí)現(xiàn)(如把算法實(shí)現(xiàn)中的每一時步作為一層)。而且,電路圖層次越深,電路算法實(shí)現(xiàn)的難度越大(比方說運(yùn)行時)。如果把神經(jīng)網(wǎng)絡(luò)用作電路圖,越深層的神經(jīng)網(wǎng)絡(luò)越能執(zhí)行更多的算法運(yùn)算——深度=力度。
注意:需要明白一點(diǎn)的是神經(jīng)網(wǎng)絡(luò)中的單個神經(jīng)元能夠?qū)斎刖奂蜉斎敕旨M(jìn)行計算,要做的就是對它們的連接賦上合適的值。
出人意料的是,事實(shí)上神經(jīng)網(wǎng)絡(luò)比布爾電路更加高效。進(jìn)一步說,要解決某個問題,一個相當(dāng)淺層DNN的層次開銷比布爾電路所需的要少得多。例如,一個有著兩個隱藏層和適量計算單元的DNN能夠?qū)N位數(shù)字進(jìn)行排序。當(dāng)我知道這結(jié)論時是相當(dāng)?shù)捏@訝,所以我嘗試創(chuàng)建一個小型神經(jīng)網(wǎng)絡(luò)然后訓(xùn)練它使之對106位數(shù)字進(jìn)行排序,其執(zhí)行結(jié)果與結(jié)論高度一致!而如果使用布爾電路對NN位數(shù)排序,在相同條件下,這是實(shí)現(xiàn)不了的。
DNN比布爾電路高效的原因是神經(jīng)元會執(zhí)行閾值操作,而微布爾電路則做不到。
最后,盡管人類神經(jīng)元速度慢,但能在短時間內(nèi)完成很多復(fù)雜的任務(wù)。具體地說,有個常識是一個人類神經(jīng)元每秒的運(yùn)作次數(shù)少于100次。意即假若某人能在0.1秒內(nèi)解決問題,我們的神經(jīng)元在足夠時間內(nèi)只會運(yùn)作10次。所以說一個10層大型神經(jīng)網(wǎng)絡(luò)能夠完成任何人類需時0.1秒來做完的任務(wù)。
人的普遍認(rèn)知是人類神經(jīng)元要比人工神經(jīng)元強(qiáng)大得多,但其實(shí)有可能相反。究竟孰優(yōu)孰劣,暫時還言之尚早。
有趣的是,人類通常能在0.1秒左右解決極其復(fù)雜的認(rèn)知問題。例如,對于眼前的事物,不論是表情,臉部還是語言交流,我們都能很快識別并作出反應(yīng)。事實(shí)上,如果世上有一個人能解決最復(fù)雜的問題,即使僅有一位,也足夠說服人們相信LDNN能做到相同的事情——務(wù)必確保獲得正確的數(shù)據(jù)輸入。
小型神經(jīng)網(wǎng)絡(luò)可行嗎?也許是的。人的神經(jīng)網(wǎng)絡(luò)必定無法進(jìn)行指數(shù)級生長,因?yàn)槿说哪X部是不可能瘋長的!如果人的神經(jīng)元出現(xiàn)雜音,意思是當(dāng)一個人工神經(jīng)元可以完成需要多個人類神經(jīng)元合力才能完成的工作時,與人腦相匹配的DNN所需的神經(jīng)元個數(shù)將明顯減少。
上述的幾個爭論點(diǎn)主要闡明了在不同情況下,存在著一個能基本解決問題的LDNN連接配置。關(guān)鍵的,解決問題所需的單元個數(shù)要遠(yuǎn)少于指數(shù)級;因此,利用現(xiàn)有硬件來訓(xùn)練并獲得一個高性能網(wǎng)絡(luò)是可行的。最后的這點(diǎn)非常重要,以下繼續(xù)深入說明。
我們知道機(jī)器進(jìn)行算法學(xué)習(xí)是持續(xù)性的:也就是說,只要提供充足的數(shù)據(jù),它們就能把問題解決。但持續(xù)性往往意味著指數(shù)級的大數(shù)據(jù)量。舉例來說,當(dāng)最近鄰算法把所有可能性都考慮到了,便能解決任何問題;向量機(jī)與此類似,需要做的是提供足夠的訓(xùn)練樣本。這同樣適用于一個有著單個隱藏層的神經(jīng)網(wǎng)絡(luò):如果每個可能的訓(xùn)練樣本都對應(yīng)著一個神經(jīng)元,而該神經(jīng)元不關(guān)心其他事例,那么我們便可從輸入和輸出中學(xué)習(xí)并展示每個可能的功能。問題解決依賴于數(shù)據(jù),但在有限的資源里不一定任何時候都能實(shí)現(xiàn)。
這便是LDNN與舊版的區(qū)別:使用大型而非巨大的LDNN來解決實(shí)際問題。如果人能短時間內(nèi)解決問題,就足以證明即使是最小型神經(jīng)網(wǎng)絡(luò)也蘊(yùn)藏著巨大的能力。
我必須承認(rèn)的一點(diǎn)是,DNN能否把給定的問題解決好還有待時間來證明,雖然LDNN常常能在可操作的數(shù)據(jù)范圍內(nèi)把同一個問題處理好。
這就是我要說的。對于某個問題,例如是視覺目標(biāo)識別,我們所要做的是要對一個50層巨型卷積碼神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。顯然達(dá)到如此級別的神經(jīng)網(wǎng)絡(luò)足以與人類神經(jīng)網(wǎng)絡(luò)媲美,不是嗎?所以找到這樣的權(quán)值是成敗的關(guān)鍵。
學(xué)習(xí)
什么是學(xué)習(xí)?學(xué)習(xí)是為神經(jīng)網(wǎng)絡(luò)權(quán)值找到合適的設(shè)置值來使訓(xùn)練數(shù)據(jù)效益最大化。換言之,我們要把來自標(biāo)識數(shù)據(jù)的信息作為輸入?yún)?shù),以供神經(jīng)網(wǎng)絡(luò)使用。
深度學(xué)習(xí)的成功取決于一個幸運(yùn)的事實(shí):精心調(diào)配并已初始化好的隨機(jī)梯度下降法(SGD)能夠很好地對LDNN進(jìn)行訓(xùn)練。這是有意義的,因?yàn)橐粋€神經(jīng)網(wǎng)絡(luò)的訓(xùn)練錯誤也是其權(quán)值的功能時,該錯誤是高度非凸的。當(dāng)進(jìn)行非凸優(yōu)化時,其結(jié)果是不可預(yù)知的;只有結(jié)果為凸是好的,非凸就是不好的。但SGD看起來似乎能對此做出改善。對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練是個NP困難,事實(shí)上要找出有著3個隱藏單元的神經(jīng)網(wǎng)絡(luò)最佳數(shù)據(jù)集是NP困難的。而SGD能在實(shí)際中解決該問題。這是深度學(xué)習(xí)的立足之本。
可以相當(dāng)自信地說,成功的LDNN訓(xùn)練依賴于數(shù)據(jù)的“簡單”關(guān)聯(lián),從而使LDNN不斷自我學(xué)習(xí)以解決數(shù)據(jù)的“復(fù)雜”關(guān)聯(lián)。對此我有著一個成功的實(shí)驗(yàn):訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)來解決奇偶問題是較困難的。我成功實(shí)現(xiàn)了25bits、29bits的檢驗(yàn),但從來沒有超過30bits(或許有人可以實(shí)現(xiàn),但我真的還沒有)。現(xiàn)在,我們知道奇偶問題是非常不穩(wěn)定的,它缺乏任何的線性關(guān)聯(lián):每個線性輸入與輸出是不關(guān)聯(lián)的,這對于神經(jīng)網(wǎng)絡(luò)是個問題,因?yàn)樵诔跏蓟瘯r神經(jīng)網(wǎng)絡(luò)是高度線性的(難道說我需要使用更大的初始權(quán)值?有關(guān)權(quán)值初始問題會在稍后講述)。所以我的假設(shè)是(很多專家也分享過),當(dāng)神經(jīng)網(wǎng)絡(luò)開始進(jìn)行學(xué)習(xí)時就已關(guān)注到輸入輸出高度關(guān)聯(lián),當(dāng)引入隱藏單元對此進(jìn)行監(jiān)測時,神經(jīng)網(wǎng)絡(luò)便可處理更復(fù)雜的關(guān)聯(lián)。我設(shè)想了更多樣的關(guān)聯(lián),包括簡單和復(fù)雜,一個網(wǎng)絡(luò)從一個關(guān)聯(lián)跳入更復(fù)雜的關(guān)聯(lián),這不正是機(jī)會主義登山者的真實(shí)寫照嗎?
泛化
雖然有關(guān)神經(jīng)網(wǎng)絡(luò)優(yōu)化還缺乏實(shí)質(zhì)性談資(除了又凸又無聊的局部最小值問題),相比之下泛化的討論則可有趣且具體得多。
例如以下這件往事:Valiant在1984年發(fā)表一篇名為“可學(xué)習(xí)理論”的著名論文,他簡單證明了如果給定有限的函數(shù)個數(shù),比方說N個,一旦有著比log N更多的訓(xùn)練案例而該增量是個很小的常量因子時,每次訓(xùn)練錯誤將會接近每次測試錯誤。顯然,如果所有的訓(xùn)練錯誤都接近它的測試錯誤,那么過度擬合基本上是不可能的(當(dāng)訓(xùn)練錯誤和測試錯誤之間差距太大的時候才會發(fā)生擬合。我也曾在Vapnik書中看過類似結(jié)論)。這個定理很容易證明,這里就不多說了。
但這個簡單的結(jié)果對任何神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)都有著非常重要的意義。假如有一個含有N個參數(shù)的神經(jīng)網(wǎng)絡(luò),每個參數(shù)都是32位float。那么當(dāng)一個神經(jīng)網(wǎng)絡(luò)被指定為32×N bits時,那么意味著不同的神經(jīng)網(wǎng)絡(luò)不會超過232?,甚至更少。也就是說,一旦有著超過32×N的訓(xùn)練樣本,我們不會過度擬合多少。這樣很好。理論上我們可以對參數(shù)進(jìn)行計數(shù)。更重要的是,如果我們確信每個權(quán)值僅需要4個bits,而其他都是噪值,那么訓(xùn)練樣本的數(shù)字必定是一個很小的常量因子4×N,而不是32×N。
結(jié)論
如果我們要使用一個LDNN來解決難題,就需要給予足夠的參數(shù)。所以我們需要一個超高質(zhì)量的標(biāo)記訓(xùn)練集,使之確保有足夠的信息來匹配所有的網(wǎng)絡(luò)連接。一旦得到了該訓(xùn)練集,我們應(yīng)該在這之上運(yùn)行SGD直到問題解決。如果神經(jīng)網(wǎng)絡(luò)是較大而深的,這是可實(shí)現(xiàn)的。
80年代以來的改變
過去,人們曾認(rèn)為神經(jīng)網(wǎng)絡(luò)可以解決“一切問題”。但最后為什么沒有成功呢?這里面有如下幾個原因。
- 過去計算機(jī)速度很慢,因此過去的神經(jīng)網(wǎng)絡(luò)是微型的,這導(dǎo)致性能的先天不足。換句話說,小型神經(jīng)網(wǎng)絡(luò)功能不強(qiáng)。
- 數(shù)據(jù)集很小。即使能奇跡般地訓(xùn)練LDNN,也缺乏足夠的大信息數(shù)據(jù)集來約束巨量的神經(jīng)網(wǎng)絡(luò)參數(shù)。所以失敗是不可避免的。
- 沒有人知道如何訓(xùn)練深度網(wǎng)絡(luò)。深度網(wǎng)絡(luò)很重要。當(dāng)前20-25個連續(xù)圈層是最好的對象識別網(wǎng)絡(luò)配置。一個兩層的神經(jīng)網(wǎng)絡(luò)注定在對象識別上是低效的。在過去人們認(rèn)為SGD不可能用來訓(xùn)練深度網(wǎng)絡(luò),因?yàn)楫?dāng)時認(rèn)為這是難以置信的。
科學(xué)發(fā)展是多么的有趣,特別是回首以往,會發(fā)現(xiàn)現(xiàn)在進(jìn)行深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練是小事一樁了。
實(shí)踐建議
好吧,或許你已經(jīng)躍躍欲試了。LDNN代表著現(xiàn)在也代表著未來,難道不想訓(xùn)練它?但傳言說LDNN很高深,這是真的嗎?過去或許是,但現(xiàn)在很多社區(qū)已經(jīng)做出努力和嘗試,只要把以下所述牢記于心,訓(xùn)練神經(jīng)網(wǎng)絡(luò)就不會太難。下面是有關(guān)社區(qū)的知識總結(jié),這很重要請仔細(xì)閱讀。
獲取數(shù)據(jù):確保要有高質(zhì)量的輸入/輸出數(shù)據(jù)集,這個數(shù)據(jù)集要足夠大、具有代表性以及擁有相對清楚的標(biāo)簽。缺乏數(shù)據(jù)集是很難成功的。
預(yù)處理:將數(shù)據(jù)進(jìn)行集中是非常重要的,也就是要使數(shù)據(jù)均值為0,從而使每個維度的每次變動為1。有時,當(dāng)輸入的維度隨量級排序變化時,最好使用那個維度的log(1+x)。基本上,重要的是要找到一個0值的可信編碼以及自然分界的維度。這樣做可使學(xué)習(xí)工作得更好。情況就是這樣的,因?yàn)闄?quán)值是通過公式來更新的:wij中的變化 \propto xidL/dyj(w表示從層x到層y的權(quán)值,L是損失函數(shù))。如果x的均值很大(例如100),那么權(quán)值的更新將會非常大,并且是相互關(guān)聯(lián)的,這使得學(xué)習(xí)變得低劣而緩慢。保持0均值和較小的方差是成功的關(guān)鍵因素。
批處理:在如今的計算機(jī)上每次只執(zhí)行一個訓(xùn)練樣本是很低效的。反之如果進(jìn)行的是128個例子的批處理,效率將大幅提高,因?yàn)槠漭敵隽渴欠浅?捎^的。事實(shí)上使用數(shù)量級為1的批處理效果不錯,這不僅可獲得性能的提升同時可降低過度擬合;不過這有可能會被大型批處理超越。但不要使用過大的批處理,因?yàn)橛锌赡軐?dǎo)致低效和過多過度擬合。所以我的建議是:根據(jù)硬件配置選取適合的批處理規(guī)模,量力而為會更加高效。
梯度歸一化:根據(jù)批處理的大小來拆分梯度。這是一個好主意,因?yàn)槿绻麑ε幚磉M(jìn)行倍增(或倍減),無需改變學(xué)習(xí)率(無論如何,不要太多)。
學(xué)習(xí)率計劃:從一個正常大小的學(xué)習(xí)率(LR)開始,朝著終點(diǎn)不斷縮小。
1LR的典型取值是0.1,令人驚訝的是,對于大量的神經(jīng)網(wǎng)絡(luò)問題來說,0.1是學(xué)習(xí)率的一個很好的值。通常學(xué)習(xí)率傾向于更小而非更大。使用一個驗(yàn)證集——一個不進(jìn)行訓(xùn)練的訓(xùn)練集子集,來決定何時降低學(xué)習(xí)率以及何時停止訓(xùn)練(例如當(dāng)驗(yàn)證集的錯誤開始增多的時候)。
學(xué)習(xí)率計劃的實(shí)踐建議:若發(fā)現(xiàn)驗(yàn)證集遭遇瓶頸,不妨將LR除以2(或5),然后繼續(xù)。最終,LR將會變得非常小,這也到了停止訓(xùn)練的時候了。這樣做可以確保在驗(yàn)證性能受到損害的時候,你不會擬合(或過度擬合)訓(xùn)練數(shù)據(jù)。降低LR是很重要的,通過驗(yàn)證集來控制LR是個正確的做法。
但最重要的是要關(guān)注學(xué)習(xí)率。一些研究人員(比如Alex Krizhevsky)使用的方法是,監(jiān)視更新范數(shù)和權(quán)值范數(shù)之間的比率。比率取值大約為10ˉ3。如果取值過小,那么學(xué)習(xí)會變得非常慢;如果取值過大,那么學(xué)習(xí)將會非常不穩(wěn)定甚至失敗。
權(quán)值初始化。關(guān)注權(quán)值在學(xué)習(xí)開始時的隨機(jī)初始化。
如果想偷懶,不妨試試0.02*randn(num_params)。這個范圍的值在許多不同的問題上工作得很好。當(dāng)然,更小(或更大)的值也值得一試。如果它工作得不好(例如是一個非常規(guī)的和/或非常深的神經(jīng)網(wǎng)絡(luò)架構(gòu)),那么需要使用init_scale/sqrt(layer_width)*randn來初始化每個權(quán)值矩陣。在這種情況下,init_scale應(yīng)該設(shè)置為0.1或者1,或者類似的值。
對于深度且循環(huán)的網(wǎng)絡(luò),隨機(jī)初始化是極其重要的。如果沒有處理好,那么它看起來就像沒有學(xué)習(xí)到任何東西。我們知道,一旦條件都設(shè)置好了,神經(jīng)網(wǎng)絡(luò)就會學(xué)習(xí)。
一個有趣的故事:多年來,研究人員相信SGD不能訓(xùn)練來自隨機(jī)初始化的深度神經(jīng)網(wǎng)絡(luò)。每次嘗試都以失敗告終。令人尷尬的是,他們沒有成功是因?yàn)槭褂谩靶〉碾S機(jī)權(quán)值”來進(jìn)行初始化,雖然小數(shù)值的做法在淺度網(wǎng)絡(luò)上工作得非常好,但在深度網(wǎng)絡(luò)上的表現(xiàn)一點(diǎn)也不好。當(dāng)網(wǎng)絡(luò)很深時,許多權(quán)值矩陣之間會進(jìn)行乘積,所以不好的結(jié)果會被放大。
但如果是淺度網(wǎng)絡(luò),SGD可以幫助我們解決該問題。
所以關(guān)注初始化是很有必要的。嘗試多種不同的初始化,努力就會得到回報。如果網(wǎng)絡(luò)完全不工作(即沒法實(shí)施),繼續(xù)改進(jìn)隨機(jī)初始化是正確的選擇。
如果正在訓(xùn)練RNN或者LSTM,要對梯度(記得梯度已除以批量大小)范數(shù)使用一個硬約束。像15或者5這樣的約束在我個人的實(shí)驗(yàn)中工作得很好。請將梯度除以批處理大小,再檢查一下它的范數(shù)是否超過15(或5)。如果超過了,將它縮小到15(或5)。這個小竅門在RNN和LSTM的訓(xùn)練中發(fā)揮著巨大作用,不這樣做的話,爆炸性的梯度將會導(dǎo)致學(xué)習(xí)失敗,最后不得不使用像1e-6這樣微小而無用的學(xué)習(xí)率。
數(shù)值梯度檢查:如果沒有使用過Theano或者Torch,梯度實(shí)現(xiàn)只能親力親為了。在實(shí)現(xiàn)梯度的時候很容易出錯,所以使用數(shù)值梯度檢查是至關(guān)重要的。這樣做會讓你對自己的代碼充滿信心。調(diào)整超級參數(shù)(比如學(xué)習(xí)率和初始化)是非常有價值的,因此好刀要用在刀刃上。
如果正在使用LSTM同時想在具有大范圍依賴的問題上訓(xùn)練它們,那么應(yīng)該將LSTM遺忘關(guān)口的偏差初始化為較大的值。默認(rèn)狀態(tài)下,遺忘關(guān)口是S型的全部輸入,當(dāng)權(quán)值很小時,遺忘關(guān)口會被設(shè)置為0.5,這只能對部分問題有效。這是對LSTM初始化的一個警示。
數(shù)據(jù)增加(Data augmentation):使用算法來增加訓(xùn)練實(shí)例數(shù)量是個有創(chuàng)意的做法。如果是圖像,那么應(yīng)該轉(zhuǎn)換和旋轉(zhuǎn)它們;如果是音頻,應(yīng)該將清晰的部分和所有類型的雜音進(jìn)行混合處理。數(shù)據(jù)添加是一門藝術(shù)(除非是在處理圖像),這需要一定的常識。
dropout:dropout提供了一個簡單的方法來提升性能。記得要調(diào)整退出率,而在測試時不要忘記關(guān)閉dropout,然后對權(quán)值求乘積(也就是1-dropout率)。當(dāng)然,要確保將網(wǎng)絡(luò)訓(xùn)練得更久一點(diǎn)。不同于普通訓(xùn)練,在進(jìn)入深入訓(xùn)練之后,驗(yàn)證錯誤通常會有所增加。dropout網(wǎng)絡(luò)會隨著時間推移而工作得越來越好,所以耐心是關(guān)鍵。
綜合(Ensembling)。訓(xùn)練10個神經(jīng)網(wǎng)絡(luò),然后對其預(yù)測數(shù)據(jù)進(jìn)行平均。該做法雖然簡單,但能獲得更直接、更可觀的性能提升。有人可能會困惑,為什么平均會這么有效?不妨用一個例子來說明:假如兩個分類器的錯誤率為70%,如果其中一個的正確率保持較高,那么平均后的預(yù)測會更接近正確結(jié)果。這對于可信網(wǎng)絡(luò)的效果會更加明顯,當(dāng)網(wǎng)絡(luò)可信時結(jié)果是對的,不可信時結(jié)果是錯的。
以上13點(diǎn)意見涵蓋了成功訓(xùn)練LDNN的一切,希望我沒有遺漏。
最后總結(jié)如下:
- LDNN是非常強(qiáng)大的;
- 如果有臺高性能計算機(jī),LDNN是可訓(xùn)練的;
- 如果有一個超高質(zhì)量的數(shù)據(jù)集,我們可以為任務(wù)找到最好的LDNN;
- LDNN可以解決問題,或者說至少對解決問題有所幫助。
寫在最后
未來會是怎樣的呢?預(yù)測未來顯然是困難的,但一般而言,能夠執(zhí)行更多計算的模型也許會非常好。神經(jīng)圖靈機(jī)在這個方向上邁出了非常重要的一步。其他問題,包括無監(jiān)督學(xué)習(xí),截止2015年1月8日,于我而言還僅是冰山一角。使用無監(jiān)督學(xué)習(xí)來學(xué)習(xí)復(fù)雜數(shù)據(jù)是個很好的嘗試。路漫漫其修遠(yuǎn)兮,我們?nèi)孕枧Α?
總結(jié)
以上是生活随笔為你收集整理的Google研究员Ilya Sutskever:成功训练LDNN的13点建议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性判别分析(Linear Discri
- 下一篇: 深度学习-LeCun、Bengio和Hi