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