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