AI從業人員需要掌握的10大算法(方法)

2019-08-04     AI公園
作者:James Le
編譯:ronghuaiyang

導讀

這10個算法(方法)可以說是目前深度學習中非常基礎和出鏡率非常高的算法和方法,關鍵是非常的有效,一起來看看吧!

過去十年,人們對機器學習的興趣激增。你幾乎每天都能在計算機科學項目、行業會議和華爾街日報上看到機器學習。在所有關於機器學習的討論中,許多人把它能做什麼與希望它能做什麼混為一談。從根本上說,機器學習是利用算法從原始數據中提取信息,並用某種模型表示出來。我們使用這個模型來推斷關於尚未建模的其他數據的信息。

神經網絡是機器學習的一種模型,它們已經存在至少50年了。神經網絡的基本單位是節點,它是模仿哺乳動物大腦中的生物神經元。神經元之間的連接也以生物大腦為模型,這些連接隨著時間的推移而發展(通過「訓練」)。

在20世紀80年代中期和90年代早期,神經網絡在架構上取得了許多重要的進步。然而,獲得良好結果所需的時間和數據減少了實用的速度,從而降低了人們對它的興趣。在21世紀初,計算能力呈指數級增長,業界見證了計算技術的「寒武紀大爆發」,這在此之前是不可能的。深度學習(Deep learning)在那十年爆炸式的計算增長中脫穎而出,成為該領域的有力競爭者,贏得了許多重要的機器學習競賽。截至2017年,投資者的興趣並未降溫,今天,我們在機器學習的每個角落都可以看到深度學習。

在這裡,我想分享10種強大的深度學習方法, AI工程師可以應用到他們的機器學習問題中。但首先,讓我們來定義什麼是深度學習。對許多人來說,深度學習一直是一個難以定義的挑戰,因為在過去十年中,它的形式發生了緩慢的變化。為了直觀地將深度學習置於語境中,下圖說明了人工智慧、機器學習和深度學習之間的關係的概念。

人工智慧的領域很廣,已經存在很長時間了。深度學習是機器學習領域的一個子集,機器學習是人工智慧的一個子領域。深度學習網絡與「古典的」前饋多層網絡的區別在於:

  • 比之前的網絡更多的神經元
  • 連接層的更複雜方法
  • 有「寒武紀大爆炸」式的計算能力來進行訓練
  • 自動特徵提取

當我說「更多的神經元」時,我的意思是神經元的數量在過去的幾年裡一直在上升,可以表達更複雜的模型。層也從多層網絡中完全連接的每一層發展到卷積神經網絡中各層之間神經元的局部連接塊,再到循環神經網絡中同一神經元的循環連接(除了前一層的連接)。

那麼深度學習可以定義為以下四種基本網絡架構之一的具有大量參數和層次的神經網絡:

  • 無監督預先訓練網絡
  • 卷積神經網絡
  • 循環神經網絡
  • 遞歸神經網絡

在這篇文章中,我主要對後3個架構感興趣。卷積神經網絡基本上是一個標準的神經網絡,它使用共享的權值進行了跨空間的擴展。CNN的設計是通過內部的卷積來識別圖像,卷積可以看到圖像上識別的物體的邊緣。循環神經網絡基本上是一種標準的神經網絡,它將輸出送到下一個時間步而不是下一層。RNN用於識別序列,例如語音信號或文本。它內部有循環,這意味著網絡中存在短時記憶。遞歸神經網絡更像是一個層次網絡,其中輸入序列實際上沒有時間的概念,但輸入必須以樹的方式分層處理。下面的10個方法可以應用於所有這些體系結構。

1 —反向傳播

反向傳播只是計算函數的偏導數(或梯度)的一種方法,它的形式是函數的復合形式(如神經網絡)。當你使用基於梯度的方法解決優化問題時(梯度下降只是其中之一),你需要在每次疊代中計算函數梯度。

