姓名:周雪寧
學號:1702110196
轉載:https://mp.weixin.qq.com/s/V7WTcs_yi9qDil3Z1vjwvg
【嵌牛導讀】:本文總結了10個強大的深度學習方法,包括反向傳播、隨機梯度下降、學習率衰減、Dropout、最大池化、批量歸一化、長短時記憶、Skip-gram、連續詞袋、遷移學習等,這是AI工程師可以應用于他們的機器學習問題的。
【嵌牛鼻子】:深度學習
【嵌牛提問】:如今最常用的深度學習方法,如何進行歸納總結?
【嵌牛正文】:
過去10年,人們對機器學習的興趣激增。幾乎每天,你都可以在各種各樣的計算機科學課程、行業會議、華爾街日報等等看到有關機器學習的討論。在所有關于機器學習的討論中,許多人把機器學習能做的事情和他們希望機器學習做的事情混為一談。從根本上講,機器學習是使用算法從原始數據中提取信息,并在某種類型的模型中表示這些信息。我們使用這個模型來推斷還沒有建模的其他數據。
神經網絡是機器學習的一種模型,它們至少有50年歷史了。神經網絡的基本單元是節點(node),基本上是受哺乳動物大腦中的生物神經元啟發。神經元之間的連接也以生物的大腦為模型,這些連接隨著時間的推移而發展的方式是為“訓練”。
在20世紀80年代中期和90年代初期,許多重要的架構進步都是在神經網絡進行的。然而,為了得到好的結果需要大量時間和數據,這阻礙了神經網絡的采用,因而人們的興趣也減少了。在21世紀初,計算能力呈指數級增長,計算技術出現了“寒武紀大爆發”。在這個10年的爆炸式的計算增長中,深度學習成為這個領域的重要的競爭者,贏得了許多重要的機器學習競賽。直到2017年,這種興趣也還沒有冷卻下來;今天,我們看到一說機器學習,就不得不提深度學習。
作者本人也注冊了Udacity的“Deep Learning”課程,這門課很好地介紹了深度學習的動機,以及從TensorFlow的復雜和/或大規模的數據集中學習的智能系統的設計。在課程項目中,我使用并開發了用于圖像識別的卷積神經網絡,用于自然語言處理的嵌入式神經網絡,以及使用循環神經網絡/長短期記憶的字符級文本生成。
本文中,作者總結了10個強大的深度學習方法,這是AI工程師可以應用于他們的機器學習問題的。首先,下面這張圖直觀地說明了人工智能、機器學習和深度學習三者之間的關系。
人工智能的領域很廣泛,深度學習是機器學習領域的一個子集,機器學習又是人工智能的一個子領域。將深度學習網絡與“經典的”前饋式多層網絡區分開來的因素如下:
比以前的網絡有更多的神經元
更復雜的連接層的方法
用于訓練網絡的計算機能力的“寒武紀大爆炸”
自動特征提取
這里說的“更多的神經元”時,是指神經元的數量在逐年增加,以表達更復雜的模型。層(layers)也從多層網絡中的每一層都完全連接,到在卷積神經網絡中層之間連接局部的神經元,再到在循環神經網絡中與同一神經元的循環連接(recurrent connections)。
深度學習可以被定義為具有大量參數和層的神經網絡,包括以下四種基本網絡結構:
無監督預訓練網絡
卷積神經網絡
循環神經網絡
遞歸神經網絡
在本文中,主要介紹后三種架構?;旧?,卷積神經網絡(CNN)是一個標準的神經網絡,通過共享的權重在空間中擴展。CNN設計用于通過內部的卷積來識別圖像,它可以看到圖像中待識別的物體的邊緣。循環神經網絡(RNN)被設計用于識別序列,例如語音信號或文本。它的內部有循環,這意味著網絡上有短的記憶。遞歸神經網絡更像是一個層級網絡,在這個網絡中,輸入必須以一種樹的方式進行分層處理。下面的10種方法可以應用于所有這些架構。
1. 反向傳播
反向傳播(Back-prop)是一種計算函數偏導數(或梯度)的方法,具有函數構成的形式(就像神經網絡中)。當使用基于梯度的方法(梯度下降只是方法之一)解決優化問題時,你需要在每次迭代中計算函數梯度。
對于神經網絡,目標函數具有組合的形式。如何計算梯度呢?有兩種常用的方法:(i)解析微分(Analytic differentiation)。你已經知道函數的形式,只需要用鏈式法則(基本微積分)來計算導數。(ii)利用有限差分進行近似微分。這種方法在計算上很昂貴,因為函數值的數量是O(N),N指代參數的數量。不過,有限差分通常用于在調試時驗證back-prop實現。
2. 隨機梯度下降法
一種直觀理解梯度下降的方法是想象一條河流從山頂流下的路徑。梯度下降的目標正是河流努力達到的目標——即,到達最底端(山腳)。
現在,如果山的地形是這樣的,在到達最終目的地之前,河流不會完全停下來(這是山腳的最低點,那么這就是我們想要的理想情況。)在機器學習中,相當從初始點(山頂)開始,我們找到了解決方案的全局最?。ɑ蜃罴眩┙狻H欢?,可能因為地形的性質迫使河流的路徑出現幾個坑,這可能迫使河流陷入困境。在機器學習術語中,這些坑被稱為局部極小值,這是不可取的。有很多方法可以解決這個問題。
因此,梯度下降很容易被困在局部極小值,這取決于地形的性質(用ML的術語來說是函數的性質)。但是,當你有一種特殊的地形時(形狀像一個碗,用ML的術語來說,叫做凸函數),算法總是保證能找到最優解。凸函數對ML的優化來說總是好事,取決于函數的初始值,你可能會以不同的路徑結束。同樣地,取決于河流的速度(即,梯度下降算法的學習速率或步長),你可能以不同的方式到達最終目的地。這兩個標準都會影響到你是否陷入坑里(局部極小值)。
3. 學習率衰減
根據隨機梯度下降的優化過程調整學習率(learning rate)可以提高性能并減少訓練時間。 有時這被稱為學習率退火(?learning rate annealing)或自適應學習率(adaptive learning rates)。訓練過程中最簡單,也是最常用的學習率適應是隨著時間的推移而降低學習度。
在訓練過程開始時使用較大學習率具有進行大的改變的好處,然后降低學習率,使得后續對權重的訓練更新更小。這具有早期快速學習好權重,后面進行微調的效果。
兩種常用且易于使用的學習率衰減方法如下:
逐步降低學習率。
在特定的時間點較大地降低學習率。
4?. Dropout
具有大量參數的深度神經網絡是非常強大的機器學習系統。然而,過擬合在這樣的網絡中是一個嚴重的問題。大型網絡的使用也很緩慢,這使得在測試時將許多不同的大型神經網絡的預測結合起來變得困難。Dropout是解決這個問題的一種方法。
Dropout 的關鍵想法是在訓練過程中隨機地從神經網絡中把一些units(以及它們的連接)從神經網絡中刪除。這樣可以防止單元過度適應。在訓練過程中,從一個指數級的不同的“稀疏”網絡中刪除一些樣本。在測試時,通過簡單地使用一個具有較小權重的單一網絡,可以很容易地估計所有這些“變瘦”了的網絡的平均預測效果。這顯著減少了過擬合,相比其他正則化方法有了很大改進。研究表明,在視覺、語音識別、文檔分類和計算生物學等監督學習任務中,神經網絡的表現有所提高,在許多基準數據集上獲得了state-of-the-art的結果。
5. Max?Pooling
最大池化(Max pooling)是一個基于樣本的離散化過程。目標是對輸入表示(圖像,隱藏層輸出矩陣等)進行下采樣,降低其維度,并允許對包含在分區域中的特征進行假設。
這在一定程度上是為了通過提供一種抽象的表示形式來幫助過擬合。同時,它通過減少學習的參數數量,并為內部表示提供基本的平移不變性(translation invariance),從而減少計算成本。最大池化是通過將一個最大過濾器應用于通常不重疊的初始表示的子區域來完成的。
6. 批量歸一化
當然,包括深度網絡在內的神經網絡需要仔細調整權重初始化和學習參數。而批量標準化有助于實現這一點。
權重問題:無論權重的初始化如何,是隨機的也好是經驗性的選擇也罷,都距離學習到的權重很遙遠。考慮一個小批量(mini batch),在最初時,在所需的特征激活方面將會有許多異常值。
深度神經網絡本身是有缺陷的,初始層中一個微小的擾動,就會導致后面層巨大的變化。在反向傳播過程中,這些現象會導致對梯度的分散,這意味著在學習權重以產生所需輸出之前,梯度必須補償異常值,而這將導致需要額外的時間才能收斂。
批量歸一化將梯度從分散規范化到正常值,并在小批量范圍內向共同目標(通過歸一化)流動。
學習率問題:一般來說,學習率保持較低,只有一小部分的梯度校正權重,原因是異常激活的梯度不應影響學習的激活。通過批量歸一化,減少異常激活,因此可以使用更高的學習率來加速學習過程。
7. 長短時記憶
LSTM網絡在以下三個方面與RNN的神經元不同:
能夠決定何時讓輸入進入神經元;
能夠決定何時記住上一個時間步中計算的內容;
能夠決定何時讓輸出傳遞到下一個時間步長。
LSTM的優點在于它根據當前的輸入本身來決定所有這些。所以,你看下面的圖表:
當前時間標記處的輸入信號x(t)決定所有上述3點。輸入門從點1接收決策,遺忘門從點2接收決策,輸出門在點3接收決策,單獨的輸入能夠完成所有這三個決定。這受到我們的大腦如何工作的啟發,并且可以基于輸入來處理突然的上下文/場景切換。
8. Skip-gram
詞嵌入模型的目標是為每個詞匯項學習一個高維密集表示,其中嵌入向量之間的相似性顯示了相應詞之間的語義或句法相似性。Skip-gram是學習單詞嵌入算法的模型。
Skip-gram模型(以及許多其他的詞語嵌入模型)的主要思想是:如果兩個詞匯項(vocabulary term)共享的上下文相似,那么這兩個詞匯項就相似。
換句話說,假設你有一個句子,比如“貓是哺乳動物”。如果你用“狗”去替換“貓”,這個句子仍然是一個有意義的句子。因此在這個例子中,“狗”和“貓”可以共享相同的上下文(即“是哺乳動物”)。
基于上述假設,你可以考慮一個上下文窗口(context window,一個包含k個連續項的窗口),然后你跳過其中一個單詞,試著去學習一個能夠得到除跳過項外所有項的神經網絡,并預測跳過的項是什么。如果兩個詞在一個大語料庫中反復共享相似的語境,則這些詞的嵌入向量將具有相近的向量。
9. 連續詞袋(Continuous Bag Of Words)
在自然語言處理問題中,我們希望學習將文檔中的每個單詞表示為一個數字向量,使得出現在相似的上下文中的單詞具有彼此接近的向量。在連續的單詞模型中,我們的目標是能夠使用圍繞特定單詞的上下文并預測特定單詞。
我們通過在一個龐大的語料庫中抽取大量的句子來做到這一點,每當我們看到一個單詞時,我們就會提取它周圍的單詞。然后,我們將上下文單詞輸入到一個神經網絡,并預測位于這個上下文中心的單詞。
當我們有成千上萬的這樣的上下文單詞和中心詞以后,我們就有了一個神經網絡數據集的實例。訓練神經網絡,最后編碼的隱藏層輸出表示特定單詞的嵌入。而當我們對大量的句子進行訓練時也能發現,類似語境中的單詞得到的是相似的向量。
10. 遷移學習
讓我們考慮圖像如何穿過卷積神經網絡。假設你有一個圖像,你應用卷積,并得到像素的組合作為輸出。假設這些輸出是邊緣(edge)。現在再次應用卷積,現在你的輸出就是邊或線的組合。然后再次應用卷積,你的輸出是線的組合,以此類推……你可以把它看作是每一層尋找一個特定的模式。神經網絡的最后一層往往會變得非常特異化。如果你在ImageNet上工作,你的網絡最后一層大概就是在尋找兒童、狗或飛機等整體圖案。再往后倒退幾層,你可能會看到網絡在尋找眼睛或耳朵或嘴巴或輪子這樣的組成部件。
深度CNN中的每一層都逐步建立起越來越高層次的特征表征。最后幾層往往是專門針對輸入模型的數據。另一方面,早期的圖層更為通用。而遷移學習就是當你在一個數據集上訓練CNN時,切掉最后一層,在不同的數據集上重新訓練最后一層的模型。直觀地說,你正在重新訓練模型以識別不同的高級特征。因此,訓練時間會減少很多,所以當你沒有足夠的數據或者訓練需要太多的資源時,遷移學習是一個有用的工具。
結語
這篇文章簡單介紹了深度學習,如果你想了解更多更深層次的東西,建議你繼續閱讀以下資料:
Andrew Beam “Deep Learning 101”http://beamandrew.github.io/deeplearning/2017/02/23/deep_learning_101_part1.html
Andrey Kurenkov “A Brief History of Neural Nets and Deep Learning”http://www.andreykurenkov.com/writing/a-brief-history-of-neural-nets-and-deep-learning/
Adit Deshpande? “A Beginner’s Guide to Understanding Convolutional Neural Networks”https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/
Chris Olah “Understanding LSTM Networks”http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Algobean? “Artificial Neural Networks”https://algobeans.com/2016/03/13/how-do-computers-recognise-handwriting-using-artificial-neural-networks/
Andrej Karpathy “The Unreasonable Effectiveness of Recurrent Neural Networks”http://karpathy.github.io/2015/05/21/rnn-effectiveness/
深度學習強烈注重技術。對每一個新想法都沒有太多具體的解釋。 大多數新想法都附帶了實驗結果來證明它們能夠工作。深度學習就像玩樂高。掌握樂高跟掌握其他藝術一樣具有挑戰性,但入門樂高可是相對容易很多的。祝你學習愉快~