小小幾張圖,把深度學(xué)習(xí)講透徹
吳恩達(dá)在推特上展示了一份由 TessFerrandez 完成的深度學(xué)習(xí)專項(xiàng)課程信息圖,這套信息圖優(yōu)美地記錄了深度學(xué)習(xí)課程的知識(shí)與亮點(diǎn)。因此它不僅僅適合初學(xué)者了解深度學(xué)習(xí),還適合機(jī)器學(xué)習(xí)從業(yè)者和研究者復(fù)習(xí)基本概念。這不僅僅是一份課程筆記,同時(shí)還是一套信息圖與備忘錄。
本文將從深度學(xué)習(xí)基礎(chǔ)、卷積網(wǎng)絡(luò)和循環(huán)網(wǎng)絡(luò)三個(gè)方面介紹該筆記。
一、深度學(xué)習(xí)基礎(chǔ)
1. 深度學(xué)習(xí)基本概念
2. Logistic回歸
3. 淺層網(wǎng)絡(luò)的特點(diǎn)
4. 深度神經(jīng)網(wǎng)絡(luò)的特點(diǎn)
5. 偏差與方差
6. 正則化
7. 最優(yōu)化
8. 超參數(shù)
9. 結(jié)構(gòu)化機(jī)器學(xué)習(xí)過程
10. 誤差分析
11. 訓(xùn)練集、開發(fā)集與測(cè)試集
12. 其它學(xué)習(xí)方法
二、卷積網(wǎng)絡(luò)
13. 卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
14. 經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)
15. 特殊卷積神經(jīng)網(wǎng)絡(luò)
16. 實(shí)踐建議
17. 目標(biāo)檢測(cè)算法
18. 人臉識(shí)別
19. 風(fēng)格遷移
三、循環(huán)網(wǎng)絡(luò)
20. 循環(huán)神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
21. NLP 中的詞表征
22. 序列到序列
一、深度學(xué)習(xí)基礎(chǔ)
1. 深度學(xué)習(xí)基本概念
監(jiān)督學(xué)習(xí): 所有輸入數(shù)據(jù)都有確定的對(duì)應(yīng)輸出數(shù)據(jù),在各種網(wǎng)絡(luò)架構(gòu)中,輸入數(shù)據(jù)和輸出數(shù)據(jù)的節(jié)點(diǎn)層都位于網(wǎng)絡(luò)的兩端,訓(xùn)練過程就是不斷地調(diào)整它們之間的網(wǎng)絡(luò)連接權(quán)重。
左上: 列出了各種不同網(wǎng)絡(luò)架構(gòu)的監(jiān)督學(xué)習(xí),比如標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)(NN)可用于訓(xùn)練房子特征和房?jī)r(jià)之間的函數(shù),卷積神經(jīng)網(wǎng)絡(luò)(CNN)可用于訓(xùn)練圖像和類別之間的函數(shù),循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)可用于訓(xùn)練語音和文本之間的函數(shù)。
左下: 分別展示了 NN、CNN 和 RNN 的簡(jiǎn)化架構(gòu)。這三種架構(gòu)的前向過程各不相同,NN 使用的是權(quán)重矩陣(連接)和節(jié)點(diǎn)值相乘并陸續(xù)傳播至下一層節(jié)點(diǎn)的方式;CNN 使用矩形卷積核在圖像輸入上依次進(jìn)行卷積操作、滑動(dòng),得到下一層輸入的方式;RNN 記憶或遺忘先前時(shí)間步的信息以為當(dāng)前計(jì)算過程提供長(zhǎng)期記憶。
右上:NN 可以處理結(jié)構(gòu)化數(shù)據(jù)(表格、數(shù)據(jù)庫等)和非結(jié)構(gòu)化數(shù)據(jù)(圖像、音頻等)。
右下: 深度學(xué)習(xí)能發(fā)展起來主要是由于大數(shù)據(jù)的出現(xiàn),神經(jīng)網(wǎng)絡(luò)的訓(xùn)練需要大量的數(shù)據(jù);而大數(shù)據(jù)本身也反過來促進(jìn)了更大型網(wǎng)絡(luò)的出現(xiàn)。深度學(xué)習(xí)研究的一大突破是新型激活函數(shù)的出現(xiàn),用 ReLU 函數(shù)替換sigmoid 函數(shù)可以在反向傳播中保持快速的梯度下降過程,sigmoid 函數(shù)在正無窮處和負(fù)無窮處會(huì)出現(xiàn)趨于零的導(dǎo)數(shù),這正是梯度消失導(dǎo)致訓(xùn)練緩慢甚至失敗的主要原因。要研究深度學(xué)習(xí),需要學(xué)會(huì)「idea—代碼—實(shí)驗(yàn)—idea」的良性循環(huán)。
2. Logistic回歸
左上:logistic 回歸主要用于二分類問題,如圖中所示,logistic 回歸可以求解一張圖像是不是貓的問題,其中圖像是輸入(x),貓(1)或非貓(0)是輸出。我們可以將 logistic 回歸看成將兩組數(shù)據(jù)點(diǎn)分離的問題,如果僅有線性回歸(激活函數(shù)為線性),則對(duì)于非線性邊界的數(shù)據(jù)點(diǎn)(例如,一組數(shù)據(jù)點(diǎn)被另一組包圍)是無法有效分離的,因此在這里需要用非線性激活函數(shù)替換線性激活函數(shù)。在這個(gè)案例中,我們使用的是 sigmoid 激活函數(shù),它是值域?yàn)椋?, 1)的平滑函數(shù),可以使神經(jīng)網(wǎng)絡(luò)的輸出得到連續(xù)、歸一(概率值)的結(jié)果,例如當(dāng)輸出節(jié)點(diǎn)為(0.2, 0.8)時(shí),判定該圖像是非貓(0)。
左下:神經(jīng)網(wǎng)絡(luò)的訓(xùn)練目標(biāo)是確定最合適的權(quán)重 w 和偏置項(xiàng) b,那這個(gè)過程是怎么樣的呢?
這個(gè)分類其實(shí)就是一個(gè)優(yōu)化問題,優(yōu)化過程的目的是使預(yù)測(cè)值 y hat 和真實(shí)值 y 之間的差距最小,形式上可以通過尋找目標(biāo)函數(shù)的最小值來實(shí)現(xiàn)。所以我們首先確定目標(biāo)函數(shù)(損失函數(shù)、代價(jià)函數(shù))的形式,然后用梯度下降逐步更新 w、b,當(dāng)損失函數(shù)達(dá)到最小值或者足夠小時(shí),我們就能獲得很好的預(yù)測(cè)結(jié)果。
右上:損失函數(shù)值在參數(shù)曲面上變化的簡(jiǎn)圖,使用梯度可以找到最快的下降路徑,學(xué)習(xí)率的大小可以決定收斂的速度和最終結(jié)果。學(xué)習(xí)率較大時(shí),初期收斂很快,不易停留在局部極小值,但后期難以收斂到穩(wěn)定的值;學(xué)習(xí)率較小時(shí),情況剛好相反。一般而言,我們希望訓(xùn)練初期學(xué)習(xí)率較大,后期學(xué)習(xí)率較小,之后會(huì)介紹變化學(xué)習(xí)率的訓(xùn)練方法。
右下:總結(jié)整個(gè)訓(xùn)練過程,從輸入節(jié)點(diǎn) x 開始,通過前向傳播得到預(yù)測(cè)輸出 y hat,用 y hat 和 y 得到損失函數(shù)值,開始執(zhí)行反向傳播,更新 w 和 b,重復(fù)迭代該過程,直到收斂。
3. 淺層網(wǎng)絡(luò)的特點(diǎn)
左上: 淺層網(wǎng)絡(luò)即隱藏層數(shù)較少,如圖所示,這里僅有一個(gè)隱藏層。
左下: 這里介紹了不同激活函數(shù)的特點(diǎn):
sigmoid:sigmoid 函數(shù)常用于二分分類問題,或者多分類問題的最后一層,主要是由于其歸一化特性。sigmoid 函數(shù)在兩側(cè)會(huì)出現(xiàn)梯度趨于零的情況,會(huì)導(dǎo)致訓(xùn)練緩慢。
tanh:相對(duì)于 sigmoid,tanh 函數(shù)的優(yōu)點(diǎn)是梯度值更大,可以使訓(xùn)練速度變快。
ReLU:可以理解為閾值激活(spiking model 的特例,類似生物神經(jīng)的工作方式),該函數(shù)很常用,基本是默認(rèn)選擇的激活函數(shù),優(yōu)點(diǎn)是不會(huì)導(dǎo)致訓(xùn)練緩慢的問題,并且由于激活值為零的節(jié)點(diǎn)不會(huì)參與反向傳播,該函數(shù)還有稀疏化網(wǎng)絡(luò)的效果。
Leaky ReLU:避免了零激活值的結(jié)果,使得反向傳播過程始終執(zhí)行,但在實(shí)踐中很少用。
右上: 為什么要使用激活函數(shù)呢?更準(zhǔn)確地說是,為什么要使用非線性激活函數(shù)呢?
上圖中的實(shí)例可以看出,沒有激活函數(shù)的神經(jīng)網(wǎng)絡(luò)經(jīng)過兩層的傳播,最終得到的結(jié)果和單層的線性運(yùn)算是一樣的,也就是說,沒有使用非線性激活函數(shù)的話,無論多少層的神經(jīng)網(wǎng)絡(luò)都等價(jià)于單層神經(jīng)網(wǎng)絡(luò)(不包含輸入層)。
右下: 如何初始化參數(shù) w、b 的值?
當(dāng)將所有參數(shù)初始化為零的時(shí)候,會(huì)使所有的節(jié)點(diǎn)變得相同,在訓(xùn)練過程中只能學(xué)到相同的特征,而無法學(xué)到多層級(jí)、多樣化的特征。解決辦法是隨機(jī)初始化所有參數(shù),但僅需少量的方差就行,因此使用 Rand(0.01)進(jìn)行初始化,其中 0.01 也是超參數(shù)之一。
4. 深度神經(jīng)網(wǎng)絡(luò)的特點(diǎn)
左上:神經(jīng)網(wǎng)絡(luò)的參數(shù)化容量隨層數(shù)增加而指數(shù)式地增長(zhǎng),即某些深度神經(jīng)網(wǎng)絡(luò)能解決的問題,淺層神經(jīng)網(wǎng)絡(luò)需要相對(duì)的指數(shù)量級(jí)的計(jì)算才能解決。
左下:CNN 的深度網(wǎng)絡(luò)可以將底層的簡(jiǎn)單特征逐層組合成越來越復(fù)雜的特征,深度越大,其能分類的圖像的復(fù)雜度和多樣性就越大。RNN 的深度網(wǎng)絡(luò)也是同樣的道理,可以將語音分解為音素,再逐漸組合成字母、單詞、句子,執(zhí)行復(fù)雜的語音到文本任務(wù)。
右邊:深度網(wǎng)絡(luò)的特點(diǎn)是需要大量的訓(xùn)練數(shù)據(jù)和計(jì)算資源,其中涉及大量的矩陣運(yùn)算,可以在 GPU 上并行執(zhí)行,還包含了大量的超參數(shù),例如學(xué)習(xí)率、迭代次數(shù)、隱藏層數(shù)、激活函數(shù)選擇、學(xué)習(xí)率調(diào)整方案、批尺寸大小、正則化方法等。
5. 偏差與方差
那么部署你的機(jī)器學(xué)習(xí)模型需要注意些什么?下圖展示了構(gòu)建 ML 應(yīng)用所需要的數(shù)據(jù)集分割、偏差與方差等問題。
如上所示,經(jīng)典機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型所需要的樣本數(shù)有非常大的差別,深度學(xué)習(xí)的樣本數(shù)是經(jīng)典 ML 的成千上萬倍。因此訓(xùn)練集、開發(fā)集和測(cè)試集的分配也有很大的區(qū)別,當(dāng)然我們假設(shè)這些不同的數(shù)據(jù)集都服從同分布。
偏差與方差問題同樣是機(jī)器學(xué)習(xí)模型中常見的挑戰(zhàn),上圖依次展示了由高偏差帶來的欠擬合和由高方差帶來的過擬合。一般而言,解決高偏差的問題是選擇更復(fù)雜的網(wǎng)絡(luò)或不同的神經(jīng)網(wǎng)絡(luò)架構(gòu),而解決高方差的問題可以添加正則化、減少模型冗余或使用更多的數(shù)據(jù)進(jìn)行訓(xùn)練。
當(dāng)然,機(jī)器學(xué)習(xí)模型需要注意的問題遠(yuǎn)不止這些,但在配置我們的 ML 應(yīng)用中,它們是最基礎(chǔ)和最重要的部分。其它如數(shù)據(jù)預(yù)處理、數(shù)據(jù)歸一化、超參數(shù)的選擇等都在后面的信息圖中有所體現(xiàn)。
6. 正則化
正則化是解決高方差或模型過擬合的主要手段,過去數(shù)年,研究者提出和開發(fā)了多種適合機(jī)器學(xué)習(xí)算法的正則化方法,如數(shù)據(jù)增強(qiáng)、L2 正則化(權(quán)重衰減)、L1 正則化、Dropout、Drop Connect、隨機(jī)池化和提前終止等。
如上圖左列所示,L1 和 L2 正則化也是是機(jī)器學(xué)習(xí)中使用最廣泛的正則化方法。L1 正則化向目標(biāo)函數(shù)添加正則化項(xiàng),以減少參數(shù)的絕對(duì)值總和;而 L2 正則化中,添加正則化項(xiàng)的目的在于減少參數(shù)平方的總和。根據(jù)之前的研究,L1 正則化中的很多參數(shù)向量是稀疏向量,因?yàn)楹芏嗄P蛯?dǎo)致參數(shù)趨近于 0,因此它常用于特征選擇設(shè)置中。此外,參數(shù)范數(shù)懲罰 L2 正則化能讓深度學(xué)習(xí)算法「感知」到具有較高方差的輸入 x,因此與輸出目標(biāo)的協(xié)方差較?。ㄏ鄬?duì)增加方差)的特征權(quán)重將會(huì)收縮。
在中間列中,上圖展示了 Dropout 技術(shù),即暫時(shí)丟棄一部分神經(jīng)元及其連接的方法。隨機(jī)丟棄神經(jīng)元可以防止過擬合,同時(shí)指數(shù)級(jí)、高效地連接不同網(wǎng)絡(luò)架構(gòu)。一般使用了 Dropout 技術(shù)的神經(jīng)網(wǎng)絡(luò)會(huì)設(shè)定一個(gè)保留率 p,然后每一個(gè)神經(jīng)元在一個(gè)批量的訓(xùn)練中以概率 1-p 隨機(jī)選擇是否去掉。在最后進(jìn)行推斷時(shí)所有神經(jīng)元都需要保留,因而有更高的準(zhǔn)確度。
Bagging 是通過結(jié)合多個(gè)模型降低泛化誤差的技術(shù),主要的做法是分別訓(xùn)練幾個(gè)不同的模型,然后讓所有模型表決測(cè)試樣例的輸出。而 Dropout 可以被認(rèn)為是集成了大量深層神經(jīng)網(wǎng)絡(luò)的 Bagging 方法,因此它提供了一種廉價(jià)的 Bagging 集成近似方法,能夠訓(xùn)練和評(píng)估值數(shù)據(jù)數(shù)量的神經(jīng)網(wǎng)絡(luò)。
最后,上圖還描述了數(shù)據(jù)增強(qiáng)與提前終止等正則化方法。數(shù)據(jù)增強(qiáng)通過向訓(xùn)練數(shù)據(jù)添加轉(zhuǎn)換或擾動(dòng)來人工增加訓(xùn)練數(shù)據(jù)集。數(shù)據(jù)增強(qiáng)技術(shù)如水平或垂直翻轉(zhuǎn)圖像、裁剪、色彩變換、擴(kuò)展和旋轉(zhuǎn)通常應(yīng)用在視覺表象和圖像分類中。而提前終止通常用于防止訓(xùn)練中過度表達(dá)的模型泛化性能差。如果迭代次數(shù)太少,算法容易欠擬合(方差較小,偏差較大),而迭代次數(shù)太多,算法容易過擬合(方差較大,偏差較小)。因此,提前終止通過確定迭代次數(shù)解決這個(gè)問題。
7. 最優(yōu)化
最優(yōu)化是機(jī)器學(xué)習(xí)模型中非常非常重要的模塊,它不僅主導(dǎo)了整個(gè)訓(xùn)練過程,同時(shí)還決定了最后模型性能的好壞和收斂需要的時(shí)長(zhǎng)。以下兩張信息圖都展示了最優(yōu)化方法需要關(guān)注的知識(shí)點(diǎn),包括最優(yōu)化的預(yù)備和具體的最優(yōu)化方法。
以上展示了最優(yōu)化常常出現(xiàn)的問題和所需要的操作。首先在執(zhí)行最優(yōu)化前,我們需要?dú)w一化輸入數(shù)據(jù),而且開發(fā)集與測(cè)試集歸一化的常數(shù)(均值與方差)與訓(xùn)練集是相同的。上圖也展示了歸一化的原因,因?yàn)槿绻卣髦g的量級(jí)相差太大,那么損失函數(shù)的表面就是一張狹長(zhǎng)的橢圓形,而梯度下降或最速下降法會(huì)因?yàn)椤镐忼X」現(xiàn)象而很難收斂,因此歸一化為圓形有助于減少下降方向的震蕩。
后面的梯度消失與梯度爆炸問題也是十分常見的現(xiàn)象?!柑荻认А怪傅氖请S著網(wǎng)絡(luò)深度增加,參數(shù)的梯度范數(shù)指數(shù)式減小的現(xiàn)象。梯度很小,意味著參數(shù)的變化很緩慢,從而使得學(xué)習(xí)過程停滯。梯度爆炸指神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中大的誤差梯度不斷累積,導(dǎo)致模型權(quán)重出現(xiàn)很大的更新,在極端情況下,權(quán)重的值變得非常大以至于出現(xiàn) NaN 值。
梯度檢驗(yàn)現(xiàn)在可能用的比較少,因?yàn)槲覀冊(cè)?TensorFlow 或其它框架上執(zhí)行最優(yōu)化算法只需要調(diào)用優(yōu)化器就行。梯度檢驗(yàn)一般是使用數(shù)值的方法計(jì)算近似的導(dǎo)數(shù)并傳播,因此它能檢驗(yàn)我們基于解析式算出來的梯度是否正確。
下面就是具體的最優(yōu)化算法了,包括最基本的小批量隨機(jī)梯度下降、帶動(dòng)量的隨機(jī)梯度下降和 RMSProp 等適應(yīng)性學(xué)習(xí)率算法。
小批量隨機(jī)梯度下降(通常 SGD 指的就是這種)使用一個(gè)批量的數(shù)據(jù)更新參數(shù),因此大大降低了一次迭代所需的計(jì)算量。這種方法降低了更新參數(shù)的方差,使得收斂過程更為穩(wěn)定;它也能利用流行深度學(xué)習(xí)框架中高度優(yōu)化的矩陣運(yùn)算器,從而高效地求出每個(gè)小批數(shù)據(jù)的梯度。通常一個(gè)小批數(shù)據(jù)含有的樣本數(shù)量在 50 至 256 之間,但對(duì)于不同的用途也會(huì)有所變化。
動(dòng)量策略旨在加速 SGD 的學(xué)習(xí)過程,特別是在具有較高曲率的情況下。一般而言,動(dòng)量算法利用先前梯度的指數(shù)衰減滑動(dòng)平均值在該方向上進(jìn)行修正,從而更好地利用歷史梯度的信息。該算法引入了變量 v 作為參數(shù)在參數(shù)空間中持續(xù)移動(dòng)的速度向量,速度一般可以設(shè)置為負(fù)梯度的指數(shù)衰減滑動(dòng)平均值。
上圖后面所述的 RMSProp 和 Adam 等適應(yīng)性學(xué)習(xí)率算法是目前我們最常用的最優(yōu)化方法。RMSProp 算法(Hinton,2012)修改 AdaGrad 以在非凸情況下表現(xiàn)更好,它改變梯度累積為指數(shù)加權(quán)的移動(dòng)平均值,從而丟棄距離較遠(yuǎn)的歷史梯度信息。RMSProp 是 Hinton 在公開課上提出的最優(yōu)化算法,其實(shí)它可以視為 AdaDelta 的特例。但實(shí)踐證明 RMSProp 有非常好的性能,它目前在深度學(xué)習(xí)中有非常廣泛的應(yīng)用。
Adam 算法同時(shí)獲得了 AdaGrad 和 RMSProp 算法的優(yōu)點(diǎn)。Adam 不僅如 RMSProp 算法那樣基于一階矩均值計(jì)算適應(yīng)性參數(shù)學(xué)習(xí)率,它同時(shí)還充分利用了梯度的二階矩均值(即有偏方差/uncentered variance)。
8. 超參數(shù)
以下是介紹超參數(shù)的信息圖,它在神經(jīng)網(wǎng)絡(luò)中占據(jù)了重要的作用,因?yàn)樗鼈兛梢灾苯犹嵘P偷男阅堋?/p>
眾所周知學(xué)習(xí)率、神經(jīng)網(wǎng)絡(luò)隱藏單元數(shù)、批量大小、層級(jí)數(shù)和正則化系數(shù)等超參數(shù)可以直接影響模型的性能,而怎么調(diào)就顯得非常重要。目前最常見的還是手動(dòng)調(diào)參,開發(fā)者會(huì)根據(jù)自身建模經(jīng)驗(yàn)選擇「合理」的超參數(shù),然后再根據(jù)模型性能做一些小的調(diào)整。而自動(dòng)化調(diào)參如隨機(jī)過程或貝葉斯優(yōu)化等仍需要非常大的計(jì)算量,且效率比較低。不過近來關(guān)于使用強(qiáng)化學(xué)習(xí)、遺傳算法和神經(jīng)網(wǎng)絡(luò)等方法搜索超參數(shù)有很大的進(jìn)步,研究者都在尋找一種高效而準(zhǔn)確的方法。
目前的超參數(shù)搜索方法有:
依靠經(jīng)驗(yàn): 聆聽自己的直覺,設(shè)置感覺上應(yīng)該對(duì)的參數(shù)然后看看它是否工作,不斷嘗試直到累趴。
網(wǎng)格搜索: 讓計(jì)算機(jī)嘗試一些在一定范圍內(nèi)均勻分布的數(shù)值。
隨機(jī)搜索: 讓計(jì)算機(jī)嘗試一些隨機(jī)值,看看它們是否好用。
貝葉斯優(yōu)化: 使用類似 MATLAB bayesopt 的工具自動(dòng)選取最佳參數(shù)——結(jié)果發(fā)現(xiàn)貝葉斯優(yōu)化的超參數(shù)比你自己的機(jī)器學(xué)習(xí)算法還要多,累覺不愛,回到依靠經(jīng)驗(yàn)和網(wǎng)格搜索方法上去。
因?yàn)槠邢蓿竺娴恼故緦⒅缓?jiǎn)要介紹信息圖,相信它們對(duì)各位讀者都十分有幫助。
9. 結(jié)構(gòu)化機(jī)器學(xué)習(xí)過程
我們需要按過程或結(jié)構(gòu)來設(shè)定我們的機(jī)器學(xué)習(xí)系統(tǒng),首先需要設(shè)定模型要達(dá)到的目標(biāo),例如它的預(yù)期性能是多少、度量方法是什么等。然后分割訓(xùn)練、開發(fā)和測(cè)試集,并預(yù)期可能到達(dá)的優(yōu)化水平。隨后再構(gòu)建模型并訓(xùn)練,在開發(fā)集和測(cè)試集完成驗(yàn)證后就可以用于推斷了。
10. 誤差分析
在完成訓(xùn)練后,我們可以分析誤差的來源而改進(jìn)性能,包括發(fā)現(xiàn)錯(cuò)誤的標(biāo)注、不正確的損失函數(shù)等。
11. 訓(xùn)練集、開發(fā)集與測(cè)試集
上圖展示了三個(gè)分割數(shù)據(jù)集及其表現(xiàn)所需要注意的地方,也就是說如果它們間有不同的正確率,那么我們?cè)撊绾涡拚@些「差別」。例如訓(xùn)練集的正確率明顯高于驗(yàn)證集與測(cè)試集表明模型過擬合,三個(gè)數(shù)據(jù)集的正確率都明顯低于可接受水平可能是因?yàn)榍窋M合。
12. 其它學(xué)習(xí)方法
機(jī)器學(xué)習(xí)和深度學(xué)習(xí)當(dāng)然不止監(jiān)督學(xué)習(xí)方法,還有如遷移學(xué)習(xí)、多任務(wù)學(xué)習(xí)和端到端的學(xué)習(xí)等。
二、卷積網(wǎng)絡(luò)
13. 卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
計(jì)算機(jī)視覺任務(wù)涉及的數(shù)據(jù)體量是特別大的,一張圖像就有上千個(gè)數(shù)據(jù)點(diǎn),更別提高分辨率圖像和視頻了。這時(shí)用全連接網(wǎng)絡(luò)的話,參數(shù)數(shù)量太大,因而改用卷積神經(jīng)網(wǎng)絡(luò)(CNN),參數(shù)數(shù)量可以極大地減小。CNN 的工作原理就像用檢測(cè)特定特征的過濾器掃描整張圖像,進(jìn)行特征提取,并逐層組合成越來越復(fù)雜的特征。這種「掃描」的工作方式使其有很好的參數(shù)共享特性,從而能檢測(cè)不同位置的相同目標(biāo)(平移對(duì)稱)。
卷積核對(duì)應(yīng)的檢測(cè)特征可以從其參數(shù)分布簡(jiǎn)單地判斷,例如,權(quán)重從左到右變小的卷積核可以檢測(cè)到黑白豎條紋的邊界,并顯示為中間亮,兩邊暗的特征圖,具體的相對(duì)亮暗結(jié)果取決于圖像像素分布和卷積核的相對(duì)關(guān)系。卷積核權(quán)重可以直接硬編碼,但為了讓相同的架構(gòu)適應(yīng)不同的任務(wù),通過訓(xùn)練得到卷積核權(quán)重是更好的辦法。
卷積運(yùn)算的主要參數(shù):
padding:直接的卷積運(yùn)算會(huì)使得到的特征圖越來越小,padding 操作會(huì)在圖像周圍添加 0 像素值的邊緣,使卷積后得到的特征圖大小和原圖像(長(zhǎng)寬,不包括通道數(shù))相同。
常用的兩個(gè)選項(xiàng)是:『VALID』,不執(zhí)行 padding;『SAME』,使輸出特征圖的長(zhǎng)寬和原圖像相同。
stride:兩次卷積操作之間的步長(zhǎng)大小。
一個(gè)卷積層上可以有多個(gè)卷積核,每個(gè)卷積核運(yùn)算得到的結(jié)果是一個(gè)通道,每個(gè)通道的特征圖的長(zhǎng)寬相同,可以堆疊起來構(gòu)成多通道特征圖,作為下一個(gè)卷積層的輸入。
深度卷積神經(jīng)網(wǎng)絡(luò)的架構(gòu):
深度卷積神經(jīng)網(wǎng)絡(luò)的架構(gòu)主要以卷積層、池化層的多級(jí)堆疊,最后是全連接層執(zhí)行分類。池化層的主要作用是減少特征圖尺寸,進(jìn)而減少參數(shù)數(shù)量,加速運(yùn)算,使其目標(biāo)檢測(cè)表現(xiàn)更加魯棒。
14. 經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)
LeNet·5:手寫識(shí)別分類網(wǎng)絡(luò),這是第一個(gè)卷積神經(jīng)網(wǎng)絡(luò),由 Yann LeCun 提出。
AlexNet:圖像分類網(wǎng)絡(luò),首次在 CNN 引入 ReLU 激活函數(shù)。
VGG-16:圖像分類網(wǎng)絡(luò),深度較大。
15. 特殊卷積神經(jīng)網(wǎng)絡(luò)
ResNet:引入殘差連接,緩解梯度消失和梯度爆炸問題,可以訓(xùn)練非常深的網(wǎng)絡(luò)。
Network in Network:使用 1x1 卷積核,可以將卷積運(yùn)算變成類似于全連接網(wǎng)絡(luò)的形式,還可以減少特征圖的通道數(shù),從而減少參數(shù)數(shù)量。
Inception Network:使用了多種尺寸卷積核的并行操作,再堆疊成多個(gè)通道,可以捕捉多種規(guī)模的特征,但缺點(diǎn)是計(jì)算量太大,可以通過 1x1 卷積減少通道數(shù)。
16. 實(shí)踐建議
使用開源實(shí)現(xiàn):從零開始實(shí)現(xiàn)時(shí)非常困難的,利用別人的實(shí)現(xiàn)可以快速探索更復(fù)雜有趣的任務(wù)。
數(shù)據(jù)增強(qiáng):通過對(duì)原圖像進(jìn)行鏡像、隨機(jī)裁剪、旋轉(zhuǎn)、顏色變化等操作,增加訓(xùn)練數(shù)據(jù)量和多樣性。
遷移學(xué)習(xí):針對(duì)當(dāng)前任務(wù)的訓(xùn)練數(shù)據(jù)太少時(shí),可以將充分訓(xùn)練過的模型用少量數(shù)據(jù)微調(diào)獲得足夠好的性能。
基準(zhǔn)測(cè)試和競(jìng)賽中表現(xiàn)良好的訣竅:使用模型集成,使用多模型輸出的平均結(jié)果;在測(cè)試階段,將圖像裁剪成多個(gè)副本分別測(cè)試,并將測(cè)試結(jié)果取平均。
17. 目標(biāo)檢測(cè)算法
使用開源實(shí)現(xiàn):從零開始實(shí)現(xiàn)時(shí)非常困難的,利用別人的實(shí)現(xiàn)可以快速探索更復(fù)雜有趣的任務(wù)。
數(shù)據(jù)增強(qiáng):通過對(duì)原圖像進(jìn)行鏡像、隨機(jī)裁剪、旋轉(zhuǎn)、顏色變化等操作,增加訓(xùn)練數(shù)據(jù)量和多樣性。
遷移學(xué)習(xí):針對(duì)當(dāng)前任務(wù)的訓(xùn)練數(shù)據(jù)太少時(shí),可以將充分訓(xùn)練過的模型用少量數(shù)據(jù)微調(diào)獲得足夠好的性能。
基準(zhǔn)測(cè)試和競(jìng)賽中表現(xiàn)良好的訣竅:使用模型集成,使用多模型輸出的平均結(jié)果;在測(cè)試階段,將圖像裁剪成多個(gè)副本分別測(cè)試,并將測(cè)試結(jié)果取平均。
17. 目標(biāo)檢測(cè)算法
人臉識(shí)別有兩大類應(yīng)用:人臉驗(yàn)證(二分分類) 和人臉識(shí)別(多人分類)。
當(dāng)樣本量不足時(shí),或者不斷有新樣本加入時(shí),需要使用 one-shot learning,解決辦法是學(xué)習(xí)相似性函數(shù),即確定兩張圖像的相似性。比如在 Siamese Network 中學(xué)習(xí)人臉識(shí)別時(shí),就是利用兩個(gè)網(wǎng)絡(luò)的輸出,減少同一個(gè)人的兩個(gè)輸出的差別,增大不同人的兩個(gè)輸出之間的差別。
19. 風(fēng)格遷移
風(fēng)格遷移是一個(gè)熱門話題,它會(huì)在視覺上給人耳目一新的感覺。例如你有一副圖,然后將另一幅圖的風(fēng)格特征應(yīng)用到這幅圖上,比如用一位著名畫家或某一副名畫的風(fēng)格來修改你的圖像,因此我們可以獲得獨(dú)特風(fēng)格的作品。
三、循環(huán)網(wǎng)絡(luò)
20. 循環(huán)神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
如上所示,命名實(shí)體識(shí)別等序列問題在現(xiàn)實(shí)生活中占了很大的比例,而隱馬爾可夫鏈等傳統(tǒng)機(jī)器學(xué)習(xí)算法只能作出很強(qiáng)的假設(shè)而處理部分序列問題。但近來循環(huán)神經(jīng)網(wǎng)絡(luò)在這些問題上有非常大的突破,RNN 隱藏狀態(tài)的結(jié)構(gòu)以循環(huán)形的形式成記憶,每一時(shí)刻的隱藏層的狀態(tài)取決于它的過去狀態(tài),這種結(jié)構(gòu)使得 RNN 可以保存、記住和處理長(zhǎng)時(shí)期的過去復(fù)雜信號(hào)。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)能夠從序列和時(shí)序數(shù)據(jù)中學(xué)習(xí)特征和長(zhǎng)期依賴關(guān)系。RNN 具備非線性單元的堆疊,其中單元之間至少有一個(gè)連接形成有向循環(huán)。訓(xùn)練好的 RNN 可以建模任何動(dòng)態(tài)系統(tǒng);但是,訓(xùn)練 RNN 主要受到學(xué)習(xí)長(zhǎng)期依賴性問題的影響。
以下展示了 RNN 的應(yīng)用、問題以及變體等:
循環(huán)神經(jīng)網(wǎng)絡(luò)在語言建模等序列問題上有非常強(qiáng)大的力量,但同時(shí)它也存在很嚴(yán)重的梯度消失問題。因此像 LSTM 和 GRU 等基于門控的 RNN 有非常大的潛力,它們使用門控機(jī)制保留或遺忘前面時(shí)間步的信息,并形成記憶以提供給當(dāng)前的計(jì)算過程。
21. NLP 中的詞表征
詞嵌入在自然語言處理中非常重要,因?yàn)椴徽搱?zhí)行怎樣的任務(wù),將詞表征出來都是必須的。上圖展示了詞嵌入的方法,我們可以將詞匯庫映射到一個(gè) 200 或 300 維的向量,從而大大減少表征詞的空間。此外,這種詞表征的方法還能表示詞的語義,因?yàn)樵~義相近的詞在嵌入空間中距離相近。
除了以上所述的 Skip Grams,以下還展示了學(xué)習(xí)詞嵌入的常見方法:
GloVe 詞向量是很常見的詞向量學(xué)習(xí)方法,它學(xué)到的詞表征可進(jìn)一步用于語句分類等任務(wù)。
22. 序列到序列
序列到序列的方法使用最多的就是編碼器解碼器框架,其它還有束搜索等模塊的介紹。
編碼器解碼器架構(gòu)加上注意力機(jī)制可以解決非常多的自然語言處理問題,以下介紹了 BLEU 分值和注意力機(jī)制。它們?cè)跈C(jī)器翻譯的架構(gòu)和評(píng)估中都是不能缺少的部分。
以上是所有關(guān)于吳恩達(dá)深度學(xué)習(xí)專項(xiàng)課程的信息圖,由于它們包含的信息較多,我們只介紹了一部分,還有很多內(nèi)容只是簡(jiǎn)單的一筆帶過。所以各位讀者最好可以下載該信息圖,并在后面的學(xué)習(xí)過程中慢慢理解與優(yōu)化。