人工智能的浪潮正在席卷全球,研究領(lǐng)域也在不斷擴(kuò)大,深度學(xué)習(xí)和機(jī)器學(xué)習(xí)等名詞圍繞在我們周圍。又許多的創(chuàng)業(yè)者想要從事AI行業(yè),深度學(xué)習(xí)是一個重要的學(xué)習(xí)領(lǐng)域。
近日,軟件工程師 James Le 在 Medium 上發(fā)表了一篇題為《The 10 Deep Learning Methods AI Practitioners Need to Apply》的文章,從反向傳播到最大池化最后到遷移學(xué)習(xí),他在文中分享了主要適用于卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò)的10大深度學(xué)習(xí)方法。機(jī)器之心對本文進(jìn)行了編譯,原文鏈接請見文末。
過去十年來,人們對機(jī)器學(xué)習(xí)興趣不減。你幾乎每天都會在計(jì)算機(jī)科學(xué)程序、行業(yè)會議和華爾街日報(bào)上看到機(jī)器學(xué)習(xí)。對于所有關(guān)于機(jī)器學(xué)習(xí)的討論,很多人把機(jī)器學(xué)習(xí)能做什么與希望其做什么混為一談。從根本上說,機(jī)器學(xué)習(xí)就是使用算法從原始數(shù)據(jù)中提取信息,并通過模型進(jìn)行實(shí)現(xiàn)。我們使用這個模型來推斷我們尚未建模的其他數(shù)據(jù)。
神經(jīng)網(wǎng)絡(luò)屬于機(jī)器學(xué)習(xí)模型的一種,已出現(xiàn) 50 多年,其基本單元即受到哺乳動物大腦中生物神經(jīng)元啟發(fā)的非線性變換節(jié)點(diǎn)。神經(jīng)元之間的連接也是仿效生物大腦,并在時間中通過訓(xùn)練推移發(fā)展。
1980 年代中期和 1990 年代早期,神經(jīng)網(wǎng)絡(luò)的很多重要架構(gòu)取得重大進(jìn)展。然而,獲得良好結(jié)果所需的時間和數(shù)據(jù)量卻阻礙了其應(yīng)用,因此人們一時興趣大減。2000 年早期,計(jì)算能力呈指數(shù)級增長,業(yè)界見證了之前不可能實(shí)現(xiàn)的計(jì)算技術(shù)的「寒武紀(jì)爆炸」。深度學(xué)習(xí)作為該領(lǐng)域的一個重要競爭者是在這個十年的爆炸性計(jì)算增長中脫穎而出,它贏得了許多重要的機(jī)器學(xué)習(xí)競賽。深度學(xué)習(xí)的熱度在 2017 年達(dá)到峰值,你在機(jī)器學(xué)習(xí)的所有領(lǐng)域都可以看到深度學(xué)習(xí)。
下面是一個作業(yè)的結(jié)果,一個通過相似性聚類的詞向量的 t-SNE 投影。
最近,我已經(jīng)開始閱讀相關(guān)學(xué)術(shù)論文。根據(jù)我的研究,下面是一些對該領(lǐng)域發(fā)展產(chǎn)生重大影響的著作:
紐約大學(xué)的《Gradient-Based Learning Applied to Document Recognition》(1998),介紹了機(jī)器學(xué)習(xí)領(lǐng)域的卷積神經(jīng)網(wǎng)絡(luò):http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
多倫多大學(xué)的《Deep Boltzmann Machines》(2009),它展現(xiàn)了一個用于玻爾茲曼機(jī)的、包含多個隱藏變量層的新學(xué)習(xí)算法:http://proceedings.mlr.press/v5/salakhutdinov09a/salakhutdinov09a.pdf
斯坦福大學(xué)和谷歌的《Building High-Level Features Using Large-Scale Unsupervised Learning》(2012),它解決了只從無標(biāo)注數(shù)據(jù)中構(gòu)建高階、特定類別的特征探測器的問題:http://icml.cc/2012/papers/73.pdf
伯克利大學(xué)的《DeCAF—A Deep Convolutional Activation Feature for Generic Visual Recognition》(2013),它推出了 DeCAF,一個深度卷積激活功能和所有相關(guān)網(wǎng)絡(luò)參數(shù)的開源實(shí)現(xiàn),能夠幫助視覺研究者在一系列視覺概念學(xué)習(xí)范例中開展深度表征實(shí)驗(yàn):http://proceedings.mlr.press/v32/donahue14.pdf
DeepMind 的《Playing Atari with Deep Reinforcement Learning》(2016),它展示了借助強(qiáng)化學(xué)習(xí)直接從高維感知輸入中成功學(xué)習(xí)控制策略的首個深度學(xué)習(xí)模型:https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf
在研究和學(xué)習(xí)了大量知識之后,我想分享 10 個強(qiáng)大的深度學(xué)習(xí)方法,工程師可用其解決自己的機(jī)器學(xué)習(xí)問題。開始之前,讓我們定義一下什么是深度學(xué)習(xí)。深度學(xué)習(xí)是很多人面臨的一個挑戰(zhàn),因?yàn)檫^去十年來它在緩慢改變著形式。為了形象化地界定深度學(xué)習(xí),下圖給出了人工智能、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)三者之間的關(guān)系。
?
人工智能領(lǐng)域最為廣泛,已存在 60+ 年。深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個子領(lǐng)域,機(jī)器學(xué)習(xí)是人工智能的一個子領(lǐng)域。深度學(xué)習(xí)區(qū)分于傳統(tǒng)的前饋多層網(wǎng)絡(luò)的原因通常有以下幾點(diǎn):
更多的神經(jīng)元
層之間更復(fù)雜的連接方式
訓(xùn)練算力的「寒武紀(jì)爆炸」
自動特征提取
當(dāng)我說「更多的神經(jīng)元」,我的意思是神經(jīng)元數(shù)目逐年增長以表達(dá)更復(fù)雜的模型。層也從多層網(wǎng)絡(luò)中完全連接的每層發(fā)展到卷積神經(jīng)網(wǎng)絡(luò)中層之間的局部連接的神經(jīng)元補(bǔ)丁,以及與循環(huán)神經(jīng)網(wǎng)絡(luò)中的同一神經(jīng)元(除了與前一層的連接之外)的周期性連接。
接著深度學(xué)習(xí)可被定義為下面四個基本網(wǎng)絡(luò)架構(gòu)之一中的帶有大量參數(shù)和層的神經(jīng)網(wǎng)絡(luò):
無監(jiān)督預(yù)訓(xùn)練網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)
循環(huán)神經(jīng)網(wǎng)絡(luò)
遞歸神經(jīng)網(wǎng)絡(luò)
本文將主要介紹后面 3 個架構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)基本是一個標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò),通過共享權(quán)重在整個空間擴(kuò)展。卷積神經(jīng)網(wǎng)絡(luò)被設(shè)計(jì)為通過在內(nèi)部卷積來識別圖像,可看到已識別圖像上物體的邊緣。循環(huán)神經(jīng)網(wǎng)絡(luò)通過將邊緣饋送到下一個時間步而不是在同一時間步中進(jìn)入下一層,從而實(shí)現(xiàn)整個時間上的擴(kuò)展。循環(huán)神經(jīng)網(wǎng)絡(luò)被設(shè)計(jì)用來識別序列,比如語音信號或文本序列,其內(nèi)部循環(huán)可存儲網(wǎng)絡(luò)中的短時記憶。遞歸神經(jīng)網(wǎng)絡(luò)更像是一個分層網(wǎng)絡(luò),其中輸入序列沒有真正的時間維度,但輸入必須以樹狀方式進(jìn)行分層處理。以下 10 種方法可被用于上述所有架構(gòu)。
1. 反向傳播
反向傳播簡單地說就是一種計(jì)算函數(shù)(在神經(jīng)網(wǎng)絡(luò)中為復(fù)合函數(shù)形式)的偏導(dǎo)數(shù)(或梯度)的方法。當(dāng)使用基于梯度的方法(梯度下降只是其中一種)求解優(yōu)化問題的時候,需要在每一次迭代中計(jì)算函數(shù)的梯度。
在神經(jīng)網(wǎng)絡(luò)中,目標(biāo)函數(shù)通常是復(fù)合函數(shù)的形式。這時如何計(jì)算梯度?有兩種方式:(i)解析微分(Analytic differentiation),函數(shù)的形式是已知的,直接使用鏈?zhǔn)椒▌t計(jì)算導(dǎo)數(shù)就可以。(ii)利用有限差分的近似微分(Approximate differentiation using finite difference),這種方法的運(yùn)算量很大,因?yàn)楹瘮?shù)計(jì)算量(number of function evaluation)等于 O(N),其中 N 是參數(shù)數(shù)量。相比于解析微分,運(yùn)算量大得多。有限差分通常在調(diào)試的時候用于驗(yàn)證反向傳播的實(shí)現(xiàn)。
2. 隨機(jī)梯度下降
理解梯度下降的一種直觀的方法是想象一條河流從山頂順流而下的路徑。梯度下降的目標(biāo)正好就是河流力爭實(shí)現(xiàn)的目標(biāo)—即,到達(dá)最低點(diǎn)(山腳)。
假設(shè)山的地形使得河流在到達(dá)最低點(diǎn)之前不需要做任何停留(最理想的情況,在機(jī)器學(xué)習(xí)中意味著從初始點(diǎn)到達(dá)了全局最小/最優(yōu)解)。然而,也存在有很多凹點(diǎn)的地形,使得河流在其路徑中途停滯下來。在機(jī)器學(xué)習(xí)的術(shù)語中,這些凹點(diǎn)被稱為局部極小解,是需要避免的情況。有很多種方法能解決這種問題(本文未涉及)。
因此,梯度下降傾向于停滯在局部極小解,這取決于地形((或機(jī)器學(xué)習(xí)中的函數(shù)))的性質(zhì)。但是,當(dāng)山地的地形是一種特殊類型的時候,即碗形地貌,在機(jī)器學(xué)習(xí)中稱為凸函數(shù),算法能保證找到最優(yōu)解。凸函數(shù)是機(jī)器學(xué)習(xí)優(yōu)化中最想遇到的函數(shù)。而且,從不同的山頂(初始點(diǎn))出發(fā),到達(dá)最低點(diǎn)之前的路徑也是不同的。類似地,河流的流速(梯度下降算法中的學(xué)習(xí)率或步長)的不同也會影響路徑的形態(tài)。這些變量會影響梯度下降是困在局域最優(yōu)解還是避開它們。
3. 學(xué)習(xí)率衰減
調(diào)整隨機(jī)梯度下降優(yōu)化過程的學(xué)習(xí)率可以提升性能并減少訓(xùn)練時間,稱為學(xué)習(xí)率退火(annealing)或適應(yīng)性學(xué)習(xí)率。最簡單的也可能是最常用的訓(xùn)練中的學(xué)習(xí)率調(diào)整技術(shù)是隨時間降低學(xué)習(xí)率。這有益于在訓(xùn)練剛開始的時候使用更大的學(xué)習(xí)率獲得更大的變化,并在后期用更小的學(xué)習(xí)率對權(quán)重進(jìn)行更精細(xì)的調(diào)整。
兩種簡單常用的學(xué)習(xí)率衰減方法如下:
隨 epoch 的增加而降低學(xué)習(xí)率;
在特定的 epoch 間斷地降低學(xué)習(xí)率。
4. dropout
擁有大量參數(shù)的深度神經(jīng)網(wǎng)絡(luò)是很強(qiáng)大的機(jī)器學(xué)習(xí)系統(tǒng)。然而,這樣的網(wǎng)絡(luò)有很嚴(yán)重的過擬合問題。而且大型網(wǎng)絡(luò)的運(yùn)行速度很慢,使得在測試階段通過結(jié)合多個不同大型神經(jīng)網(wǎng)絡(luò)的預(yù)測解決過擬合的過程也變得很慢。dropout 正是針對這個問題應(yīng)用的技術(shù)。
其關(guān)鍵的思想是在訓(xùn)練過程中隨機(jī)刪除神經(jīng)網(wǎng)絡(luò)的單元和相應(yīng)的連接,從而防止過擬合。在訓(xùn)練過程中,dropout 將從指數(shù)級數(shù)量的不同的稀疏網(wǎng)絡(luò)中采樣。在測試階段,很容易通過用單 untwined 網(wǎng)絡(luò)(有更小的權(quán)重)將這些稀疏網(wǎng)絡(luò)的預(yù)測取平均而逼近結(jié)果。這能顯著地降低過擬合,相比其它的正則化方法能得到更大的性能提升。dropout 被證明在監(jiān)督學(xué)習(xí)任務(wù)比如計(jì)算機(jī)視覺、語音識別、文本分類和計(jì)算生物學(xué)中能提升神經(jīng)網(wǎng)絡(luò)的性能,并在多個基準(zhǔn)測試數(shù)據(jù)集中達(dá)到頂尖結(jié)果。
5. 最大池化
最大池化是一種基于樣本的離散化方法,目標(biāo)是對輸入表征(圖像、隱藏層的輸出矩陣,等)進(jìn)行下采樣,降低維度,并允許假設(shè)包含在子區(qū)域中的被丟棄的特征。
通過提供表征的抽象形式,這種方法在某種程度上有助于解決過擬合。同樣,它也通過減少學(xué)習(xí)參數(shù)的數(shù)量和提供基本的內(nèi)部表征的轉(zhuǎn)換不變性減少了計(jì)算量。最大池化通過在初始表征的子區(qū)域(通常是非重疊的)取最大值而抽取特征與防止過擬合。
6. 批量歸一化
神經(jīng)網(wǎng)絡(luò)(包括深度網(wǎng)絡(luò))通常需要仔細(xì)調(diào)整權(quán)重初始化和學(xué)習(xí)參數(shù)。批量歸一化能使這個過程更簡單。
權(quán)重問題:
無論哪種權(quán)重初始化比如隨機(jī)或按經(jīng)驗(yàn)選擇,這些權(quán)重值都和學(xué)習(xí)權(quán)重差別很大。考慮在初始 epoch 中的一個小批量,在所需要的特征激活中可能會有很多異常值。
深度神經(jīng)網(wǎng)絡(luò)本身就具有病態(tài)性,即初始層的微小變動就會導(dǎo)致下一層的巨大變化。
在反向傳播過程中,這些現(xiàn)象會導(dǎo)致梯度的偏離,意味著梯度在學(xué)習(xí)權(quán)重以生成所需要的輸出之前,需要對異常值進(jìn)行補(bǔ)償,從而需要額外的 epoch 進(jìn)行收斂。
批量歸一化會系統(tǒng)化梯度,避免因異常值出現(xiàn)偏離,從而在幾個小批量內(nèi)直接導(dǎo)向共同的目標(biāo)(通過歸一化)。
學(xué)習(xí)率問題:
學(xué)習(xí)率通常保持小值,從而使梯度對權(quán)重的修正很小,因?yàn)楫惓V导せ畹奶荻炔粦?yīng)該影響學(xué)習(xí)激活。通過批量歸一化,這些異常值激活會被降低,從而可以使用更大的學(xué)習(xí)率加速學(xué)習(xí)過程。
7. 長短期記憶
長短期記憶(LSTM)網(wǎng)絡(luò)的神經(jīng)元和其它 RNN 中的常用神經(jīng)元不同,有如下三種特征:
它對神經(jīng)元的輸入有決定權(quán);
它對上一個時間步中計(jì)算內(nèi)容的存儲有決定權(quán);
它對將輸出傳遞到下一個時間步的時間有決定權(quán)。
LSTM 的強(qiáng)大在于它能只基于當(dāng)前的輸入就決定以上所有的值。看看下方的圖表:
當(dāng)前時間步的輸入信號 x(t) 決定了以上 3 個值。輸入門決定了第一個值,忘記門決定了第二個值,輸出門決定了第三個值。這是由我們的大腦工作方式所啟發(fā)的,可以處理輸入中的突然的情景變化。
8. Skip-gram
詞嵌入模型的目標(biāo)是為每一個詞匯項(xiàng)學(xué)習(xí)一個高維密集表征,其中嵌入向量的相似表示相關(guān)詞的語義或句法的相似。skip-gram 是一種學(xué)習(xí)詞嵌入算法的模型。
skip-gram 模型(和很多其它詞嵌入模型)背后的主要思想是:如果兩個詞匯項(xiàng)有相似的上下文,則它們是相似的。
換種說法,假設(shè)你有一個句子,比如「cats are mammals」,如果用「dogs」替換「cats」,該句子仍然是有意義的。因此在這個例子中,「dogs」和「cats」有相似的上下文(即,「are mammals」)。
居于上述的假設(shè),我們可以考慮一個上下文窗口,即一個包含 k 個連續(xù)項(xiàng)的窗口。然后我們應(yīng)該跳過一些單詞以學(xué)習(xí)能得到除跳過項(xiàng)外其它所有的項(xiàng)的神經(jīng)網(wǎng)絡(luò),并用該神經(jīng)網(wǎng)絡(luò)嘗試預(yù)測跳過的項(xiàng)。如果兩個詞在大型語料庫中共享相似的上下文,那么這些嵌入向量將有非常相近的向量。
9. 連續(xù)詞袋模型
在自然語言處理中,我們希望學(xué)習(xí)將文檔中每一個單詞表示為一個數(shù)值向量,并使得出現(xiàn)在相似上下文中的單詞有非常相似或相近的向量。在連續(xù)詞袋模型(CBOW)中,我們的目標(biāo)是能利用特定詞的上下文而預(yù)測該特定詞出現(xiàn)的概率。
我們可以通過在大型語料庫中抽取大量語句而做到這一點(diǎn)。每當(dāng)模型看到一個單詞時,我們就會抽取該特定單詞周圍出現(xiàn)的上下文單詞。然后將這些抽取的上下文單詞輸入到一個神經(jīng)網(wǎng)絡(luò)以在上下文出現(xiàn)的條件下預(yù)測中心詞的概率。
當(dāng)我們有成千上萬個上下文單詞與中心詞,我們就有了訓(xùn)練神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)集樣本。在訓(xùn)練神經(jīng)網(wǎng)絡(luò)中,最后經(jīng)過編碼的隱藏層輸出特定單詞的嵌入表達(dá)。這種表達(dá)就正是相似的上下文擁有相似的詞向量,也正好可以用這樣一個向量表征一個單詞的意思。
10. 遷移學(xué)習(xí)
現(xiàn)在讓我們考慮圖像到底如何如何流經(jīng)卷積神經(jīng)網(wǎng)絡(luò)的,這有助于我們將一般 CNN 學(xué)習(xí)到的知識遷移到其它圖像識別任務(wù)。假設(shè)我們有一張圖像,我們將其投入到第一個卷積層會得到一個像素組合的輸出,它們可能是一些識別的邊緣。如果我們再次使用卷積,就能得到這些邊和線的組合而得到一個簡單的圖形輪廓。這樣反復(fù)地卷積最后就能層級地尋找特定的模式或圖像。因此,最后一層就會組合前面抽象的特征尋找一個非常特定的模式,如果我們的卷積網(wǎng)絡(luò)是在 ImageNet 上訓(xùn)練的,那么最后一層將組合前面抽象特征識別特定的 1000 個類別。如果我們將最后一層替換為我們希望識別的類別,那么它就能很高效地訓(xùn)練與識別。
深度卷積網(wǎng)絡(luò)每一個層會構(gòu)建出越來越高級的特征表征方式,最后幾層往往是專門針對我們饋送到網(wǎng)絡(luò)中的數(shù)據(jù),因此早期層所獲得的特征更為通用。
遷移學(xué)習(xí)就是在我們已訓(xùn)練過的 CNN 模型進(jìn)行修正而得到的。我們一般會切除最后一層,然后再使用新的數(shù)據(jù)重新訓(xùn)練新建的最后一個分類層。這一過程也可以解釋為使用高級特征重新組合為我們需要識別的新目標(biāo)。這樣,訓(xùn)練時間和數(shù)據(jù)都會大大減小,我們只需要重新訓(xùn)練最后一層就完成了整個模型的訓(xùn)練。
深度學(xué)習(xí)非常注重技術(shù),且很多技術(shù)都沒有太多具體的解釋或理論推導(dǎo),但大多數(shù)實(shí)驗(yàn)結(jié)果都證明它們是有效的。因此也許從基礎(chǔ)上理解這些技術(shù)是我們后面需要完成的事情。
評論
查看更多