8月初的蒙特利爾深度學(xué)習(xí)暑期班,由Yoshua Bengio、 Leon Bottou等大神組成的講師團(tuán)奉獻(xiàn)了10天精彩的講座,劍橋大學(xué)自然語言處理與信息檢索研究組副研究員Marek Rei參加了本次課程,在本文中,他精煉地總結(jié)了學(xué)到的26個(gè)有代表性的知識(shí)點(diǎn),包括分布式表示,tricks的技巧,對抗樣本的訓(xùn)練,Neural Machine Translation,以及Theano、Nvidia Digits等,非常具有參考價(jià)值。 八月初,我有幸有機(jī)會(huì)參加了蒙特利爾深度學(xué)習(xí)暑期學(xué)校的課程,由最知名的神經(jīng)網(wǎng)絡(luò)研究人員組成的為期10天的講座。在此期間,我學(xué)到了很多,用一篇博客也說不完。我不會(huì)用60個(gè)小時(shí)的時(shí)間來講解神經(jīng)網(wǎng)絡(luò)知識(shí)的價(jià)值,而會(huì)以段落的方式來總結(jié)我學(xué)到的一些有趣的知識(shí)點(diǎn)。 在撰寫本文時(shí),暑期學(xué)校網(wǎng)站仍可以訪問,并附有全部的演示文稿。所有的資料和插圖都是來自原作者。暑期學(xué)校的講座已經(jīng)錄制成了視頻,它們也可能會(huì)被上傳到網(wǎng)站上。 好了,我們開始吧。 1、分布式表示(distributed representations)的需要 在Yoshua Bengio開始的講座上,他說“這是我重點(diǎn)講述的幻燈片”。下圖就是這張幻燈片: 假設(shè)你有一個(gè)分類器,需要分類人們是男性還是女性,佩戴眼鏡還是不佩戴眼鏡,高還是矮。如果采用非分布式表示,你就在處理2*2*2=8類人。為訓(xùn)練精準(zhǔn)度高的分類器,你需要為這8類收集足夠的訓(xùn)練數(shù)據(jù)。但是,如果采用分布式表示,每一個(gè)屬性都會(huì)在其他不同維度中有所展現(xiàn)。這意味著即使分類器沒有碰到佩戴眼鏡的高個(gè)子,它也能成功地識(shí)別他們,因?yàn)樗鼘W(xué)會(huì)了從其他樣本中單獨(dú)學(xué)習(xí)識(shí)別性別,佩戴眼鏡與否和身高。 2、局部最小在高維度不是問題 Yoshua Bengio的團(tuán)隊(duì)通過實(shí)驗(yàn)發(fā)現(xiàn),優(yōu)化高維度神經(jīng)網(wǎng)絡(luò)參數(shù)時(shí),就沒有局部最小。相反,在某些維度上存在鞍點(diǎn),它們是局部最小的,但不是全局最小。這意味著,在這些點(diǎn)訓(xùn)練會(huì)減慢許多,直到網(wǎng)絡(luò)知道如何離開這些點(diǎn),但是我們愿意等足夠長的時(shí)間的話,網(wǎng)絡(luò)總會(huì)找到方法的。 下圖展示了在網(wǎng)絡(luò)訓(xùn)練過程中,兩種狀態(tài)的震動(dòng)情況:靠近鞍點(diǎn)和離開鞍點(diǎn)。 給定一個(gè)指定的維度,小概率p表示點(diǎn)是局部最小的可能性,但不是此維度上全局最小。在1000維度空間里的點(diǎn)不是局部最小的概率和就會(huì)是,這是一個(gè)非常小的值。但是,在某些維度里,這個(gè)點(diǎn)是局部最小的概率實(shí)際上比較高。而且當(dāng)我們同時(shí)得到多維度下的最小值時(shí),訓(xùn)練可能會(huì)停住直到找到正確的方向。 另外,當(dāng)損失函數(shù)接近全局最小時(shí),概率p會(huì)增加。這意味著,如果我們找到了真正的局部最小,那么它將非常接近全局最小,這種差異是無關(guān)緊要的。 3、導(dǎo)函數(shù),導(dǎo)函數(shù),導(dǎo)函數(shù) Leon Bottou列出了一些有用的表格,關(guān)于激活函數(shù),損失函數(shù),和它們相應(yīng)的導(dǎo)函數(shù)。我將它們先放在這里以便后續(xù)使用。 更新:根據(jù)評論指出,斜率公式中的最小最大函數(shù)應(yīng)該調(diào)換。 4、權(quán)重初始化策略 目前在神經(jīng)網(wǎng)絡(luò)中建議使用的權(quán)重初始化策略是將值歸一化到范圍[-b,b],b為: 由Hugo Larochelle推薦,Glorot和Bengio發(fā)布(2010)。 5、神經(jīng)網(wǎng)絡(luò)訓(xùn)練技巧 Hugo Larochelle給出的一些實(shí)用建議:
6、梯度檢測 如果你手動(dòng)實(shí)現(xiàn)了反向傳播算法但是它不起作用,那么有99%的可能是梯度計(jì)算中存在Bug。那么就用梯度檢測來定位問題。主要思想是運(yùn)用梯度的定義:如果我們稍微增加某個(gè)權(quán)重值,模型的誤差將會(huì)改變多少。 這里有更詳細(xì)的解釋:Gradient checking and advanced optimization。 7、動(dòng)作跟蹤 人體動(dòng)作跟蹤可以達(dá)到非常高的精準(zhǔn)度。下圖是來自Graham Taylor等人(2010)發(fā)表的論文Dynamical Binary Latent Variable Models for 3D Human Pose Tracking中的例子。該方法使用的是條件受限的玻爾茲曼機(jī)。 8、使用語法還是不使用語法?(即“需要考慮語法嗎?”) Chris Manning和Richard Socher已經(jīng)投入了大量的精力來開發(fā)組合模型,它將神經(jīng)嵌入與更多傳統(tǒng)的分析方法組合起來。這在Recursive Neural Tensor Network這篇論文中達(dá)到了極致,它使用加法和乘法的互動(dòng)將詞義與語法解析樹組合。 然后,該模型被Paragraph向量(Le和Mikolov,2014)打敗了(以相當(dāng)大的差距),Paragraph向量對語句結(jié)構(gòu)和語法完全不了解。Chris Manning將這個(gè)結(jié)果稱作“創(chuàng)造‘好的’組合向量的一次失敗”。 然而,最近越來越多的使用語法解析樹的工作成果改變了那一結(jié)果。Irsoy和Cardie(NIPS,2014)在多維度上使用更深層的網(wǎng)絡(luò)成功地打敗了Paragraph向量。最后,Tai等人(ACL,2015)將LSTM網(wǎng)絡(luò)與語法解析樹結(jié)合,進(jìn)一步改進(jìn)了結(jié)果。 這些模型在斯坦福5類情感數(shù)據(jù)集上結(jié)果的精準(zhǔn)度如下: 從目前來看,使用語法解析樹的模型比簡單方法更勝一籌。我很好奇下一個(gè)不基于語法的方法何時(shí)出現(xiàn),它又將會(huì)如何推動(dòng)這場比賽。畢竟,許多神經(jīng)模型的目標(biāo)不是丟棄底層的語法,而是隱式的將它捕獲在同一個(gè)網(wǎng)絡(luò)中。 9、分布式與分配式 Chris Manning本人澄清了這兩個(gè)詞之間的區(qū)別。 分布式:在若干個(gè)元素中的連續(xù)激活水平。比如密集詞匯嵌入,而不是1-hot向量。 分配式:表示的是使用上下文。word2vec是分配式的,當(dāng)我們使用詞匯的上下文來建模語義時(shí),基于計(jì)數(shù)的詞匯向量也是分配式的。 10、依賴狀態(tài)分析 Penn Treebank中的依賴分析器比較:
最后一個(gè)結(jié)果是從谷歌“提取出所有stops”得到的,將海量數(shù)據(jù)源來訓(xùn)練斯坦福神經(jīng)語法解析器。 11、Theano 我之前對Theano有所了解,但是我在暑期學(xué)校學(xué)習(xí)到了更多。而且它實(shí)在是太棒了。 由于Theano起源自蒙特利爾,直接請教Theano的開發(fā)者會(huì)很有用。 關(guān)于它大多數(shù)的信息都可以在網(wǎng)上找到,以交互式Python教程的形式。 12、Nvidia Digits 英偉達(dá)有一個(gè)叫做Digits的工具包,它可以訓(xùn)練并可視化復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型而不需要寫任何代碼。并且他們正在出售DevBox,這是一款定制機(jī)器,可以運(yùn)行Digits和其他深度學(xué)習(xí)軟件(Theano,Caffe等)。它有4塊Titan X GPU,目前售價(jià)15,000美元。 13、Fuel Fuel是一款管理數(shù)據(jù)集迭代的工具,它可以將數(shù)據(jù)集切分成若干小部分,進(jìn)行shuffle操作,執(zhí)行多種預(yù)處理步驟等。對于一些建立好的數(shù)據(jù)集有預(yù)置的功能,比如MNIST,CIFAR-10和谷歌的10億詞匯語料庫。它主要是與Blocks結(jié)合使用,Blocks是使用Theano簡化網(wǎng)絡(luò)結(jié)構(gòu)的工具。 14、多模型語言學(xué)規(guī)律 記得“國王-男性+女性=女王”嗎?事實(shí)上圖片也能這么處理(Kiros等人,2015)。
15、泰勒級(jí)數(shù)逼近 當(dāng)我們在點(diǎn)處,向移動(dòng)時(shí),那么我們可以通過計(jì)算導(dǎo)函數(shù)來估計(jì)函數(shù)在新位置的值,我們將使用泰勒級(jí)數(shù)逼近:
同樣地,當(dāng)我們將參數(shù)更新到時(shí),我們可以估計(jì)損失函數(shù):
其中g(shù)是對θ的導(dǎo)數(shù),H是對θ的二階Hessian導(dǎo)數(shù)。 這是二階泰勒逼近,但是我們可以通過采用更高階導(dǎo)數(shù)來增加準(zhǔn)確性 16、計(jì)算強(qiáng)度 Adam Coates 提出了一種分析GPU上矩陣操作速度的策略。這是一個(gè)簡化的模型,可以顯示花在讀取內(nèi)存或者進(jìn)行計(jì)算的時(shí)間。假設(shè)你可以同時(shí)計(jì)算這兩個(gè)值,那么我們就可以知道那一部分耗費(fèi)時(shí)間更多。 假設(shè)我們將矩陣和一個(gè)向量相乘:
如果M=1024,N=512,那么我們需要讀取和存儲(chǔ)的字節(jié)數(shù)是:
計(jì)算次數(shù)是:
如果我們有塊6TFLOP/s的GPU,帶寬300GB/s的內(nèi)存,那么運(yùn)行總時(shí)間是:
這意味著處理過程的瓶頸在于從內(nèi)存中復(fù)制或向內(nèi)存中寫入消耗的7μs,而且使用更快的GPU也不會(huì)提升速度了。你可能會(huì)猜到,在進(jìn)行矩陣-矩陣操作時(shí),當(dāng)矩陣/向量變大時(shí),這一情況會(huì)有所好轉(zhuǎn)。 Adam同樣給出了計(jì)算操作強(qiáng)度的算法:
在之前的場景中,強(qiáng)度是這樣的:
低強(qiáng)度意味著系統(tǒng)受內(nèi)存大小的牽制,高強(qiáng)度意味著受GPU速度的牽制。這可以被可視化,由此來決定應(yīng)該改進(jìn)哪個(gè)方面來提升整體系統(tǒng)速度,并且可以觀察最佳點(diǎn)的位置。
17、小批量 繼續(xù)說說計(jì)算強(qiáng)度,增加網(wǎng)絡(luò)強(qiáng)度的一種方式(受計(jì)算而不是內(nèi)存限制)是,將數(shù)據(jù)分成小批量。這可以避免一些內(nèi)存操作,GPU也擅長并行處理大矩陣計(jì)算。 然而,增加批次的大小的話可能會(huì)對訓(xùn)練算法有影響,并且合并需要更多時(shí)間。重要的是要找到一個(gè)很好的平衡點(diǎn),以在最短的時(shí)間內(nèi)獲得最好的效果。
18、對抗樣本的訓(xùn)練 據(jù)最近信息顯示,神經(jīng)網(wǎng)絡(luò)很容易被對抗樣本戲弄。在下面的案例中,左邊的圖片被正確分類成金魚。但是,如果我們加入中間圖片的噪音模式,得到了右邊這張圖片,分類器認(rèn)為這是一張雛菊的圖片。圖片來自于Andrej Karpathy的博客 “Breaking Linear Classifiers on ImageNet”,你可以從那了解更多。
噪音模式并不是隨機(jī)選擇的,而是為了戲弄網(wǎng)絡(luò)通過精心計(jì)算得到的。但是問題依然存在:右邊的圖像顯然是一張金魚而不是雛菊。 顯然,像集成模型,多掃視后投票和無監(jiān)督預(yù)訓(xùn)練的策略都不能解決這個(gè)漏洞。使用高度正則化會(huì)有所幫助,但會(huì)影響判斷不含噪聲圖像的準(zhǔn)確性。 Ian Goodfellow提出了訓(xùn)練這些對抗樣本的理念。它們可以自動(dòng)的生成并添加到訓(xùn)練集中。下面的結(jié)果表明,除了對對抗樣本有所幫助之外,這也提高了原始樣本上的準(zhǔn)確性。
最后,我們可以通過懲罰原始預(yù)測分布與對抗樣本上的預(yù)測分布之間的KL發(fā)散來進(jìn)一步改善結(jié)果。這將優(yōu)化網(wǎng)絡(luò)使之更具魯棒性,并能夠?qū)ο嗨疲▽沟模﹫D像預(yù)測相似類分布。 19、萬事萬物皆為語言建模 Phil Blunsom 提出,幾乎所有的NLP都可以構(gòu)建成語言模型。我們可以通過這種方式實(shí)現(xiàn),將輸出與輸入連接,并嘗試預(yù)測整個(gè)序列的概率。 翻譯:
問答:
對話:
后兩個(gè)必須建立在對世界已知事物了解的基礎(chǔ)上。第二部分甚至可以不是詞語,也可以是一些標(biāo)簽或者結(jié)構(gòu)化輸出,比如依賴關(guān)系。 20、SMT開頭難 當(dāng)Frederick Jelinek 和他在IBM的團(tuán)隊(duì)在1988年提交了關(guān)于統(tǒng)計(jì)機(jī)器翻譯第一批之一的論文時(shí),他們的到了如下的匿名評審:
正如作者提到的,早在1949年Weaver就肯定了統(tǒng)計(jì)(信息論)方法進(jìn)行機(jī)器翻譯的有效性。而在1950年被普遍認(rèn)為是錯(cuò)誤的(參見Hutchins, MT – Past, Present, Future, Ellis Horwood, 1986, p. 30ff 和參考文獻(xiàn))。計(jì)算機(jī)的暴力解決并不是科學(xué)。該論文已經(jīng)超出了COLING的范圍。 21、神經(jīng)機(jī)器翻譯(Neural Machine Translation)現(xiàn)狀 顯然,一個(gè)非常簡單的神經(jīng)網(wǎng)絡(luò)模型可以產(chǎn)生出奇好的結(jié)果。下圖是Phil Blunsom的一張幻燈片,將中文翻譯成英文的例子:
在這個(gè)模型中,漢字向量簡單地相加在一起形成一個(gè)語句向量。解碼器包含一個(gè)條件性語言模型,將語句向量和兩個(gè)最近生成的英語單詞中的向量結(jié)合,然后生成譯文中下一個(gè)單詞。 然而,神經(jīng)模型仍然沒有將傳統(tǒng)機(jī)器翻譯系統(tǒng)性能發(fā)揮到極致。但是它們已經(jīng)相當(dāng)接近了。Sutskever等人(2014)在“Sequence to Sequence Learning with Neural Networks”中的結(jié)果:
更新:@stanfordnlp指出,最近一些結(jié)果表明,神經(jīng)模型確實(shí)會(huì)將傳統(tǒng)機(jī)器翻譯系統(tǒng)性能發(fā)揮到極致。查看這篇論文“Effective Approaches to Attention-based Neural Machine Translation”(Luong等人,2015) 22、偉大人物的分類例子 Richard Socher演示了偉大人物圖像分類例子,你可以自己上傳圖像來訓(xùn)練。我訓(xùn)練了一個(gè)可以識(shí)別愛迪生和愛因斯坦(不能找到足夠的特斯拉個(gè)人相片)的分類器。每個(gè)類有5張樣本圖片,對每個(gè)類測試輸出圖像。似乎效果不錯(cuò)。
23、優(yōu)化梯度更新 Mark Schmidt給出了兩份關(guān)于在不同情況下數(shù)值優(yōu)化的報(bào)告。 在確定性梯度方法中,我們在整個(gè)數(shù)據(jù)集上計(jì)算了梯度,然后更新它。迭代成本與數(shù)據(jù)集大小呈線性關(guān)系。 在隨機(jī)梯度方法中,我們在一個(gè)數(shù)據(jù)點(diǎn)上計(jì)算了梯度,然后更新它。迭代成本與數(shù)據(jù)集大小無關(guān)。 隨機(jī)梯度下降中的每次迭代要快許多,但是它通常需要更多的迭代來訓(xùn)練網(wǎng)絡(luò),如下圖所示:
為了達(dá)到這兩者最好效果,我們可以用批量處理。確切的說,我們可以對數(shù)據(jù)集先進(jìn)行隨機(jī)梯度下降,為快速達(dá)到右邊的部分,然后開始增加批大小。梯度誤差隨著批大小的增加而減少,然而最終迭代成本大小還是會(huì)取決于數(shù)據(jù)集大小。 隨機(jī)平均梯度(SAG)可以避免這樣的情況,每次迭代只有1個(gè)梯度,從而得到線性收斂速度。不幸的是,這對于大型神經(jīng)網(wǎng)絡(luò)是不可行的,因?yàn)樗鼈冃枰涀∶恳粋€(gè)數(shù)據(jù)點(diǎn)的梯度更新,這就會(huì)耗費(fèi)大量內(nèi)存。隨機(jī)方差降低梯度(SVRG)可以減少這種內(nèi)存耗費(fèi)的情況,并且每次迭代(加上偶然全部通過)只需要兩次梯度計(jì)算。 Mark表示,他的一位學(xué)生實(shí)現(xiàn)了各種優(yōu)化方法(AdaGrad,momentum,SAG等)。當(dāng)問及在黑盒神經(jīng)網(wǎng)絡(luò)系統(tǒng)中他會(huì)使用什么方法時(shí),這位學(xué)生給出了兩種方法:Streaming SVRG(Frostig等人,2015),和一種他們還沒發(fā)布的方法。 24、Theano分析 如果你將“profile=true”賦值給THEANO_FLAGS,它將會(huì)分析你的程序,然后顯示花在每個(gè)操作上的時(shí)間。對尋找性能瓶頸很有幫助。 25、對抗性網(wǎng)絡(luò)框架 繼Ian Goodfellow關(guān)于對抗性樣本的演講之后,Yoshua Bengio 談到了用兩個(gè)系統(tǒng)相互競爭的案例。 系統(tǒng)D是一套判別性系統(tǒng),它的目的是分類真實(shí)數(shù)據(jù)和人工生成的數(shù)據(jù)。 系統(tǒng)G是一套生成系統(tǒng),它試圖生成可以讓系統(tǒng)D錯(cuò)誤分類成真實(shí)數(shù)據(jù)的數(shù)據(jù)。 當(dāng)我們訓(xùn)練一個(gè)系統(tǒng)時(shí),另外一個(gè)系統(tǒng)也要相應(yīng)的變的更好。在實(shí)驗(yàn)中這的確有效,不過步長必須保持十分小,以便于系統(tǒng)D可以更上G的速度。下面是“Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks”中的一些例子——這個(gè)模型的一個(gè)更高級(jí)版本,它試圖生成教堂的圖片。
26、arXiv.org編號(hào) arXiv編號(hào)包含著論文提交的年份和月份,后面跟著序列號(hào),比如論文1508.03854表示編號(hào)3854的論文在2015年8月份提交。很高興知道這個(gè)。 原文鏈接:26 THINGS I LEARNED IN THE DEEP LEARNING SUMMER SCHOOL(譯者/劉翔宇 審校/趙屹華、朱正貴、李子健 責(zé)編/仲浩) 關(guān)于譯者: 劉翔宇,中通軟開發(fā)工程師,關(guān)注機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)、模式識(shí)別。 |
|
|