對於神經網絡,目標函數具有組合形式。如何計算梯度?有兩種常見的方法:(i) 解析微分。你知道函數的形式。你只要用鏈式法則(基本微積分)計算導數就行了。(ii) 近似微分利用有限差分。這種方法的計算代價很高,因為函數求值的個數是O(N),其中N是參數的個數。與解析微分相比,這個計算代價是非常大的。然而,有限差分通常用於調試時驗證反向傳播的實現是不是正確。

2 — 隨機梯度下降

一種直觀的方法來考慮梯度下降是想像一條河流的路徑起源於山頂。坡度下降的目標正是這條河努力要達到的目標,即從山上爬下來,到達山腳的最低處。

現在,如果山的地形是這樣形成的,在到達最終目的地(山腳的最低點)之前,河流不會在任何地方完全停止流動,那麼這就是我們想要的理想情況。在機器學習中,這相當於說,我們已經從初始點(山頂)開始找到了解決方案的全局最小(或最優)。然而,有可能是地形的原因導致了河流的流經路徑上有幾個坑,這可能會使得河流的流動陷入困境並停滯不前。在機器學習術語中,這種凹坑被稱為局部極小解,這是不可取的。有很多方法可以解決這個問題(我沒有討論這個問題)。

3 — 學習率下降

在隨機梯度下降優化過程調整學習率可以提高性能並減少訓練時間。有時這被稱為「學習率退火」或「自適應學習率」。在訓練過程中,對學習率的最簡單、也許也是最常用的調整是隨著時間的推移降低學習率的技術。當使用較大的學習率值時,這些方法可以在訓練過程的開始時進行較大的更改,並降低學習率,從而在訓練過程的後期對權重進行較小的更新,從而減少更新的次數。這樣做的效果是,及早快速學習良好的權重,然後對其進行微調。

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

  • 根據時間逐步降低學習速度。
  • 在特定時間點對學習率進行大幅的下降。

4 — Dropout

具有大量參數的深度神經網絡是非常強大的機器學習系統。然而,在這樣的網絡中,過擬合是一個嚴重的問題。大型的網絡用起來往往很慢,這樣的話,想通過對多個大型神經網絡組合的方式來解決過擬合問題就非常困難了。Dropout是解決這個問題的一種技術。

其關鍵思想是,在訓練過程中隨機地從神經網絡中刪除單元(以及它們的連接)。這就避免了神經元之間的過度協作。在訓練過程中,從指數數量的不同的「稀疏」網絡對神經元進行dropout。在測試時,簡單地使用具有較小權重的單個網絡,就可以很容易地近似所有這些稀疏網絡的預測平均值的效果。這大大減少了過擬合,與其他正則化方法相比有了很大的改進。Dropout在視覺、語音識別、文檔分類和計算生物學等方面改善了神經網絡在監督學習任務中的性能,在許多基準數據集上獲得了最先進的結果。

5 — 最大池化

Max池是一個基於採樣的離散化過程。目標是對輸入表示(圖像、隱藏層輸出矩陣等)進行下採樣,降低其維數,並允許對被包含的特徵的子區域做出估計。

這樣做的部分原因是,通過提供一種抽象的表示形式來幫助減少過擬合。此外,它還通過減少要學習的參數的數量來降低計算成本,並為內部表示提供基本的平移不變性。最大池化是通過對通常是不重疊的子區域使用最大化濾波器來實現的。

6 — Batch Normalization

神經網絡包括深度網絡都需要對權值初始化和學習參數進行仔細的調試,Batch Normalization可以使得對初始化和學習的要求放鬆一點。

權重問題:

無論初始化的權重是隨機的還是經驗選擇的,它們都與學習的權重相差甚遠。考慮一個mini batch,在初始階段,在所需的特徵激活方面會有許多異常值。

深度神經網絡本身是不適定的,即初始層的一個小擾動會導致後一層的大變化。

在反向傳播過程中,這些現象會對梯度造成干擾,這意味著在學習權重以產生所需輸出之前,梯度必須對異常值進行補償。這就需要額外的時間來收斂。

Batch normalization將這些梯度從分散的離群值變成歸一化的值,並在mini batch的範圍內讓它們向共同的目標流動(通過對它們進行歸一化)。

