1. 程式人生 > >AI實踐者需要掌握的10大深度學習方法

AI實踐者需要掌握的10大深度學習方法

關注52AI,做AI的行業領先者。QQ人工智慧行業交流群:626784247.

01

本文總結了10個強大的深度學習方法,包括反向傳播、隨機梯度下降、學習率衰減、Dropout、最大池化、批量歸一化、長短時記憶、Skip-gram、連續詞袋、遷移學習等,這是AI工程師可以應用於他們的機器學習問題的。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

過去10年,人們對機器學習的興趣激增。幾乎每天,你都可以在各種各樣的電腦科學課程、行業會議、華爾街日報等等看到有關機器學習的討論。在所有關於機器學習的討論中,許多人把機器學習能做的事情和他們希望機器學習做的事情混為一談。從根本上講,機器學習是使用演算法從原始資料中提取資訊,並在某種型別的模型中表示這些資訊。我們使用這個模型來推斷還沒有建模的其他資料。

神經網路是機器學習的一種模型,它們至少有50年曆史了。神經網路的基本單元是節點(node),基本上是受哺乳動物大腦中的生物神經元啟發。神經元之間的連線也以生物的大腦為模型,這些連線隨著時間的推移而發展的方式是為“訓練”。

在20世紀80年代中期和90年代初期,許多重要的架構進步都是在神經網路進行的。然而,為了得到好的結果需要大量時間和資料,這阻礙了神經網路的採用,因而人們的興趣也減少了。在21世紀初,計算能力呈指數級增長,計算技術出現了“寒武紀大爆發”。在這個10年的爆炸式的計算增長中,深度學習成為這個領域的重要的競爭者,贏得了許多重要的機器學習競賽。直到2017年,這種興趣也還沒有冷卻下來;今天,我們看到一說機器學習,就不得不提深度學習。

作者本人也註冊了Udacity的“Deep Learning”課程,這門課很好地介紹了深度學習的動機,以及從TensorFlow的複雜和/或大規模的資料集中學習的智慧系統的設計。在課程專案中,我使用並開發了用於影象識別的卷積神經網路,用於自然語言處理的嵌入式神經網路,以及使用迴圈神經網路/長短期記憶的字元級文字生成。

本文中,作者總結了10個強大的深度學習方法,這是AI工程師可以應用於他們的機器學習問題的。首先,下面這張圖直觀地說明了人工智慧、機器學習和深度學習三者之間的關係。

0?wx_fmt=jpeg

人工智慧的領域很廣泛,深度學習是機器學習領域的一個子集,機器學習又是人工智慧的一個子領域。將深度學習網路與“經典的”前饋式多層網路區分開來的因素如下:

■ 比以前的網路有更多的神經元

■ 更復雜的連線層的方法

■ 用於訓練網路的計算機能力的“寒武紀大爆炸”

■ 自動特徵提取

這裡說的“更多的神經元”時,是指神經元的數量在逐年增加,以表達更復雜的模型。層(layers)也從多層網路中的每一層都完全連線,到在卷積神經網路中層之間連線區域性的神經元,再到在迴圈神經網路中與同一神經元的迴圈連線(recurrent connections)。

深度學習可以被定義為具有大量引數和層的神經網路,包括以下四種基本網路結構:

■ 無監督預訓練網路

■ 卷積神經網路

■ 迴圈神經網路

■ 遞迴神經網路

在本文中,主要介紹後三種架構。基本上,卷積神經網路(CNN)是一個標準的神經網路,通過共享的權重在空間中擴充套件。CNN設計用於通過內部的卷積來識別影象,它可以看到影象中待識別的物體的邊緣。迴圈神經網路(RNN)被設計用於識別序列,例如語音訊號或文字。它的內部有迴圈,這意味著網路上有短的記憶。遞迴神經網路更像是一個層級網路,在這個網路中,輸入必須以一種樹的方式進行分層處理。下面的10種方法可以應用於所有這些架構。

1、反向傳播

反向傳播(Back-prop)是一種計算函式偏導數(或梯度)的方法,具有函式構成的形式(就像神經網路中)。當使用基於梯度的方法(梯度下降只是方法之一)解決優化問題時,你需要在每次迭代中計算函式梯度。

0?wx_fmt=jpeg

對於神經網路,目標函式具有組合的形式。如何計算梯度呢?有兩種常用的方法:(i)解析微分(Analytic differentiation)。你已經知道函式的形式,只需要用鏈式法則(基本微積分)來計算導數。(ii)利用有限差分進行近似微分。這種方法在計算上很昂貴,因為函式值的數量是O(N),N指代引數的數量。不過,有限差分通常用於在除錯時驗證back-prop實現。

