在過去十年中,人們對機器學(xué)習(xí)的興趣激增。幾乎每天,我們都可以在各種各樣的計算機科學(xué)課程、行業(yè)會議、華爾街日報等等看到有關(guān)機器學(xué)習(xí)的討論。在所有關(guān)于機器學(xué)習(xí)的討論中,許多人把機器學(xué)習(xí)能做的事情和他們希望機器學(xué)習(xí)做的事情混為一談。從根本上講,機器學(xué)習(xí)是使用算法從原始數(shù)據(jù)中提取信息,并在某種類型的模型中表示這些信息。我們使用這個模型來推斷還沒有建模的其他數(shù)據(jù)。
神經(jīng)網(wǎng)絡(luò)是機器學(xué)習(xí)的一種模型,它們至少有50年歷史了。神經(jīng)網(wǎng)絡(luò)的基本單元是節(jié)點(node),基本上是受哺乳動物大腦中的生物神經(jīng)元啟發(fā)。神經(jīng)元之間的連接也以生物的大腦為模型,這些連接隨著時間的推移而發(fā)展的方式是為“訓(xùn)練”。
在20世紀(jì)80年代中期和90年代初期,許多重要的模型架構(gòu)進(jìn)步都是在神經(jīng)網(wǎng)絡(luò)中進(jìn)行的。然而,為了獲得良好性能所需的時間和數(shù)據(jù)越來越多,這極大的降低了研究人員的興趣。在21世紀(jì)初期,計算能力呈指數(shù)級增長,研究人員看到了計算機技術(shù)的“寒武紀(jì)爆發(fā)”。作為該領(lǐng)域的一個重要競爭者——深度學(xué)習(xí),因為計算能力的爆炸式增長,贏得了許多重要的機器學(xué)習(xí)競賽。截至目前,這種趨勢仍然沒有減退;今天,我們看到機器學(xué)習(xí)的每個角落都提到了深度學(xué)習(xí)。
最近,我開始閱讀有關(guān)該深度學(xué)習(xí)的學(xué)術(shù)論文。根據(jù)我的研究,以下是一些對該領(lǐng)域的發(fā)展產(chǎn)生巨大影響的出版物:
紐約大學(xué)基于梯度的學(xué)習(xí)應(yīng)用于文檔識別(1998),它將卷積神經(jīng)網(wǎng)絡(luò)引入機器學(xué)習(xí)世界。
多倫多大學(xué)的DeepBoltzmann Machines(2009),它為Boltzmann機器提供了一種新的學(xué)習(xí)算法,包含許多隱藏變量層。
斯坦福和谷歌使用大規(guī)模無監(jiān)督學(xué)習(xí)構(gòu)建高級功能(2012),解決了僅使用未標(biāo)記數(shù)據(jù)構(gòu)建高級,類特定功能檢測器的問題。
Berkeley的DeCAF-一種用于通用視覺識別的深度卷積激活功能(2013),它發(fā)布了DeCAF,這是一種深度卷積激活功能的開源實現(xiàn),以及所有相關(guān)的網(wǎng)絡(luò)參數(shù),使視覺研究人員能夠進(jìn)行深度實驗跨越一系列視覺概念學(xué)習(xí)范例的表示。
DeepMind使用Deep ReinforcementLearning(2016)播放Atari,它提供了第一個深度學(xué)習(xí)模型,可以使用強化學(xué)習(xí)直接從高維感覺輸入成功學(xué)習(xí)控制策略。
通過研究和學(xué)習(xí)論文,我學(xué)到了很多關(guān)于深度學(xué)習(xí)的豐富知識。在這里,我想分享AI工程師可以應(yīng)用于機器學(xué)習(xí)問題的10種強大的深度學(xué)習(xí)方法。但首先,讓我們來定義深度學(xué)習(xí)是什么。深度學(xué)習(xí)對于許多人來說是一個挑戰(zhàn),因為它的形式在過去十年中逐漸發(fā)生了改變。為了向各位更好的說明深層學(xué)習(xí)的地位,下圖說明了人工智能,機器學(xué)習(xí)和深度學(xué)習(xí)之間關(guān)系的概念。
人工智能領(lǐng)域很廣泛,并且已經(jīng)存在了很長時間。深度學(xué)習(xí)是機器學(xué)習(xí)領(lǐng)域的一個子集,而機器學(xué)習(xí)只是人工智能的一個子領(lǐng)域。將深度學(xué)習(xí)網(wǎng)絡(luò)與之前的前饋多層網(wǎng)絡(luò)進(jìn)行區(qū)分:
深度學(xué)習(xí)比以前的網(wǎng)絡(luò)更多的神經(jīng)元;
深度學(xué)習(xí)中有更復(fù)雜的連接層的方式;
“寒武紀(jì)爆炸”的提供的計算能力;
深度學(xué)習(xí)可以自動進(jìn)行特征提取。
當(dāng)我說到“更多神經(jīng)元”時,是指近年來神經(jīng)元的數(shù)量不斷增加,深度學(xué)習(xí)就可以表示更為復(fù)雜的模型。層也從多層網(wǎng)絡(luò)中每一層的完全連接,進(jìn)化成卷積神經(jīng)網(wǎng)絡(luò)中神經(jīng)元片段的局部連接,以及與遞歸神經(jīng)網(wǎng)絡(luò)中的同一神經(jīng)元的循環(huán)連接(與前一層的連接除外)。
深度學(xué)習(xí)可以被定義為具有大量參數(shù)和層數(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ò)。
在這篇文章中,我主要對后三種網(wǎng)絡(luò)進(jìn)行講解。卷積神經(jīng)網(wǎng)絡(luò)(CNN)基本上式已經(jīng)跨越使用共享權(quán)重的空間延伸的標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)。CNN旨在通過在內(nèi)部的卷積來識別圖像,該卷積看到圖像上識別對象的邊緣。遞歸神經(jīng)網(wǎng)絡(luò)基本上是一個使用時間延伸擴(kuò)展空間的標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò),它提取進(jìn)入下一時間步的邊沿,而不是在同一時間進(jìn)入下一層。RNN進(jìn)行序列識別,例如語音或文本信號,因其內(nèi)部具有循環(huán),意味著在RNN網(wǎng)絡(luò)中存在短時記憶。遞歸神經(jīng)網(wǎng)絡(luò)更類似于分層網(wǎng)絡(luò),其中輸入序列實際上與時間無關(guān),但輸入必須以樹狀方式分層處理。下面的10種方法可以應(yīng)用于所有這些架構(gòu)。
反向傳播
Back-prop反向傳播只是一種簡單計算函數(shù)的偏導(dǎo)數(shù)的方法,它具有函數(shù)組合的形式(如神經(jīng)網(wǎng)絡(luò)中)。當(dāng)你使用基于梯度的方法解決最優(yōu)化問題(梯度下降只是其中之一)時,你希望在每次迭代時計算函數(shù)漸變,這個時候它便可以發(fā)揮作用。
對于神經(jīng)網(wǎng)絡(luò),其目標(biāo)函數(shù)具有組合的形式。你如何計算梯度?有兩種常見的方法可以做到:(i)分析微分法。如果你知道函數(shù)的形式,你只需使用鏈?zhǔn)揭?guī)則(基本微積分)計算導(dǎo)數(shù)。(ii)有限差分的近似微分。該方法在計算上是昂貴的,因為評估函數(shù)的數(shù)量是O(N),其中N是參數(shù)的數(shù)量。與解析微分相比,這種方法的計算成本是昂貴的。在調(diào)試時,通常使用有限差分驗證反向傳播的執(zhí)行效果。
隨機梯度下降
想象梯度下降的直觀方式是想象一條源自山頂?shù)暮恿鞯穆窂健L荻认陆档哪繕?biāo)正是河流努力實現(xiàn)的目標(biāo),即從山頂流到最低點。
現(xiàn)在,如果山的地形形狀使得河流在到達(dá)其最終目的地之前不必完全停在任何地方,這是我們想要的理想情況。在機器學(xué)習(xí)中,這相當(dāng)于說,我們已經(jīng)從初始點(山頂)開始找到解決方案的全局最小值(或最優(yōu)值)。然而,可能由于地形性質(zhì),導(dǎo)致河流路徑出現(xiàn)若干的坑洼,會迫使河流困住和停滯。在機器學(xué)習(xí)方面,這種坑洼被稱為局部最優(yōu)解,這是我們不想要的情況。當(dāng)然有很多方法可以解決局部最優(yōu)解問題,這里我不打算進(jìn)一步討論。
因此,梯度下降傾向于陷入局部最小值,這取決于地形的性質(zhì)(或ML術(shù)語中的函數(shù))。但是,當(dāng)你有一種特殊的山地形狀(形狀像一個碗,用ML術(shù)語稱為凸函數(shù))時,算法始終能夠找到最優(yōu)值。你可以想象將這條河流可視化。在機器學(xué)習(xí)中,這些特殊的地形(也稱為凸函數(shù))總是需要優(yōu)化的。另外,你從山頂開始(即函數(shù)的初始值)的位置不同,最終你到達(dá)山底的路徑也完全不同。同樣,根據(jù)河流的流淌速度(即梯度下降算法的學(xué)習(xí)速率或步長),你可能會以不同的方式到達(dá)目的地。你是否會陷入或避免一個坑(局部最?。?,都會被這兩個標(biāo)準(zhǔn)影響。
學(xué)習(xí)速率衰減
調(diào)整隨機梯度下降優(yōu)化程序的學(xué)習(xí)速率可以提高性能并縮短訓(xùn)練時間。有時這也被稱為學(xué)習(xí)率退火或自適應(yīng)學(xué)習(xí)率。在訓(xùn)練期間最簡單且最常用的學(xué)習(xí)率調(diào)整是隨時間降低學(xué)習(xí)率的技術(shù)。在訓(xùn)練初期使用較大的學(xué)習(xí)速率值,可以對學(xué)習(xí)速率進(jìn)行大幅調(diào)整;在訓(xùn)練后期,降低學(xué)習(xí)速率,使模型以一個較小的速率進(jìn)行權(quán)重的更新。這種技術(shù)在早期可以快速學(xué)習(xí)獲得一些較好的權(quán)重,并在后期對權(quán)重進(jìn)行微調(diào)。
兩種流行且易于使用的學(xué)習(xí)率衰減如下:
在每個環(huán)節(jié)逐漸降低學(xué)習(xí)率。
在特定時期使用大幅下降來降低學(xué)習(xí)速率。
Dropout
具有大量參數(shù)的深度神經(jīng)網(wǎng)絡(luò)是非常強大的機器學(xué)習(xí)系統(tǒng)。然而,過度擬合是這種網(wǎng)絡(luò)中的嚴(yán)重問題。大型網(wǎng)絡(luò)使用起來也很慢,因此在測試時將許多不同的大型神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)合起來很難處理過度擬合。Dropout就是一種解決此問題的技術(shù)。
關(guān)鍵思想是在訓(xùn)練期間從神經(jīng)網(wǎng)絡(luò)中隨機刪除單元及其連接,這可以防止單元間的過度適應(yīng)。在訓(xùn)練期間,從指數(shù)數(shù)量的不同“稀疏”網(wǎng)絡(luò)中抽取樣本。在測試時,通過簡單地使用具有較小權(quán)重的單解開網(wǎng)絡(luò)(untwinednetwork),很容易近似平均所有這些稀疏網(wǎng)絡(luò)以達(dá)到預(yù)測的效果。這顯著減少了過度擬合,并且比其他正則化方法表現(xiàn)的更好。Dropout已被證明可以改善神經(jīng)網(wǎng)絡(luò)在計算機視覺,語音識別,文檔分類和計算生物學(xué)等領(lǐng)域的監(jiān)督學(xué)習(xí)任務(wù)的性能,并在許多基準(zhǔn)數(shù)據(jù)集上獲得最先進(jìn)的結(jié)果。
最大池化
最大池化是基于樣本的離散化過程。目的是對輸入表示(圖像、隱藏層輸出矩陣等)進(jìn)行下采樣,通過降低其維數(shù)并允許對包含在子區(qū)域中的特征進(jìn)行合并。
通過提供表征的抽象形式,這種方法在某種程度上有助于解決過擬合。同樣,它也通過減少學(xué)習(xí)參數(shù)的數(shù)量和提供基本的內(nèi)部表征的轉(zhuǎn)換不變性來減少計算量。最大池化是通過將最大過濾器應(yīng)用于通常不重疊的初始表征子區(qū)域來完成的。
批量歸一化
當(dāng)然,包括深度網(wǎng)絡(luò)在內(nèi)的神經(jīng)網(wǎng)絡(luò)需要仔細(xì)調(diào)整權(quán)重初始化和學(xué)習(xí)參數(shù)。批量歸一化有助于讓中國過程更簡單一點。
權(quán)重問題:
無論那種權(quán)重的初始化,隨機還是憑經(jīng)驗選擇,它們都和學(xué)習(xí)權(quán)重差別很大??紤]一個小批量數(shù)據(jù)集,在最初的時期,在特征激活時都會有許多異常值。
深度神經(jīng)網(wǎng)絡(luò)本身脆弱的,即初始層的微小擾動都會導(dǎo)致后面層很大的變化。
在反向傳播期間,這些現(xiàn)象會導(dǎo)致梯度偏移,這意味著在學(xué)習(xí)權(quán)重以產(chǎn)生所需輸出之前,梯度必須補償異常值。這也將導(dǎo)致需要額外的時間來收斂。
批量歸一化將這些梯度從離散規(guī)則化為正常值,并在小批量的范圍內(nèi)朝向共同目標(biāo)(通過歸一化它們)流動。
學(xué)習(xí)率問題:通常,學(xué)習(xí)率保持較小,使得只有一小部分的梯度用來校正權(quán)重,原因是異常激活的梯度不應(yīng)該影響已經(jīng)學(xué)習(xí)好的權(quán)重。通過批量歸一化,這些異常值被激活的可能性就會減少,因此可以使用更高的學(xué)習(xí)率來加速學(xué)習(xí)過程。
長短期記憶
LSTM網(wǎng)絡(luò)具有以下三個方面,使其與遞歸神經(jīng)網(wǎng)絡(luò)中的常規(guī)神經(jīng)元區(qū)分開來:
1、它可以控制何時讓輸入進(jìn)入神經(jīng)元。
2、它可以控制何時記住上一個時間步驟中計算的內(nèi)容。
3、它可以控制何時將輸出傳遞給下一個時間戳。
LSTM的優(yōu)點在于它根據(jù)當(dāng)前輸入本身決定所有這些,如下圖所示:
當(dāng)前時間戳處的輸入信號x(t)決定所有上述3個點。輸入門決定點1.遺忘門在點2上做出決定,輸出門在點3上做出決定。輸入門能單獨能夠做出這三個決定。這受到了我們的大腦是如何工作的啟發(fā),并且可以處理突然的上下文切換。
skim-gram
詞嵌入模型的目標(biāo)是為了每個詞匯學(xué)習(xí)一個高維密集表征,其中嵌入向量之間的相似性顯示了相應(yīng)單詞之間的語義或句法相似性。Skip-gram是學(xué)習(xí)詞嵌入算法的模型。
skip-gram模型(以及許多其他詞嵌入模型)背后的主要思想如下:如果兩個詞匯有相似的上下文,則它們是相似的。
換句話說,假設(shè)你有一句話,比如“貓是哺乳動物”。如果你使用術(shù)語“狗”而不是“貓”,句子仍然是一個有意義的句子。因此在該示例中,“狗”和“貓”可以共享相同的背景(即“是哺乳動物”)。
基于上述假設(shè),你可以考慮一個上下文窗口(一個包含k個連續(xù)術(shù)語的窗口)。然后你應(yīng)該跳過其中一個單詞,并嘗試學(xué)習(xí)除了跳過的一個術(shù)語之外的所有術(shù)語并預(yù)測跳過的術(shù)語的神經(jīng)網(wǎng)絡(luò)。因此如果兩個單詞在大型語料庫中重復(fù)地共享相似的上下文,那些這些術(shù)語的嵌入向量將具有相似的向量。
連續(xù)的詞袋模型(Continuous Bag of Words)
在自然語言處理問題中,我們希望學(xué)習(xí)將文檔中的每個單詞表示為數(shù)字向量,使得出現(xiàn)在相似上下文中的單詞具有彼此接近的向量。在連續(xù)詞袋模型中,目標(biāo)是能夠使用圍繞特定單詞的上下文并預(yù)測特定單詞。
我們通過在一個大型語料庫中抽取大量句子來做到這一點,每次看到一個單詞時,我們都會使用其上下文單詞。然后我們將上下文單詞輸入到一個神經(jīng)網(wǎng)絡(luò)中,并預(yù)測該上下文中心的單詞。
當(dāng)我們有數(shù)千個這樣的上下文單詞和中心單詞時,我們就有一個神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集的實例。我們訓(xùn)練神經(jīng)網(wǎng)絡(luò),在經(jīng)過編碼的隱藏層的輸出表示特定單詞的嵌入。碰巧的是,當(dāng)我們在大量句子上訓(xùn)練時,類似上下文中的單詞會得到類似的向量。
遷移學(xué)習(xí)
考慮下圖像是如何通過卷積神經(jīng)網(wǎng)絡(luò)的。假設(shè)你有一個圖像,你應(yīng)用卷積,你得到像素組合作為輸出。如果碰到了邊緣,則再次應(yīng)用卷積,所以現(xiàn)在輸出是邊或線的組合。然后再次應(yīng)用卷積,此時的輸出將是線的組合,依此類推。你可以將其視為每個層尋找特定模式。神經(jīng)網(wǎng)絡(luò)的最后一層往往變得非常專業(yè)。如果你正在使用ImageNet,那么你的網(wǎng)絡(luò)最后一層將尋找兒童或狗或飛機或其他什么。再后退幾層你可能會看到網(wǎng)絡(luò)正在尋找眼睛或耳朵或嘴或輪子。
深度CNN中的每個層逐漸建立了更高和更高級別的特征表征。最后幾層往往專注于你輸入模型的任何數(shù)據(jù)。另一方面,早期的圖層更通用,是在更大類的圖片中找到很多簡單的模式。
遷移學(xué)習(xí)是指你在一個數(shù)據(jù)集上訓(xùn)練CNN,切斷最后一層,在其他不同的數(shù)據(jù)集上重新訓(xùn)練模型的最后一層。直觀地說,你正在重新訓(xùn)練模型以識別不同的更高級別的功能。因此,模型訓(xùn)練的時間會大大減少,因此當(dāng)你沒有足夠的數(shù)據(jù)或者訓(xùn)練所需的太多資源時,遷移學(xué)習(xí)是一種有用的工具。
-
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8418瀏覽量
132630 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121162
發(fā)布評論請先 登錄
相關(guān)推薦
評論