學習率問題:一般情況下,學習率保持在較小的範圍內,只有很小一部分梯度可以修正權重,原因是異常激活的梯度不應該影響學習到的激活。通過Batch normalization,這些異常激活被減少,因此可以使用較高的學習率來加速學習過程。

7 — 長短時記憶Long Short-Term Memory:

LSTM網絡與遞歸神經網絡中常見的神經元有以下三個不同之處:

  1. 它可以控制輸入什麼時候進入神經元
  2. 它可以控制何時記住上一個時間步驟中計算的內容
  3. 它可以控制何時將輸出傳遞到下一個時間步

LSTM的美妙之處在於,它根據當前輸入本身來決定這一切。

當前時間戳處的輸入信號x(t)決定了以上3個點。輸入門為點1做一個決定,忘記門在點2上做決定,輸出門在點3上做決定。僅憑輸入就能做出這三個決定。它的靈感來自於我們的大腦如何工作,以及如何處理基於輸入的突然的上下文切換。

8 — Skip-gram:

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

skip-gram模型(以及許多其他詞嵌入模型)背後的主要思想如下:如果兩個詞共享相似的上下文,那麼這兩個詞是相似的。

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

基於上述假設,你可以考慮一個上下文窗口(包含k個連續項的窗口)。然後你應該跳過其中一個單詞,試著學習一個神經網絡,它能得到所有的詞,除了被跳過的那個,並預測被跳過的那個。因此,如果兩個詞在一個大型語料庫中重複地共享相似的上下文,那麼這些詞的嵌入向量將具有相近的向量。

9 — 連續詞袋模型:

在自然語言處理問題中,我們希望將文檔中的每個單詞表示為一個數字向量,這樣在類似上下文中出現的單詞的向量就會非常接近。在連續詞袋模型中,目標是能夠使用特定單詞周圍的上下文並預測特定的單詞。

我們通過在一個大語料庫中使用很多很多的句子來做到這一點,每次我們看到一個單詞,我們就使用周圍的單詞。然後我們將上下文單詞輸入神經網絡,並預測該上下文中心的單詞。

當我們有數千個這樣的上下文單詞和中心單詞時,我們就有了神經網絡數據集的一個實例。我們對神經網絡進行訓練,最後編碼後的隱含層輸出表示特定單詞的嵌入。當我們對大量的句子進行訓練時,在相似語境下的單詞會得到相似的向量。

10 — 遷移學習:

讓我們考慮一下圖像是如何通過卷積神經網絡的。假設你有一個圖像,你對它進行卷積,你得到像素的組合作為輸出。假設它們是邊緣。現在再次應用卷積,現在你的輸出是邊緣或者線的組合。現在再次應用卷積,你的輸出是線的組合,等等。你可以把它想像成每一層都在尋找一個特定的模式。神經網絡的最後一層會變得非常特殊。如果你在ImageNet上訓練,你的網絡的最後一層會尋找孩子、狗、飛機或其他東西。在後面幾層,你可能會看到網絡在尋找眼睛、耳朵、嘴巴或輪子。

深度CNN中的每一層都在逐步構建越來越高級的特徵表示。最後兩層往往專門處理你輸入模型的隨便什麼數據。另一方面,早期的層更加通用,在更大的圖片類中有很多簡單的模式。

遷移學習就是說,你在一個數據集上訓練CNN,去掉最後一層,然後在另一個數據集上重新訓練模型的最後一層。直觀地說,你是在對模型進行再訓練,以識別不同的高級特徵。因此,當你沒有足夠的數據或者訓練需要太多的資源時,遷移學習是一個有用的工具。

深度學習非常注重技術。對於每一個新想法都沒有太多具體的解釋,大多數新想法的提出都附有實驗結果,以證明它們是可行的。深度學習就像玩樂高。掌握樂高積木和其他藝術一樣具有挑戰性,但更容易入門。

英文原文:https://medium.com/cracking-the-data-science-interview/the-10-deep-learning-methods-ai-practitioners-need-to-apply-885259f402c1

更多文章,請關注微信公眾號:AI公園

文章來源: https://twgreatdaily.com/zh/jQngXWwBUcHTFCnfDZIn.html