AI面試必備!你不可不知的10個深度學習方法

過去十年來,人們對機器學習的興趣經歷了爆炸式的增加。你幾乎天天都能在計算機科學程序、行業會議和《華爾街日報》(Wall Street Journal)上看到機器學習的影子。在全部關於機器學習的討論中,許多人都將機器學習可以作什麼,與他們但願機器學習可以作什麼混爲一談了。從根本上來講,機器學習就是使用算法從原始數據中提取信息,並在某種類型的模型中表示出來。咱們使用這個模型來推斷咱們還沒有建模的其餘數據。算法

神經網絡是機器學習中的一種模型;它們已經存在至少有 50 年了。神經網絡的基本單元是一個節點,它的靈感源自哺乳動物大腦中的生物神經元。神經元節點之間的鏈接也模仿了生物大腦,也會像生物大腦那樣不斷演化(即經過「訓練」的方式)。數組

許多重要的神經網絡架構都是在上世紀八十年代中期和九十年代早期完成的。不過,要獲得良好的結果,須要大量的時間和數據,當時計算機處理的能力尚不足以知足這些要求,人們所以對機器學習的熱情也下降了。這一尷尬的局面直到 21 世紀初期才得以打破:這時候計算能力呈指數級增加。業界目擊了計算技術的「寒武紀大爆發」,而在此以前,這些都是不可想象的。在這十年中,深度學習以機器學習領域的重要競爭者的姿態,在計算能力爆炸式增加中脫穎而出。這種熱度直到 2017 年仍未降溫。今天,咱們在機器學習中的每一個角落,都能看到深度學習的身影。網絡