2、隨機梯度下降法

一種直觀理解梯度下降的方法是想象一條河流從山頂流下的路徑。梯度下降的目標正是河流努力達到的目標——即,到達最底端(山腳)。

現在,如果山的地形是這樣的,在到達最終目的地之前,河流不會完全停下來(這是山腳的最低點,那麼這就是我們想要的理想情況。)在機器學習中,相當從初始點(山頂)開始,我們找到了解決方案的全域性最小(或最佳)解。然而,可能因為地形的性質迫使河流的路徑出現幾個坑,這可能迫使河流陷入困境。在機器學習術語中,這些坑被稱為區域性極小值,這是不可取的。有很多方法可以解決這個問題。

0?wx_fmt=jpeg

因此,梯度下降很容易被困在區域性極小值,這取決於地形的性質(用ML的術語來說是函式的性質)。但是,當你有一種特殊的地形時(形狀像一個碗,用ML的術語來說,叫做凸函式),演算法總是保證能找到最優解。凸函式對ML的優化來說總是好事,取決於函式的初始值,你可能會以不同的路徑結束。同樣地,取決於河流的速度(即,梯度下降演算法的學習速率或步長),你可能以不同的方式到達最終目的地。這兩個標準都會影響到你是否陷入坑裡(區域性極小值)。

3、學習率衰減

0?wx_fmt=jpeg

根據隨機梯度下降的優化過程調整學習率(learning rate)可以提高效能並減少訓練時間。有時這被稱為學習率退火(learning rate annealing)或自適應學習率(adaptive learning rates)。訓練過程中最簡單,也是最常用的學習率適應是隨著時間的推移而降低學習度。在訓練過程開始時使用較大學習率具有進行大的改變的好處,然後降低學習率,使得後續對權重的訓練更新更小。這具有早期快速學習好權重,後面進行微調的效果。

兩種常用且易於使用的學習率衰減方法如下:

■ 逐步降低學習率。

■ 在特定的時間點較大地降低學習率。

4 、Dropout

具有大量引數的深度神經網路是非常強大的機器學習系統。然而,過擬合在這樣的網路中是一個嚴重的問題。大型網路的使用也很緩慢,這使得在測試時將許多不同的大型神經網路的預測結合起來變得困難。Dropout是解決這個問題的一種方法。

0?wx_fmt=jpeg

Dropout的關鍵想法是在訓練過程中隨機地從神經網路中把一些units(以及它們的連線)從神經網路中刪除。這樣可以防止單元過度適應。在訓練過程中,從一個指數級的不同的“稀疏”網路中刪除一些樣本。在測試時,通過簡單地使用一個具有較小權重的單一網路,可以很容易地估計所有這些“變瘦”了的網路的平均預測效果。這顯著減少了過擬合,相比其他正則化方法有了很大改進。研究表明,在視覺、語音識別、文件分類和計算生物學等監督學習任務中,神經網路的表現有所提高,在許多基準資料集上獲得了state-of-the-art的結果。

5、Max Pooling

最大池化(Max pooling)是一個基於樣本的離散化過程。目標是對輸入表示(影象,隱藏層輸出矩陣等)進行下采樣,降低其維度,並允許對包含在分割槽域中的特徵進行假設。

0?wx_fmt=jpeg

這在一定程度上是為了通過提供一種抽象的表示形式來幫助過擬合。同時,它通過減少學習的引數數量,併為內部表示提供基本的平移不變性(translation invariance),從而減少計算成本。最大池化是通過將一個最大過濾器應用於通常不重疊的初始表示的子區域來完成的。

6、批量歸一化

當然,包括深度網路在內的神經網路需要仔細調整權重初始化和學習引數。而批量標準化有助於實現這一點。

權重問題:無論權重的初始化如何,是隨機的也好是經驗性的選擇也罷,都距離學習到的權重很遙遠。考慮一個小批量(mini batch),在最初時,在所需的特徵啟用方面將會有許多異常值。

深度神經網路本身是有缺陷的,初始層中一個微小的擾動,就會導致後面層巨大的變化。在反向傳播過程中,這些現象會導致對梯度的分散,這意味著在學習權重以產生所需輸出之前,梯度必須補償異常值,而這將導致需要額外的時間才能收斂。

0?wx_fmt=jpeg

批量歸一化將梯度從分散規範化到正常值,並在小批量範圍內向共同目標(通過歸一化)流動。

