吳恩達在推特上展現了一份由 TessFerrandez 完成的深度學習專項課程信息圖,這套信息圖優美地記錄了深度學習課程的知識與亮點。所以它不只僅適合初學者瞭解深度學習,還適合機器學習從業者和研究者複習基本概念。機器之心認爲這不只僅是一份課程筆記,同時仍是一套信息圖與備忘錄。下面,咱們將從深度學習基礎、卷積網絡和循環網絡三個方面介紹該筆記,並提供信息圖下載地址。
深度學習基礎
1 深度學習基本概念
監督學習:全部輸入數據都有肯定的對應輸出數據,在各類網絡架構中,輸入數據和輸出數據的節點層都位於網絡的兩端,訓練過程就是不斷地調整它們之間的網絡鏈接權重。
左上:列出了各類不一樣網絡架構的監督學習,好比標準的神經網絡(NN)可用於訓練房子特徵和房價之間的函數,卷積神經網絡(CNN)可用於訓練圖像和類別之間的函數,循環神經網絡(RNN)可用於訓練語音和文本之間的函數。
左下:分別展現了 NN、CNN 和 RNN 的簡化架構。這三種架構的前向過程各不相同,NN 使用的是權重矩陣(鏈接)和節點值相乘並陸續傳播至下一層節點的方式;CNN 使用矩形卷積核在圖像輸入上依次進行卷積操做、滑動,獲得下一層輸入的方式;RNN 記憶或遺忘先前時間步的信息覺得當前計算過程提供長期記憶。
右上:NN 能夠處理結構化數據(表格、數據庫等)和非結構化數據(圖像、音頻等)。
右下:深度學習能發展起來主要是因爲大數據的出現,神經網絡的訓練須要大量的數據;而大數據自己也反過來促進了更大型網絡的出現。深度學習研究的一大突破是新型激活函數的出現,用 ReLU 函數替換sigmoid 函數能夠在反向傳播中保持快速的梯度降低過程,sigmoid 函數在正無窮處和負無窮處會出現趨於零的導數,這正是梯度消失致使訓練緩慢甚至失敗的主要緣由。要研究深度學習,須要學會「idea—代碼—實驗—idea」的良性循環。
2 logistic 迴歸
左上:logistic 迴歸主要用於二分類問題,如圖中所示,logistic 迴歸能夠求解一張圖像是否是貓的問題,其中圖像是輸入(x),貓(1)或非貓(0)是輸出。咱們能夠將 logistic 迴歸當作將兩組數據點分離的問題,若是僅有線性迴歸(激活函數爲線性),則對於非線性邊界的數據點(例如,一組數據點被另外一組包圍)是沒法有效分離的,所以在這裏須要用非線性激活函數替換線性激活函數。在這個案例中,咱們使用的是 sigmoid 激活函數,它是值域爲(0, 1)的平滑函數,可使神經網絡的輸出獲得連續、歸一(機率值)的結果,例如當輸出節點爲(0.2, 0.8)時,斷定該圖像是非貓(0)。
左下:神經網絡的訓練目標是肯定最合適的權重 w 和偏置項 b,那這個過程是怎麼樣的呢?
這個分類其實就是一個優化問題,優化過程的目的是使預測值 y hat 和真實值 y 之間的差距最小,形式上能夠經過尋找目標函數的最小值來實現。因此咱們首先肯定目標函數(損失函數、代價函數)的形式,而後用梯度降低逐步更新 w、b,當損失函數達到最小值或者足夠小時,咱們就能得到很好的預測結果。
右上:損失函數值在參數曲面上變化的簡圖,使用梯度能夠找到最快的降低路徑,學習率的大小能夠決定收斂的速度和最終結果。學習率較大時,初期收斂很快,不易停留在局部極小值,但後期難以收斂到穩定的值;學習率較小時,狀況恰好相反。通常而言,咱們但願訓練初期學習率較大,後期學習率較小,以後會介紹變化學習率的訓練方法。
右下:總結整個訓練過程,從輸入節點 x 開始,經過前向傳播獲得預測輸出 y hat,用 y hat 和 y 獲得損失函數值,開始執行反向傳播,更新 w 和 b,重複迭代該過程,直到收斂。
3 淺層網絡的特色
左上:淺層網絡即隱藏層數較少,如圖所示,這裏僅有一個隱藏層。
-
sigmoid:sigmoid 函數經常使用於二分分類問題,或者多分類問題的最後一層,主要是因爲其歸一化特性。sigmoid 函數在兩側會出現梯度趨於零的狀況,會致使訓練緩慢。
-
tanh:相對於 sigmoid,tanh 函數的優勢是梯度值更大,可使訓練速度變快。
-
ReLU:能夠理解爲閾值激活(spiking model 的特例,相似生物神經的工做方式),該函數很經常使用,基本是默認選擇的激活函數,優勢是不會致使訓練緩慢的問題,而且因爲激活值爲零的節點不會參與反向傳播,該函數還有稀疏化網絡的效果。
-
Leaky ReLU:避免了零激活值的結果,使得反向傳播過程始終執行,但在實踐中不多用。
右上:爲何要使用激活函數呢?更準確地說是,爲何要使用非線性激活函數呢?
上圖中的實例能夠看出,沒有激活函數的神經網絡通過兩層的傳播,最終獲得的結果和單層的線性運算是同樣的,也就是說,沒有使用非線性激活函數的話,不管多少層的神經網絡都等價於單層神經網絡(不包含輸入層)。
當將全部參數初始化爲零的時候,會使全部的節點變得相同,在訓練過程當中只能學到相同的特徵,而沒法學到多層級、多樣化的特徵。解決辦法是隨機初始化全部參數,但僅需少許的方差就行,所以使用 Rand(0.01)進行初始化,其中 0.01 也是超參數之一。
4 深度神經網絡的特色
左上:神經網絡的參數化容量隨層數增長而指數式地增加,即某些深度神經網絡能解決的問題,淺層神經網絡須要相對的指數量級的計算才能解決。
左下:CNN 的深度網絡能夠將底層的簡單特徵逐層組合成愈來愈複雜的特徵,深度越大,其能分類的圖像的複雜度和多樣性就越大。RNN 的深度網絡也是一樣的道理,能夠將語音分解爲音素,再逐漸組合成字母、單詞、句子,執行復雜的語音到文本任務。
右邊:深度網絡的特色是須要大量的訓練數據和計算資源,其中涉及大量的矩陣運算,能夠在 GPU 上並行執行,還包含了大量的超參數,例如學習率、迭代次數、隱藏層數、激活函數選擇、學習率調整方案、批尺寸大小、正則化方法等。
5 誤差與方差
那麼部署你的機器學習模型須要注意些什麼?下圖展現了構建 ML 應用所須要的數據集分割、誤差與方差等問題。
如上所示,經典機器學習和深度學習模型所須要的樣本數有很是大的差異,深度學習的樣本數是經典 ML 的成千上萬倍。所以訓練集、開發集和測試集的分配也有很大的區別,固然咱們假設這些不一樣的數據集都服從同分布。
誤差與方差問題一樣是機器學習模型中常見的挑戰,上圖依次展現了由高誤差帶來的欠擬合和由高方差帶來的過擬合。通常而言,解決高誤差的問題是選擇更復雜的網絡或不一樣的神經網絡架構,而解決高方差的問題能夠添加正則化、減小模型冗餘或使用更多的數據進行訓練。
固然,機器學習模型須要注意的問題遠不止這些,但在配置咱們的 ML 應用中,它們是最基礎和最重要的部分。其它如數據預處理、數據歸一化、超參數的選擇等都在後面的信息圖中有所體現。
6 正則化
正則化是解決高方差或模型過擬合的主要手段,過去數年,研究者提出和開發了多種適合機器學習算法的正則化方法,如數據加強、L2 正則化(權重衰減)、L1 正則化、Dropout、Drop Connect、隨機池化和提早終止等。
如上圖左列所示,L1 和 L2 正則化也是是機器學習中使用最普遍的正則化方法。L1 正則化向目標函數添加正則化項,以減小參數的絕對值總和;而 L2 正則化中,添加正則化項的目的在於減小參數平方的總和。根據以前的研究,L1 正則化中的不少參數向量是稀疏向量,由於不少模型致使參數趨近於 0,所以它經常使用於特徵選擇設置中。此外,參數範數懲罰 L2 正則化能讓深度學習算法「感知」到具備較高方差的輸入 x,所以與輸出目標的協方差較小(相對增長方差)的特徵權重將會收縮。
在中間列中,上圖展現了 Dropout 技術,即暫時丟棄一部分神經元及其鏈接的方法。隨機丟棄神經元能夠防止過擬合,同時指數級、高效地鏈接不一樣網絡架構。通常使用了 Dropout 技術的神經網絡會設定一個保留率 p,而後每個神經元在一個批量的訓練中以機率 1-p 隨機選擇是否去掉。在最後進行推斷時全部神經元都須要保留,於是有更高的準確度。
Bagging 是經過結合多個模型下降泛化偏差的技術,主要的作法是分別訓練幾個不一樣的模型,而後讓全部模型表決測試樣例的輸出。而 Dropout 能夠被認爲是集成了大量深層神經網絡的 Bagging 方法,所以它提供了一種廉價的 Bagging 集成近似方法,可以訓練和評估值數據數量的神經網絡。
最後,上圖還描述了數據加強與提早終止等正則化方法。數據加強經過向訓練數據添加轉換或擾動來人工增長訓練數據集。數據加強技術如水平或垂直翻轉圖像、裁剪、色彩變換、擴展和旋轉一般應用在視覺表象和圖像分類中。而提早終止一般用於防止訓練中過分表達的模型泛化性能差。若是迭代次數太少,算法容易欠擬合(方差較小,誤差較大),而迭代次數太多,算法容易過擬合(方差較大,誤差較小)。所以,提早終止經過肯定迭代次數解決這個問題。
7 最優化
最優化是機器學習模型中很是很是重要的模塊,它不只主導了整個訓練過程,同時還決定了最後模型性能的好壞和收斂須要的時長。如下兩張信息圖都展現了最優化方法須要關注的知識點,包括最優化的預備和具體的最優化方法。
以上展現了最優化經常出現的問題和所須要的操做。首先在執行最優化前,咱們須要歸一化輸入數據,並且開發集與測試集歸一化的常數(均值與方差)與訓練集是相同的。上圖也展現了歸一化的緣由,由於若是特徵之間的量級相差太大,那麼損失函數的表面就是一張狹長的橢圓形,而梯度降低或最速降低法會由於「鋸齒」現象而很難收斂,所以歸一化爲圓形有助於減小降低方向的震盪。
後面的梯度消失與梯度爆炸問題也是十分常見的現象。「梯度消失」指的是隨着網絡深度增長,參數的梯度範數指數式減少的現象。梯度很小,意味着參數的變化很緩慢,從而使得學習過程停滯。梯度爆炸指神經網絡訓練過程當中大的偏差梯度不斷累積,致使模型權重出現很大的更新,在極端狀況下,權重的值變得很是大以致於出現 NaN 值。
梯度檢驗如今可能用的比較少,由於咱們在 TensorFlow 或其它框架上執行最優化算法只須要調用優化器就行。梯度檢驗通常是使用數值的方法計算近似的導數並傳播,所以它能檢驗咱們基於解析式算出來的梯度是否正確。
下面就是具體的最優化算法了,包括最基本的小批量隨機梯度降低、帶動量的隨機梯度降低和 RMSProp 等適應性學習率算法。
小批量隨機梯度降低(一般 SGD 指的就是這種)使用一個批量的數據更新參數,所以大大下降了一次迭代所需的計算量。這種方法下降了更新參數的方差,使得收斂過程更爲穩定;它也能利用流行深度學習框架中高度優化的矩陣運算器,從而高效地求出每一個小批數據的梯度。一般一個小批數據含有的樣本數量在 50 至 256 之間,但對於不一樣的用途也會有所變化。
動量策略旨在加速 SGD 的學習過程,特別是在具備較高曲率的狀況下。通常而言,動量算法利用先前梯度的指數衰減滑動平均值在該方向上進行修正,從而更好地利用歷史梯度的信息。該算法引入了變量 v 做爲參數在參數空間中持續移動的速度向量,速度通常能夠設置爲負梯度的指數衰減滑動平均值。
上圖後面所述的 RMSProp 和 Adam 等適應性學習率算法是目前咱們最經常使用的最優化方法。RMSProp 算法(Hinton,2012)修改 AdaGrad 以在非凸狀況下表現更好,它改變梯度累積爲指數加權的移動平均值,從而丟棄距離較遠的歷史梯度信息。RMSProp 是 Hinton 在公開課上提出的最優化算法,其實它能夠視爲 AdaDelta 的特例。但實踐證實 RMSProp 有很是好的性能,它目前在深度學習中有很是普遍的應用。
Adam 算法同時得到了 AdaGrad 和 RMSProp 算法的優勢。Adam 不只如 RMSProp 算法那樣基於一階矩均值計算適應性參數學習率,它同時還充分利用了梯度的二階矩均值(即有偏方差/uncentered variance)。
8 超參數
如下是介紹超參數的信息圖,它在神經網絡中佔據了重要的做用,由於它們能夠直接提高模型的性能。
衆所周知學習率、神經網絡隱藏單元數、批量大小、層級數和正則化係數等超參數能夠直接影響模型的性能,而怎麼調就顯得很是重要。目前最多見的仍是手動調參,開發者會根據自身建模經驗選擇「合理」的超參數,而後再根據模型性能作一些小的調整。而自動化調參如隨機過程或貝葉斯優化等仍須要很是大的計算量,且效率比較低。不過近來關於使用強化學習、遺傳算法和神經網絡等方法搜索超參數有很大的進步,研究者都在尋找一種高效而準確的方法。
-
依靠經驗:聆聽本身的直覺,設置感受上應該對的參數而後看看它是否工做,不斷嘗試直到累趴。
-
網格搜索:讓計算機嘗試一些在必定範圍內均勻分佈的數值。
-
隨機搜索:讓計算機嘗試一些隨機值,看看它們是否好用。
-
貝葉斯優化:使用相似 MATLAB bayesopt 的工具自動選取最佳參數——結果發現貝葉斯優化的超參數比你本身的機器學習算法還要多,累覺不愛,回到依靠經驗和網格搜索方法上去。
由於篇幅有限,後面的展現將只簡要介紹信息圖,相信它們對各位讀者都十分有幫助。
9 結構化機器學習過程
咱們須要按過程或結構來設定咱們的機器學習系統,首先須要設定模型要達到的目標,例如它的預期性能是多少、度量方法是什麼等。而後分割訓練、開發和測試集,並預期可能到達的優化水平。隨後再構建模型並訓練,在開發集和測試集完成驗證後就能夠用於推斷了。
10 偏差分析
在完成訓練後,咱們能夠分析偏差的來源而改進性能,包括髮現錯誤的標註、不正確的損失函數等。
11 訓練集、開發集與測試集
上圖展現了三個分割數據集及其表現所須要注意的地方,也就是說若是它們間有不一樣的正確率,那麼咱們該如何修正這些「差異」。例如訓練集的正確率明顯高於驗證集與測試集代表模型過擬合,三個數據集的正確率都明顯低於可接受水平多是由於欠擬合。
12 其它學習方法
機器學習和深度學習固然不止監督學習方法,還有如遷移學習、多任務學習和端到端的學習等。
卷積網絡
13 卷積神經網絡基礎
計算機視覺任務涉及的數據體量是特別大的,一張圖像就有上千個數據點,更別提升分辨率圖像和視頻了。這時用全鏈接網絡的話,參數數量太大,於是改用卷積神經網絡(CNN),參數數量能夠極大地減少。CNN 的工做原理就像用檢測特定特徵的過濾器掃描整張圖像,進行特徵提取,並逐層組合成愈來愈複雜的特徵。這種「掃描」的工做方式使其有很好的參數共享特性,從而能檢測不一樣位置的相同目標(平移對稱)。
卷積覈對應的檢測特徵能夠從其參數分佈簡單地判斷,例如,權重從左到右變小的卷積核能夠檢測到黑白豎條紋的邊界,並顯示爲中間亮,兩邊暗的特徵圖,具體的相對亮暗結果取決於圖像像素分佈和卷積核的相對關係。卷積核權重能夠直接硬編碼,但爲了讓相同的架構適應不一樣的任務,經過訓練獲得卷積核權重是更好的辦法。
padding:直接的卷積運算會使獲得的特徵圖愈來愈小,padding 操做會在圖像周圍添加 0 像素值的邊緣,使卷積後獲得的特徵圖大小和原圖像(長寬,不包括通道數)相同。
經常使用的兩個選項是:『VALID』,不執行 padding;『SAME』,使輸出特徵圖的長寬和原圖像相同。
一個卷積層上能夠有多個卷積核,每一個卷積核運算獲得的結果是一個通道,每一個通道的特徵圖的長寬相同,能夠堆疊起來構成多通道特徵圖,做爲下一個卷積層的輸入。
深度卷積神經網絡的架構主要以卷積層、池化層的多級堆疊,最後是全鏈接層執行分類。池化層的主要做用是減小特徵圖尺寸,進而減小參數數量,加速運算,使其目標檢測表現更加魯棒。
14 經典卷積神經網絡
15 特殊卷積神經網絡
-
ResNet:引入殘差鏈接,緩解梯度消失和梯度爆炸問題,能夠訓練很是深的網絡。
-
Network in Network:使用 1x1 卷積核,能夠將卷積運算變成相似於全鏈接網絡的形式,還能夠減小特徵圖的通道數,從而減小參數數量。
-
Inception Network:使用了多種尺寸卷積核的並行操做,再堆疊成多個通道,能夠捕捉多種規模的特徵,但缺點是計算量太大,能夠經過 1x1 卷積減小通道數。
16 實踐建議
-
使用開源實現:從零開始實現時很是困難的,利用別人的實現能夠快速探索更復雜有趣的任務。
-
數據加強:經過對原圖像進行鏡像、隨機裁剪、旋轉、顏色變化等操做,增長訓練數據量和多樣性。
-
遷移學習:針對當前任務的訓練數據太少時,能夠將充分訓練過的模型用少許數據微調得到足夠好的性能。
-
基準測試和競賽中表現良好的訣竅:使用模型集成,使用多模型輸出的平均結果;在測試階段,將圖像裁剪成多個副本分別測試,並將測試結果取平均。
17 目標檢測算法
目標檢測即便用邊界框檢測圖像中物體的位置,Faster R-CNN、R-FCN 和 SSD 是三種目前最優且應用最普遍的目標檢測模型,上圖也展現了 YOLO 的基本過程。
18 人臉識別
人臉識別有兩大類應用:人臉驗證(二分分類)和人臉識別(多人分類)。
當樣本量不足時,或者不斷有新樣本加入時,須要使用 one-shot learning,解決辦法是學習類似性函數,即肯定兩張圖像的類似性。好比在 Siamese Network 中學習人臉識別時,就是利用兩個網絡的輸出,減小同一我的的兩個輸出的差異,增大不一樣人的兩個輸出之間的差異。
19 風格遷移
風格遷移是一個熱門話題,它會在視覺上給人耳目一新的感受。例如你有一副圖,而後將另外一幅圖的風格特徵應用到這幅圖上,好比用一位著名畫家或某一副名畫的風格來修改你的圖像,所以咱們能夠得到獨特風格的做品。
循環網絡
20 循環神經網絡基礎
如上所示,命名實體識別等序列問題在現實生活中佔了很大的比例,而隱馬爾可夫鏈等傳統機器學習算法只能做出很強的假設而處理部分序列問題。但近來循環神經網絡在這些問題上有很是大的突破,RNN 隱藏狀態的結構以循環形的形式成記憶,每一時刻的隱藏層的狀態取決於它的過去狀態,這種結構使得 RNN 能夠保存、記住和處理長時期的過去複雜信號。
循環神經網絡(RNN)可以從序列和時序數據中學習特徵和長期依賴關係。RNN 具有非線性單元的堆疊,其中單元之間至少有一個鏈接造成有向循環。訓練好的 RNN 能夠建模任何動態系統;可是,訓練 RNN 主要受到學習長期依賴性問題的影響。
循環神經網絡在語言建模等序列問題上有很是強大的力量,但同時它也存在很嚴重的梯度消失問題。所以像 LSTM 和 GRU 等基於門控的 RNN 有很是大的潛力,它們使用門控機制保留或遺忘前面時間步的信息,並造成記憶以提供給當前的計算過程。
21 NLP 中的詞表徵
詞嵌入在天然語言處理中很是重要,由於不論執行怎樣的任務,將詞表徵出來都是必須的。上圖展現了詞嵌入的方法,咱們能夠將詞彙庫映射到一個 200 或 300 維的向量,從而大大減小表徵詞的空間。此外,這種詞表徵的方法還能表示詞的語義,由於詞義相近的詞在嵌入空間中距離相近。
除了以上所述的 Skip Grams,如下還展現了學習詞嵌入的常見方法:
GloVe 詞向量是很常見的詞向量學習方法,它學到的詞表徵可進一步用於語句分類等任務。
22 序列到序列
序列到序列的方法使用最多的就是編碼器解碼器框架,其它還有束搜索等模塊的介紹。
編碼器解碼器架構加上注意力機制能夠解決很是多的天然語言處理問題,如下介紹了 BLEU 分值和注意力機制。它們在機器翻譯的架構和評估中都是不能缺乏的部分。
以上是全部關於吳恩達深度學習專項課程的信息圖,因爲它們包含的信息較多,咱們只介紹了一部分,還有不少內容只是簡單的一筆帶過。因此各位讀者最好能夠下載該信息圖,並在後面的學習過程當中慢慢理解與優化。