爲了可以跟上這一潮流,我選修了 Udacity 的「深度學習」課程(http://u6.gg/e6fJx),這門課程很好地介紹了深度學習的動機、在 TensorFlow 的複雜、大規模數據集中學習的智能系統的設計。在課堂做業中,我使用並開發了用於圖像識別的卷積神經網絡,用於天然語言處理的嵌入式神經網絡,以及使用循環神經網絡 / 長短時間記憶的字符級文本生成。Jupiter Notebook 中全部代碼均可以在這個 GitHub 存儲庫中找到:http://u6.gg/e6fMD架構

下圖是其中一個做業的結果,詞向量的 t-SNE 投影,經過類似性進行聚類。app

圖片

後來我閱讀了這方面的學術論文。據個人研究得出,下面是一些對機器學習領域發展產生巨大影響的出版物:  框架

  • NYU:《Gradient-Based Learning Applied to Document Recognition》,1998 年。將卷積神經網絡引入機器學習領域。http://u6.gg/e6fNP機器學習

  • Toronto:《Deep Boltzmann Machines》,2009 年。爲玻爾茲曼機(Boltzmann Machines)提出了一種新的學習算法,該算法包含了許多隱藏變量層。http://u6.gg/e6fPdide

  • Stanford 和 Google:《Building High-Level Features Using Large-Scale Unsupervised Learning》,2012 年。解決了僅從無標記數據構建高級特定類別的特徵檢測器的問題。http://u6.gg/e6fPr函數

  • Berkeley:《DeCAF — A Deep Convolutional Activation Feature for Generic Visual Recognition》,2013。發佈了 DeCAF,一種深度卷積激活特徵的開源實現,以及全部相關的網絡參數,使視覺研究人員可以在一系列視覺概念學習範例中進行深度表徵的實驗。http://u6.gg/e6fP6工具

  • DeepMind:《Playing Atari with Deep Reinforcement Learning》,2016 年。提出了第一個使用強化學習直接從高維感官輸入中成功學習控制策略的深度學習模型。http://u6.gg/e6fPT

經過研究和學習這些學術論文,我學到了不少關於深度學習的知識。我想在本分中分享 10 個強大的深度學習的方法,AI 工程師能夠將這些方法應用到機器學習的問題中。但首先,讓咱們先定義什麼是深度學習。如何定義深度學習對許多人來講是一個挑戰,由於在過去十年,深度學習的形式都在緩慢地發生變化。爲了直觀地解釋深度學習,以下圖所示,展現了人工智能、機器學習和深度學習之間關係的概念。

圖片

人工智能領域至關普遍,存在已久。深度學習是機器學習領域的一個子集,而機器學習是人工智能的一個子領域。深度學習網絡與「典型」前饋多層網絡的區別以下:  

  • 深度學習網絡的神經元比之前的網絡更多

  • 深度學習網絡的鏈接層的方式更爲複雜

  • 深度學習網絡須要像「寒武紀大爆炸」的計算能力進行訓練

  • 深度學習網絡具有自動特徵提取的能力

上文提到的「更多的神經元」,意思是指神經元的數量隨着時間的推移而增長,以表達更爲複雜的模型。層也從多層網絡中徹底鏈接的各層演變爲卷積神經網絡中各層之間局部鏈接的神經元片斷,以及在遞歸神經網絡中同一神經元的循環連接(除了前一層的鏈接)。

所以,深度學習能夠被定義爲如下四個基本網絡框架中具備大量參數和層數的神經網絡:  

  • 無監督預訓練網絡(Unsupervised Pre-trained Networks)

  • 卷積神經網絡(Convolutional Neural Networks)

  • 循環神經網絡(Recurrent Neural Networks)

  • 遞歸神經網絡(Recursive Neural Networks)

在本文中,我主要對後三種架構感興趣。

卷積神經網絡(Convolutional Neural Network,CNN)基本上就是一種標準的神經網絡,經過使用共享權重在空間中擴展。卷積神經網絡旨在經過內部的卷積來識別圖像,它能夠看到圖像上識別對象的邊緣。

循環神經網絡(Recurrent Neural Network)基本上也是一種標準的神經網絡的擴展,它經過下一個時間步驟中,而不是同一個時間步驟中進入下一層。循環神經網絡旨在識別序列,例如語音信號或文本。它內部有循環,這意味着網絡中存在短時記憶。

遞歸神經網絡(Recursive Neural Network)更像是一個分層網絡,其中輸入序列實際上沒有時間方面,但輸入必須以樹形方式進行分層處理。

下面提到的 10 個方法能夠應用於全部這些架構。

1 — 反向傳播

反向傳播(Back-prop)簡單來講就是計算函數的偏導數(或梯度)的一種方法,它具備函數組合的形式(如神經網絡)。當你使用基於梯度的方法(梯度降低法只是其中之一)來解決最優問題時,須要在每次迭代中計算函數梯度。

對神經網絡來講,目標函數具備組合的形式。如何計算梯度呢?有兩種常見的方法能夠計算:

(i) 解析微分:知道函數形式時,只需使用鏈式法則(基本微積分)計算計算導數。

(ii) 有限差分近似微分:這種方法運算量很大,由於函數求職的個數是 O(N),其中 N 是參數的個數。與解析微分相比,這種方法運算量極大。可是,有限差分一般用於在調試時驗證反向傳播實現。

2 — 隨機梯度降低法

對梯度降低的一種直觀理解方法是,想象一條源自山頂向下的河流。梯度降低的目標正是河流努力要達到的目標:到達最低端(山腳處)。

如今,若是山勢可以使河流在到達最終目的地以前(即山麓最低處)沒必要徹底停留,這正是咱們想要的理想狀況。在機器學習中,這至關因而說,咱們已經從初始點(山頂)開始找到解決方案的全局最小值(或最優值)。然而,可能因爲地形的緣由,河道中會造成幾個坑窪,會迫使河流陷入困境並停滯不前。在機器學習術語中,這些坑窪被稱爲局部最小值,都是不可取的。有不少方法能夠解決這個問題。限於篇幅,我不打算討論這個問題。

所以,梯度降低法很容易陷入局部最小值,這取決於地勢(或機器學習術語中的函數)。可是,當你有一種特殊的山地地勢(好比像一隻碗,用機器學習術語稱爲凸函數)時,算法老是可以保證找到最優解。你能夠想象一下一條河流。這些特殊的地形(又稱凸函數)對機器學習中的優化老是有好處。此外,你遵循什麼樣的路徑,要取決於你最初是從山頂什麼地方開始的(即函數的初始值)。相似的,根據不一樣的河流速度(即梯度降低算法的學習率或步長),你可能會以不一樣的方式到達最終目的地。這兩個因素都會影響你是否掉坑(局部最小值)或可否避免。

3 — 學習率衰減

圖片

調整隨機梯度降低優化算法的學習率能夠提升性能並縮短訓練時間。有時這被稱爲學習率退火( learning rate annealing)或自適應學習率(adaptive learning rates)。在訓練過程當中,最簡單、也是最經常使用的適應學習率的方法是逐漸下降學習率的技術。在訓練初期使用較大的學習率,能夠對學習率進行大幅調整;在訓練後期,下降學習率,以一個較小的速率更新權重。這種方法在早期能夠快速學習得到較好的權重,並在後期對權重進行微調。

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

  • 線性逐步下降學習率。

  • 在特定時點大幅下降學習率。

4 — Dropout

具備大量參數的深度神經網絡是很是強大的機器學習系統。然而,在這樣的網絡中,過擬合是一個嚴重的問題。大型網絡的使用起來也很慢,所以在測試時結合許多不一樣大型神經網絡的預測,很難處理過擬合問題。Dropout 是解決這個問題的一種方法。

圖片

關鍵思想是在訓練過程當中從神經網絡中隨機刪除單元 (以及它們的鏈接)。這就防止了單位之間的過分適應。在訓練過程當中,從指數級不一樣的「稀疏」網絡中抽取 dropout 樣本。在測試時,只需使用具備較小權重的單解開網絡(single untwined network),就能夠很容易地估計出全部這些稀疏網絡的平均預測效果。這就大大減小了過擬合,而且對其餘正則化方法進行了重大改進。Dropout 已被證實能夠改善神經網絡在視覺、語音識別、文檔分類和計算生物學等監督學習的任務性能,在許多基準數據集上得到了最優秀的結果。

5 — 最大池化

最大池化(Max pooling)是基於採樣的離散化過程。目標是對輸入表徵(如圖像、隱藏層輸出矩陣等)進行降採樣(down-sample),減少其維數,並容許對包含在子區域中的特徵進行假設。

這部分是爲了經過提供抽象的表徵形式來幫助過擬合。同時,經過減小學習參數的數量,下降了計算成本,爲內部表徵提供了基本的平移不變性。最大池化是經過對初始表徵的一般不重疊的子區域應用最大過濾器(Max filter)來實現的。

6 — 批量歸一化

固然,包括深度網絡的神經網絡須要仔細調整權重初始化和學習參數,批量歸一化有助於使這一過程稍微輕鬆些。

權重問題:  

  • 不管權重的初始化是什麼,無論是隨機的仍是經驗選擇的,它們都與學習後的權重相差甚遠。考慮一個小批量,在最初的輪數(epoch)中,根據所需的特性激活,會有不少離羣值。

  • 深度神經網絡自己就是不適定(ill-posed)的,即初始層的一個微小擾動會致使後面的層發生很大的變化。

在反向傳播過程當中,這些現象會分散梯度的注意力,這意味着梯度必須在學習產生所需輸出的權重以前補償離羣值。這就須要額外的輪數來收斂。

批量歸一化將這些梯度從分散歸一化到離羣值,並在一個小批量的範圍內朝着共同目標收斂(經過對它們進行歸一化)。

學習率問題:通常來講,學習率保持得很小,使得只有一小部分梯度修正了權重,緣由是離羣值激活的梯度不該該影響學習好的權重。經過批量歸一化,這些離羣值激活被減小,所以更高的學習率能夠用來加速學習過程。

7 — 長短時間記憶網絡

長短時間記憶(Long short-term memory,LSTM)網絡與遞歸神經網絡中的普通神經元有如下三個區別:  

  • 它能夠控制什麼時候讓輸入進入神經元。

  • 它能夠控制決定什麼時候記住在前一個時間步驟中計算的內容。

  • 它能夠控制決定什麼時候將輸出傳遞給下一個時間戳。

LSTM 的優勢在於:它基於當前輸入自己來決定全部這些。所以,若是你看一下以下圖表,就會明白了:

圖片

當前時間戳上的輸入信號 x(t) 決定了以上 3 個點。輸入門對第 1 點作出決定。遺忘門在第 2 點作出決定。輸出門在第 3 點作出決定。單是輸入就能作出這三個決定。這是受咱們大腦工做方式的啓發,能夠根據輸入處理忽然的上下文切換。

8 — Skip-gram

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

skip-gram 模型 (以及許多其餘詞嵌入模型) 背後的主要思想以下:若是兩個詞彙具備類似的上下文,那麼它們就是類似的。

圖片

換句話說,假設你有一個句子,好比「貓是哺乳動物」。若是你用「狗」而不是「貓」這個詞,這個句子仍然是一個有意義的句子。所以在這個例子中,「狗」和「貓」能夠共享相同的上下文 (即「是哺乳動物」)。

基於上述假設,你能夠考慮上下文窗口(包含 k 個連續項的窗口)。而後你應該跳過其中一個單詞,試着學習神經網絡,它能獲得全部的詞,除了跳過的那個,並預測跳過的那個。所以,若是兩個詞在一個大型語料庫中重複共享類似的上下文,這些詞的嵌入向量就會有相近的向量。

9 - 連續詞袋

在天然語言處理問題中,咱們但願學習如何將文檔中的每一個單詞表示爲數字向量,以便出如今類似上下文中的單詞具備彼此接近的向量。在連續詞袋(Continuous Bag Of Words)模型中,目標是可以使用特定單詞周圍的上下文並預測特定單詞。

咱們經過在大型語料庫中抽取大量的句子來作到這一點:每次咱們看到一個詞,咱們就取它周圍的詞。而後咱們將上下文的單詞輸入到神經網絡中,並預測這個上下文中心的詞。

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

10 — 遷移學習

讓咱們考慮圖像是如何經過卷積神經網絡處理的。假設你有一個圖像,你對它應用卷積,你獲得像素的組合做爲輸出。假設它們是邊。如今再次應用卷積,如今輸出的是邊或線的組合。而後再次應用卷積,這時候輸出是線的組合,以此類推。你能夠把它看做是尋找特定模式的每一層。神經網絡的最後一層趨向於變得很是專業化。也許若是你正在使用 ImageNet,你的網絡的最後一層將用於尋找孩子、狗、飛機或者其餘什麼。在後面幾層你可能會看到網絡在尋找眼睛、耳朵、嘴巴或者輪子。

圖片

深度 CNN 中的每一層都在不斷地構建更高層次的特徵表徵。最後幾個層每每專門針對輸入到模型中的任何數據。另外一方面,前面的層更加通用,在大量的圖片中有許多簡單的模式。

遷移學習是當你對一個數據集進行卷積神經網絡訓練時,切掉最後一層,在另外一個數據集中從新訓練模型最後一層。從直覺上來講,你正在從新訓練模型以識別不一樣的更高級別的特徵。所以,當你沒有足夠的數據或者訓練佔用了太多的資源時,遷移學習就是一個有用的工具。

本文只展現了這些方法的通常概述。我建議閱讀下面的文章以得到更詳細的解釋:  

  • Andrew Beam:《Deep Learning 101》 :http://u6.gg/e6fX7

  • Andrey Kurenkov:《A Brief History of Neural Nets and Deep Learning》http://u6.gg/e6fXN

  • Adit Deshpande:《A Beginner’s Guide to Understanding Convolutional Neural Networks》http://u6.gg/e6fYm

  • Chris Olah:《Understanding LSTM Networks》http://u6.gg/e6fY2

  • Algobean:《Artificial Neural Networks》http://u6.gg/e6fYL

  • Andrej Karpathy:《The Unreasonable Effectiveness of Recurrent Neural Networks》http://u6.gg/e6fYY

深度學習很是注重技術實踐。對於每個新想法都沒有太多具體的解釋。大多數新想法都是經過實驗結果出來的,以證實它們是可行的。深度學習就像玩樂高積木。掌握樂高和其餘任何藝術同樣具備挑戰性,但入門更容易。

相關文章
相關標籤/搜索