學習率問題:一般來說,學習率保持較低,只有一小部分的梯度校正權重,原因是異常啟用的梯度不應影響學習的啟用。通過批量歸一化,減少異常啟用,因此可以使用更高的學習率來加速學習過程。

7、長短時記憶

LSTM網路在以下三個方面與RNN的神經元不同:

■ 能夠決定何時讓輸入進入神經元;

■ 能夠決定何時記住上一個時間步中計算的內容;

■ 能夠決定何時讓輸出傳遞到下一個時間步長。

LSTM的優點在於它根據當前的輸入本身來決定所有這些。所以,你看下面的圖表:

0?wx_fmt=jpeg

當前時間標記處的輸入訊號x(t)決定所有上述3點。輸入門從點1接收決策,遺忘門從點2接收決策,輸出門在點3接收決策,單獨的輸入能夠完成所有這三個決定。這受到我們的大腦如何工作的啟發,並且可以基於輸入來處理突然的上下文/場景切換。

8、Skip-gram

詞嵌入模型的目標是為每個詞彙項學習一個高維密集表示,其中嵌入向量之間的相似性顯示了相應詞之間的語義或句法相似性。Skip-gram是學習單詞嵌入演算法的模型。

Skip-gram模型(以及許多其他的詞語嵌入模型)的主要思想是:如果兩個詞彙項(vocabulary term)共享的上下文相似,那麼這兩個詞彙項就相似。

0?wx_fmt=jpeg

換句話說,假設你有一個句子,比如“貓是哺乳動物”。如果你用“狗”去替換“貓”,這個句子仍然是一個有意義的句子。因此在這個例子中,“狗”和“貓”可以共享相同的上下文(即“是哺乳動物”)。

基於上述假設,你可以考慮一個上下文視窗(context window,一個包含k個連續項的視窗),然後你跳過其中一個單詞,試著去學習一個能夠得到除跳過項外所有項的神經網路,並預測跳過的項是什麼。如果兩個詞在一個大語料庫中反覆共享相似的語境,則這些詞的嵌入向量將具有相近的向量。

9、連續詞袋(Continuous Bag Of Words)

在自然語言處理問題中,我們希望學習將文件中的每個單詞表示為一個數字向量,使得出現在相似的上下文中的單詞具有彼此接近的向量。在連續的單詞模型中,我們的目標是能夠使用圍繞特定單詞的上下文並預測特定單詞。

0?wx_fmt=jpeg

我們通過在一個龐大的語料庫中抽取大量的句子來做到這一點,每當我們看到一個單詞時,我們就會提取它周圍的單詞。然後,我們將上下文單詞輸入到一個神經網路,並預測位於這個上下文中心的單詞。

當我們有成千上萬的這樣的上下文單詞和中心詞以後,我們就有了一個神經網路資料集的例項。訓練神經網路,最後編碼的隱藏層輸出表示特定單詞的嵌入。而當我們對大量的句子進行訓練時也能發現,類似語境中的單詞得到的是相似的向量。

10、遷移學習

讓我們考慮影象如何穿過卷積神經網路。假設你有一個影象,你應用卷積,並得到畫素的組合作為輸出。假設這些輸出是邊緣(edge)。現在再次應用卷積,現在你的輸出就是邊或線的組合。然後再次應用卷積,你的輸出是線的組合,以此類推……你可以把它看作是每一層尋找一個特定的模式。神經網路的最後一層往往會變得非常特異化。如果你在ImageNet上工作,你的網路最後一層大概就是在尋找兒童、狗或飛機等整體圖案。再往後倒退幾層,你可能會看到網路在尋找眼睛或耳朵或嘴巴或輪子這樣的組成部件。

0?wx_fmt=jpeg

深度CNN中的每一層都逐步建立起越來越高層次的特徵表徵。最後幾層往往是專門針對輸入模型的資料。另一方面,早期的圖層更為通用。而遷移學習就是當你在一個數據集上訓練CNN時,切掉最後一層,在不同的資料集上重新訓練最後一層的模型。直觀地說,你正在重新訓練模型以識別不同的高階特徵。因此,訓練時間會減少很多,所以當你沒有足夠的資料或者訓練需要太多的資源時,遷移學習是一個有用的工具。

02


52AI

52AI,專注服務於普通人的AI 學習和發展,讓大眾受益於人工智慧就是我們的願望。我們堅信只有對大眾收益的科技才是有意義的,也是我們追求的方向。

0?wx_fmt=jpeg