大數據文摘作品 編譯:小魚、肖依月、高寧、Aileen 在過去十年里,大眾對機器學習的興趣與日俱增。幾乎每天都可以在計算機科學程序、行業會議和華爾街日報上看到機器學習的身影。在所有關于機器學習的討論中,很多都將“機器學習的作用”和“人類希望機器學習能夠做什么”這兩個觀念混為一談。從根本上說,機器學習是使用算法從原始數據中提取信息,并用某種模型進行表示,然后對于一些我們尚未建模的數據,使用模型來進行推斷。 神經網絡是機器學習模型的一種,而且已經存在了至少50年了。神經網絡的基本單元是節點,源于哺乳動物大腦中的生物神經元。神經元之間的聯系也是基本生物大腦建立的,這些聯系隨著時間的推移不斷進化(即“訓練”)。 在二十世紀八十年代中期和九十年代初期,神經網絡有了許多重要的發展。然而,為了獲得較好結果需要大量的時間和數據,這減緩了神經網絡發展的速度,也降低了當時人們的關注度。在二十一世紀初,計算能力呈指數級增長,業界認為計算技術的發展比“寒武紀爆炸”都來的迅猛。在計算能力爆炸式增長的十年中,作為神經網絡領域的一個重要角色,深度學習出現了,贏得了許多重要的機器學習競賽。2017年,深度學習的熱度仍然不減。今天,在機器學習的出現的地方都可以看到深度學習的身影。 最近,我已經開始閱讀關于深度學習的學術論文。根據我的個人研究,下列出版內容對這個領域的發展產生了巨大的影響:
通過研究和學習,關于深度學習相關知識我收獲頗豐。在這里,我想分享AI工程師用于解決機器學習問題的10個強大的深度學習方法。但首先,我們需要定義什么是深度學習。 定義深度學習是很多人面臨的一個挑戰,因為它的形式在過去的十年中已經慢慢地發生了改變。為了在視覺上定義深度學習,下圖展示了人工智能AI,機器學習和深度學習之間的關系。 人工智能領域廣泛且存在時間較長。深度學習是機器學習領域的一個子集,而機器學習是AI領域的一個子集。一般將深度學習網絡與“典型”前饋多層網絡從如下方面進行區分:
上述 “更多的神經元”,是指近年來神經元的數量不斷增加,深度學習就可以表示更為復雜的模型。層也從多層網絡中每一層的完全連接,進化成卷積神經網絡中神經元片段的局部連接,以及與遞歸神經網絡中的同一神經元的循環連接(與前一層的連接除外)。 在四種基本網絡架構中,深度學習可以被定義為具有大量參數和層數的神經網絡:
在這篇文章中,我主要關注后三種網絡架構。卷積神經網絡基本上是一個使用共享權重擴展空間的標準神經網絡。CNN通過在內部卷積來識別圖像,它可以看到圖像上識別對象的邊緣。遞歸神經網絡基本上是一個使用時間延伸擴展空間的標準神經網絡,它提取進入下一時間步的邊沿,而不是在同一時間進入下一層。RNN進行序列識別,例如語音或文本信號,因其內部具有循環,意味著在RNN網絡中存在短時記憶。遞歸神經網絡更類似于分層網絡,其中輸入序列實際上與時間無關,但輸入必須以樹狀方式分層處理。以下10種方法適用于上述所有的網絡架構。 1—反向傳播(Back-Propagation) 反向傳播是一種簡單計算函數的偏導數(或梯度)的方法,它的形式是函數組合(如神經網絡)。當你使用基于梯度的方法求解最優化問題(梯度下降只是其中之一)時,你想在每次迭代中計算函數梯度。 對于一個神經網絡,其目標函數是組合形式。如何計算梯度?有2種常規方法:(i)分析微分法。函數形式已知,你只需要用鏈式法則(基本微積分)計算導數。(ii)有限差分近似微分。這種方法計算成本昂貴,因為評估函數的數量是O(N),其中N是參數的個數。與解析微分相比,這種方法花費代價更大。然而在調試時,通常使用有限差分驗證反向傳播的執行效果。 2—隨機梯度下降法(Stochasitc Gradient Descent) 理解梯度下降的一種直觀的方式是,想象一條源于山頂的河流的路徑。梯度下降的目標正是河流努力實現的目標—即從山頂流到最底點(在山麓處)。 現在,如果山的地形是這樣一種形狀,即河流在到達最終目的地(山麓的最低點)之前不會停留,這也是我們所希望的理想情況。在機器學習中,是指從初始點(山頂)開始,我們已經找到了全局最小值(或最優值)的方案。然而,可能由于地形性質,導致河流路徑出現若干的坑洼,會迫使河流困住和停滯。在機器學習方面,這種坑洼被稱為局部最優解,這是我們不想要的情況。當然有很多方法可以解決局部最優解問題,這里我不打算進一步討論。 因此,由于地形的性質(或機器學習中函數的性質),梯度下降很容易卡在局部最小值。但是,當你找到一個特殊的山地形狀(像一個碗,在機器學習的術語中稱為凸函數),那么算法始終能夠找到最優值。你可以將想象的這條河流可視化。在機器學習中,這些特殊的地形(也稱為凸函數)總是需要優化。另外,你從山頂開始(即函數的初始值)的位置不同,最終你到達山底的路徑也完全不同。同樣,根據河流的流淌速度(即梯度下降算法的學習速率或步長),你可能會以不同的方式到達目的地。你是否會陷入或避免一個坑(局部最小),都會被這兩個標準影響。 3—學習速率衰減(Learning Rate Decay) 調整學習速率來進行隨機梯度下降中的過程優化,可以提高性能并減少訓練時間。有時這被稱為學習速率退火或自適應學習速率。隨著時間的推移而降低學習速率是訓練過程中最簡單也是最常用的自適應學習速率技術。在訓練初期使用較大的學習速率值,可以對學習速率進行大幅調整;在訓練后期,降低學習速率,使模型以一個較小的速率進行權重的更新。這種技術在早期可以快速學習獲得一些較好的權重,并在后期對權重進行微調。 兩個流行和簡單的學習速率衰減方法如下:
4-Dropout 擁有大量參數的深度神經網絡是非常強大的機器學習系統。然而,在這樣的網絡中過度擬合是一個很嚴重的問題。并且大型網絡的運行速度很慢,使得在測試階段,通過結合多個不同的大型神經網絡的預測來解決過擬合問題是很困難的。Dropout技術可以用來解決這個問題。 其關鍵的思想是,在訓練過程中隨機地從神經網絡中刪除單元(以及相應的連接),進而防止單元間的過度適應。在訓練過程中,在指數級的不同“稀疏”網絡中剔除樣本。在測試階段,很容易通過使用有較小權重的單解開網絡(untwinednetwork),將這些稀疏網絡的預測取平均進而逼近結果。這能有效地避免過擬合,并且相比其它的正則化方法能得到更大的性能提升。中,Dropout技術已經被證明在計算機視覺、語音識別、文本分類和計算生物學等領域的監督學習任務中能提升神經網絡的性能,并在多個基準測試數據集中達到頂尖結果。 5-最大池化 最大池化是一種基于樣本的離散化方法。目標是對輸入表征(圖像、隱藏層的輸出矩陣等)進行下采樣,降低維度并且允許對包括在子區域中的特征進行假設。 通過提供表征的抽象形式,這種方法在某種程度上有助于解決過擬合。同樣,它也通過減少學習參數的數量和提供基本的內部表征的轉換不變性來減少計算量。最大池化是通過將最大過濾器應用于通常不重疊的初始表征子區域來完成的。 6-批量歸一化(Batch Normalization) 當然,包括深度網絡在內的神經網絡需要仔細調整權重初始化和學習參數。批量歸一化能使這個過程更簡單。 權重問題:
在反向傳播過程中,這些現象會導致梯度的偏移,這意味著在學習權重以產生所需輸出之前,梯度必須補償異常值。而這將導致需要額外的時間才能收斂。 批量歸一化使這些梯度從離散到正常值,并在小批量范圍內(通過歸一化)向共同目標流動。 學習率問題: 通常來說,學習率保持較低,使得只有一小部分的梯度用來校正權重,原因是異常激活的梯度不應該影響已經學習好的權重。通過批量歸一化,這些異常值激活的可能性會被降低,從而可以使用更大的學習率加速學習過程。 7-長短期記憶(Long short-Term Memory) 長短期記憶網絡(LSTM network)的神經元和其他遞歸神經網絡(recurrent neural network)中常用神經元在以下三個方面有所不同:
LSTM的強大在于它能只基于當前的輸入就決定以上所有的值。請看下方的圖表: 當前時間標記處的輸入信號x(t)決定了上述所有3個點。輸入門(input gate)決定了第1點,遺忘門(forget gate)決定了第2點,輸出門(output gate)決定了第3點。只依賴輸入就能完成所有這三項決定。這受到了大腦工作機制的啟發,大腦可以基于輸入來處理突然的上下文切換。 8-Skip-gram 詞嵌入模型的目標是為每個詞匯項學習一個高維密集表征,其中嵌入向量之間的相似性顯示了相應詞語之間的語義或句法相似性。Skip-gram是一種學習詞嵌入算法的模型。 skip-gram 模型(和很多其它詞嵌入模型)背后的主要思想是:如果兩個詞匯項有相似的上下文,則它們是相似的。 換種說法,假設你有一個句子,比如“cats are mammals“,如果用”dogs“替換”cats“,該句子仍然是有意義的。因此在這個例子中,”dogs“和”cats“有相似的上下文(即”are mammals“)。 基于上述假設,我們可以考慮一個上下文的窗口(一個包含K個連續項的窗口)。那么你應該跳過其中一個詞,試著學習一個除了跳過的這個詞以外,還可以預測跳過的詞的神經網絡。因此,如果兩個詞在大語料庫中反復共享相似的上下文,那么這些詞的嵌入向量將具有相似的向量。 9-連續詞袋模型(Continuous Bag of Words) 在自然語言處理中,我們希望學習將文檔中的每一個單詞表示為一個數值向量,使得出現在相似上下文中的單詞有非常相似或相近的向量。在連續詞袋模型中,我們的目標是能利用圍繞一個特定單詞的上下文,預測這個特定單詞。 我們通過在一個大的語料庫中抽取大量的句子來做到這一點,每次看到一個單詞時,我們同時抽取它的上下文。然后我們將上下文單詞輸入到一個神經網絡,并預測在這個上下文中心的單詞。 當我們有成千上萬個這樣的上下文詞匯和中心詞時,我們就有了一個神經網絡數據集的實例。我們訓練這個神經網絡,在經過編碼的隱藏層的最終輸出中,我們得到了表示特定單詞的嵌入式表達。當我們對大量的句子進行訓練時也能發現,類似語境中的單詞恰巧得到相似的向量。 10-遷移學習(Transfer Learning) 讓我們考慮圖像到底是如何流經卷積神經網絡的。假設你有一張圖像,對其應用卷積,并得到像素的組合作為輸出。假設這些輸出是邊緣,再次應用卷積,那么現在輸出將是邊或線的組合。然后再次應用卷積,此時的輸出將是線的組合,以此類推……你可以把它看作是在每一層尋找一個特定的模式。神經網絡的最后一層往往會變得非常特異化。如果你基于ImageNet進行訓練,那么神經網絡的最后一層大概就是在尋找兒童、狗或者飛機等整體圖案。再往后倒退幾層,你可能會看到網絡在尋找眼睛、耳朵、嘴巴或者輪子等組成部件。 深度卷積神經網絡中的每一層都逐步建立起越來越高層次的特征表征,最后幾層往往是專門針對模型輸入端的任何數據。另一方面,前面的層則更為通用,是在一個大類圖片中有找到許多簡單的模式。 遷移學習就是當你在一個數據集上訓練CNN時,切掉最后一層,在不同的數據集上重新訓練模型的最后一層。直觀地說,你正在重新訓練模型以識別不同的高級特征。因此,訓練時間會減少很多,所以當你沒有足夠的數據或者訓練需要太多的資源時,遷移學習是一個有用的工具。 這篇文章簡單介紹了深度學習的一些方法,如果你想要了解更多、更深層次的東西,建議你繼續閱讀以下資料: Andrew Beam’s “Deep Learning 101” (深度學習基本) : http://beamandrew./deeplearning/2017/02/23/deep_learning_101_part1.html Andrey Kurenkov’s “A Brief History of Neural Nets and Deep Learning”(神經網絡和深度學習簡史): http://www./writing/a-brief-history-of-neural-nets-and-deep-learning/ Adit Deshpande’s “A Beginner’s Guide to Understanding Convolutional Neural Networks”(理解卷積神經網絡的入門指南): https://adeshpande3./adeshpande3./A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/ Chris Olah’s “Understanding LSTM Networks”(了解長短期記憶LSTM神經網絡): http://colah./posts/2015-08-Understanding-LSTMs/ Algobean’s “Artificial Neural Networks”(人工神經網絡): https:///2016/03/13/how-do-computers-recognise-handwriting-using-artificial-neural-networks/ Andrej Karpathy’s “The Unreasonable Effectiveness of Recurrent Neural Networks”(遞歸神經網絡的神奇有效性): http://karpathy./2015/05/21/rnn-effectiveness/ 深度學習是非常注重技術實踐的。本文中對每一個新想法都沒有太多具體的解釋,對于大多數新想法都附帶了實驗結果來證明它們能夠運作。學習深度學習就像玩樂高,掌握樂高和掌握其他藝術一樣具有挑戰性,但是入門樂高可是相對容易很多的。 原文鏈接:https:///the-10-deep-learning-methods-ai-practitioners-need-to-apply-885259f402c1 好課推薦 使用Keras快速構造深度學習模型實戰 Q:如果我已經在使用TensorFlow,為什么還要關心Keras? A:Keras提供了一個更簡單,更快速的方法來構建和訓練TensorFlow中的模型,而且性能沒有成本,因為模型仍然由同一個TensorFlow引擎運行。 所以如果你關心自己的時間和生產力,那你應該關心Keras。
—Keras作者Fran?ois Chollet 志愿者介紹 回復“志愿者”加入我們 |
|