吳恩達(dá)在推特上展示了一份由 TessFerrandez 完成的深度學(xué)習(xí)專項(xiàng)課程信息圖,這套信息圖優(yōu)美地記錄了深度學(xué)習(xí)課程的知識(shí)與亮點(diǎn)。因此它不僅僅適合初學(xué)者了解深度學(xué)習(xí),還適合機(jī)器學(xué)習(xí)從業(yè)者和研究者復(fù)習(xí)基本概念。機(jī)器之心認(rèn)為這不僅僅是一份課程筆記,同時(shí)還是一套信息圖與備忘錄。下面,我們將從深度學(xué)習(xí)基礎(chǔ)、卷積網(wǎng)絡(luò)和循環(huán)網(wǎng)絡(luò)三個(gè)方面介紹該筆記,并提供信息圖下載地址。
信息圖下載地址:https://pan.baidu.com/s/1DtYg3TyplXQOVZ-YmplJaw
深度學(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)練房子特征和房價(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 的簡化架構(gòu)。這三種架構(gòu)的前向過程各不相同,NN 使用的是權(quán)重矩陣(連接)和節(jié)點(diǎn)值相乘并陸續(xù)傳播至下一層節(jié)點(diǎn)的方式;CNN 使用矩形卷積核在圖像輸入上依次進(jìn)行卷積操作、滑動(dòng),得到下一層輸入的方式;RNN 記憶或遺忘先前時(shí)間步的信息以為當(dāng)前計(jì)算過程提供長期記憶。
右上: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ù)曲面上變化的簡圖,使用梯度可以找到最快的下降路徑,學(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ù)式地增長,即某些深度神經(jīng)網(wǎng)絡(luò)能解決的問題,淺層神經(jīng)網(wǎng)絡(luò)需要相對(duì)的指數(shù)量級(jí)的計(jì)算才能解決。
左下:CNN 的深度網(wǎng)絡(luò)可以將底層的簡單特征逐層組合成越來越復(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ù)太多,算法容易過擬合(方差較大,偏差較?。R虼?,提前終止通過確定迭代次數(shù)解決這個(gè)問題。
7 最優(yōu)化
最優(yōu)化是機(jī)器學(xué)習(xí)模型中非常非常重要的模塊,它不僅主導(dǎo)了整個(gè)訓(xùn)練過程,同時(shí)還決定了最后模型性能的好壞和收斂需要的時(shí)長。以下兩張信息圖都展示了最優(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ù)的表面就是一張狹長的橢圓形,而梯度下降或最速下降法會(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)槠邢?,后面的展示將只簡要介紹信息圖,相信它們對(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ù)分布簡單地判斷,例如,權(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 像素值的邊緣,使卷積后得到的特征圖大小和原圖像(長寬,不包括通道數(shù))相同。
常用的兩個(gè)選項(xiàng)是:『VALID』,不執(zhí)行 padding;『SAME』,使輸出特征圖的長寬和原圖像相同。
stride:兩次卷積操作之間的步長大小。
一個(gè)卷積層上可以有多個(gè)卷積核,每個(gè)卷積核運(yùn)算得到的結(jié)果是一個(gè)通道,每個(gè)通道的特征圖的長寬相同,可以堆疊起來構(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è)試和競賽中表現(xiàn)良好的訣竅:使用模型集成,使用多模型輸出的平均結(jié)果;在測(cè)試階段,將圖像裁剪成多個(gè)副本分別測(cè)試,并將測(cè)試結(jié)果取平均。
17 目標(biāo)檢測(cè)算法
目標(biāo)檢測(cè)即使用邊界框檢測(cè)圖像中物體的位置,F(xiàn)aster R-CNN、R-FCN 和 SSD 是三種目前最優(yōu)且應(yīng)用最廣泛的目標(biāo)檢測(cè)模型,上圖也展示了 YOLO 的基本過程。
18 人臉識(shí)別
人臉識(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 可以保存、記住和處理長時(shí)期的過去復(fù)雜信號(hào)。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)能夠從序列和時(shí)序數(shù)據(jù)中學(xué)習(xí)特征和長期依賴關(guān)系。RNN 具備非線性單元的堆疊,其中單元之間至少有一個(gè)連接形成有向循環(huán)。訓(xùn)練好的 RNN 可以建模任何動(dòng)態(tài)系統(tǒng);但是,訓(xùn)練 RNN 主要受到學(xué)習(xí)長期依賴性問題的影響。
以下展示了 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)容只是簡單的一筆帶過。所以各位讀者最好可以下載該信息圖,并在后面的學(xué)習(xí)過程中慢慢理解與優(yōu)化。
聯(lián)系客服