深度学习简明教程系列 —— 基础知识(合集)
本教程是深度學(xué)習(xí)簡(jiǎn)明教程系列的第一部分,旨在提取最精煉且必備的深度學(xué)習(xí)知識(shí)點(diǎn),供讀者快速學(xué)習(xí)及本人查閱復(fù)習(xí)所用,大多內(nèi)容是本人結(jié)合個(gè)人理解補(bǔ)充細(xì)節(jié)整合而成,參考鏈接放在文章最后。
目錄
第一章? 模型評(píng)估
1.1? 基礎(chǔ)概念
1.2? P-R曲線
1.3? ROC曲線和AUC
1.4? 目標(biāo)檢測(cè)評(píng)價(jià)
1.5? 語義分割評(píng)價(jià)
1.6? 相關(guān)面試題
第二章? 深度學(xué)習(xí)入門
2.1? 機(jī)器學(xué)習(xí)到深度學(xué)習(xí)
2.2? 前饋神經(jīng)網(wǎng)絡(luò)(MLP)
2.3? 卷積神經(jīng)網(wǎng)絡(luò)(CNN)
2.4? 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
2.5? 相關(guān)面試題
第三章? 激活函數(shù)
3.1? 常用激活函數(shù)
3.2? 相關(guān)面試題
第四章? 損失函數(shù)
4.1? 概覽
4.2? 分類任務(wù)損失函數(shù)
4.3? 回歸任務(wù)損失函數(shù)
4.4? 相關(guān)面試題
第五章? 優(yōu)化算法
5.1? 概述
5.2? 存在的挑戰(zhàn)
5.3? 梯度下降優(yōu)化方法
5.4? 梯度優(yōu)化額外的策略
?5.5? 相關(guān)面試題
第六章? 反向傳播算法(BP算法)
6.1? 神經(jīng)網(wǎng)絡(luò)
6.2? 正向傳播
6.3? 反向傳播
6.4? 總結(jié)
6.5? 相關(guān)面試題
第七章??梯度消失和梯度爆炸
7.1? 產(chǎn)生原因
7.2? 解決方案
7.3? 相關(guān)面試題
第八章? 范數(shù)正則化
8.1? 正則化概述
8.2??L0范數(shù)與L1范數(shù)
8.3? L2范數(shù)
8.4??正則化參數(shù)的選擇
8.5? 相關(guān)面試題
第九章??Batch Normalization
9.1? 使用BN的原因
9.2? 什么是BN
9.3? BN具體是怎么做的
9.4? 其他Normalization方法
9.5? 相關(guān)面試題
第十章? Dropout
10.1??Dropout簡(jiǎn)介
10.2? 模型變化
10.3? 相關(guān)面試題
第十一章? 注意力機(jī)制
11.1? 注意力機(jī)制分類
11.2? 注意力模塊
11.3? 相關(guān)面試題
?
第一章? 模型評(píng)估
1.1? 基礎(chǔ)概念
假設(shè)有個(gè)樣本,其中有個(gè)樣本分類正確,則有:
-
準(zhǔn)確率(Accuracy):
-
錯(cuò)誤率(Error):
這兩個(gè)指標(biāo)雖然常用,但無法滿足所有任務(wù)需求,我們還會(huì)用查準(zhǔn)率(Precision)、召回率(Recall)、誤檢率(Noise Factor)、漏檢率(Prob?of Miss)來衡量分類效果。在二分類問題中,可以根據(jù)樣本真實(shí)類別和預(yù)測(cè)類別的組合劃分為:
-
真陽(TP):預(yù)測(cè)為真,實(shí)際為真;
-
假陽(FP):預(yù)測(cè)為真,實(shí)際為假;
-
真陰(TN):預(yù)測(cè)為假,實(shí)際為假;
-
假陰(FN):預(yù)測(cè)為假,實(shí)際為真。
因此有:
-
查準(zhǔn)率(Precision):,意即預(yù)測(cè)的正例有幾個(gè)是對(duì)的;
-
召回率(Recall):,意即真正的正例預(yù)測(cè)了幾個(gè);
-
誤檢率(Noise Factor):,意即預(yù)測(cè)的正例有幾個(gè)是錯(cuò)的;
-
漏檢率(Prob?of Miss):,意即漏掉幾個(gè)正例沒檢測(cè)出來。
1.2? P-R曲線
查準(zhǔn)率和召回率是一對(duì)矛盾的度量指標(biāo),一般呈現(xiàn)負(fù)相關(guān),在很多情況下,我們可以通過繪制出學(xué)習(xí)器的P-R曲線(Precision - Recall Curve)來比較學(xué)習(xí)器的好壞。P-R圖以查準(zhǔn)率為縱軸,召回率為橫軸,大致如下圖所示:
P-R曲線如果一個(gè)學(xué)習(xí)器的P-R曲線被另一個(gè)學(xué)習(xí)器的P-R曲線完全包住,則可斷言外層的學(xué)習(xí)器性能優(yōu)于內(nèi)層,例如上面的A和B優(yōu)于學(xué)習(xí)器C。但是A和B的性能無法直接判斷,我們可以根據(jù)曲線下方的面積大小來進(jìn)行比較,但更常用的是平衡點(diǎn)或者是F1值:
- 平衡點(diǎn)(BEP)是 P = R 時(shí)的取值,如果這個(gè)值較大,則說明學(xué)習(xí)器的性能較好。
- F1 = 2 * P * R /( P + R ),同樣,F1值越大,我們可以認(rèn)為該學(xué)習(xí)器的性能較好。
注意:一條P-R曲線要對(duì)應(yīng)一個(gè)閾值。通過選擇合適的閾值,比如50%,對(duì)樣本進(jìn)行劃分,概率大于50%的就認(rèn)為是正例,小于50%的就是負(fù)例,從而計(jì)算相應(yīng)的精準(zhǔn)率和召回率。
1.3? ROC曲線和AUC
1.3.1? ROC曲線
接受者操作特性曲線(Receiver Operating Characteristic Curve),簡(jiǎn)稱ROC曲線,縱軸是擊中率(TPR),橫軸是虛警率(FPR)。
擊中率,也即真正類率(True Postive Rate):TPR =?TP/(TP+FN),代表分類器預(yù)測(cè)的正類中實(shí)際正例占所有正例的比例。
虛警率,也即負(fù)正類率(False Postive Rate):FPR = FP/(FP+TN),代表分類器預(yù)測(cè)的正類中實(shí)際負(fù)例占所有負(fù)例的比例。
下圖為ROC曲線示意圖,因現(xiàn)實(shí)任務(wù)中通常利用有限個(gè)測(cè)試樣例來繪制ROC圖,因此應(yīng)為無法產(chǎn)生光滑曲線,如右圖所示。
ROC曲線繪圖過程:給定m個(gè)正例子,n個(gè)反例子,根據(jù)學(xué)習(xí)器預(yù)測(cè)結(jié)果進(jìn)行排序,先把分類閾值設(shè)為最大,使得所有例子均預(yù)測(cè)為反例,此時(shí)TPR和FPR均為0,在(0,0)處標(biāo)記一個(gè)點(diǎn),再將分類閾值依次設(shè)為每個(gè)樣例的預(yù)測(cè)值,即依次將每個(gè)例子劃分為正例。設(shè)前一個(gè)坐標(biāo)為(x,y),若當(dāng)前為真正例,對(duì)應(yīng)標(biāo)記點(diǎn)為(x,y+1/m),若當(dāng)前為假正例,則標(biāo)記點(diǎn)為(x+1/n,y),然后依次連接各點(diǎn)。
注意:
- ROC曲線也需要相應(yīng)的閾值才可以進(jìn)行繪制,原理同上的P-R曲線。
- ROC曲線越左上凸越好,P-R曲線越右上凸越好。
1.3.2? AUC
AUC (Area under Curve):ROC曲線下的面積,介于0.1和1之間,作為數(shù)值可以直觀的評(píng)價(jià)分類器的好壞,值越大越好。
- AUC = 1,是完美分類器,采用這個(gè)預(yù)測(cè)模型時(shí),存在至少一個(gè)閾值能得出完美預(yù)測(cè)。絕大多數(shù)預(yù)測(cè)的場(chǎng)合,不存在完美分類器;
- 0.5 < AUC < 1,優(yōu)于隨機(jī)猜測(cè)。這個(gè)分類器(模型)妥善設(shè)定閾值的話,能有預(yù)測(cè)價(jià)值;
- AUC = 0.5,跟隨機(jī)猜測(cè)一樣(例:丟硬幣),模型沒有預(yù)測(cè)價(jià)值。
1.4? 目標(biāo)檢測(cè)評(píng)價(jià)
1.4.1? mAP
mAP(mean Average Precision)即各類別AP的平均值。由此我們可以知道,要計(jì)算mAP必須先繪出各類別P-R曲線,計(jì)算出AP。
1)VOC2010之前
只需要選取當(dāng)Recall >= 0, 0.1, 0.2, ..., 1共11個(gè)點(diǎn)時(shí)的Precision最大值,然后AP就是這11個(gè)Precision的平均值。具體來說,計(jì)算precision時(shí)采用一種插值方法,即對(duì)于某個(gè)recall值r,precision值取所有recall>=r中的最大值(這樣保證了p-r曲線是單調(diào)遞減的,避免曲線出現(xiàn)抖動(dòng))。
11-point interpolation2)VOC2010及其之后
需要針對(duì)每一個(gè)不同的Recall值r(包括0和1),Precision值取所有recall >= r+1中的最大值,然后計(jì)算PR曲線下面積作為AP值。
Interpolating all points?
AP衡量的是對(duì)一個(gè)類檢測(cè)好壞,mAP就是對(duì)多個(gè)類的檢測(cè)好壞。就是簡(jiǎn)單粗暴的把所有類的AP值取平均就好了。
1.5? 語義分割評(píng)價(jià)
評(píng)價(jià)指標(biāo)一般包含如下三個(gè)方面:
- 執(zhí)行時(shí)間(execution time)
- 內(nèi)存占用(memory footprint)
- 準(zhǔn)確度(accuracy)
1.5.1? 準(zhǔn)確度
?
1.6? 相關(guān)面試題
Q:
A:
?
第二章? 深度學(xué)習(xí)入門
2.1? 機(jī)器學(xué)習(xí)到深度學(xué)習(xí)
機(jī)器學(xué)習(xí)從發(fā)展角度來講可以被分為頻率派(統(tǒng)計(jì)機(jī)器學(xué)習(xí))和貝葉斯派(概率圖模型)。
- 統(tǒng)計(jì)機(jī)器學(xué)習(xí)中主要應(yīng)用到的四個(gè)思想分別是:正則化(L1、L2)、核化(Kernel SVM)、集成化(AdaBoost、RF)和層次化(Neural Network);其中,本文的主角——神經(jīng)網(wǎng)絡(luò)主要包括:多層感知機(jī)(MLP)、自編碼器(AutoEncoder)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),隨著網(wǎng)絡(luò)層次的加深,我們統(tǒng)稱它們?yōu)樯疃壬窠?jīng)網(wǎng)絡(luò)(DNN)。
- 概率圖模型中主要包括三種模型分別是:有向圖模型(Beyesian Network)、無向圖模型(Markov Network)和混合模型(Mixed Network);其中,加入深度后它們又各自發(fā)展成了深度有向網(wǎng)絡(luò)(Deep Directed Network)、深度玻爾茲曼機(jī)(Deep Boltzman Machine)、深度信念網(wǎng)絡(luò)(Deep Belief Network),我們統(tǒng)稱它們?yōu)樯疃壬赡P?#xff08;Deep Generative Model)。
狹義上的深度學(xué)習(xí)主要指的就是深度神經(jīng)網(wǎng)絡(luò),廣義上的深度學(xué)習(xí)就包括了深度生成模型,思維導(dǎo)圖如下:
?
2.2? 前饋神經(jīng)網(wǎng)絡(luò)(MLP)
2.2.1? MLP簡(jiǎn)介
前饋神經(jīng)網(wǎng)絡(luò)由輸入層、若干個(gè)隱層和輸出層組成,每層有若干個(gè)神經(jīng)元,前層每個(gè)神經(jīng)元和后層所有神經(jīng)元均有連接(Fully Connected),連接的邊上帶有權(quán)重,神經(jīng)元的輸出就是輸入和權(quán)重之積經(jīng)過激活函數(shù)映射之后得到的值。
多層感知器能夠?qū)W習(xí)任意非線性函數(shù),其中非線性是通過引入激活函數(shù)來實(shí)現(xiàn)的,我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)其實(shí)就是不斷更新權(quán)值,使得網(wǎng)絡(luò)輸出結(jié)果能夠以較小的誤差正確擬合我們的數(shù)據(jù)。
2.2.2? MLP面臨的挑戰(zhàn)
在利用MLP解決圖像分類問題時(shí),首先要將二維圖像轉(zhuǎn)換成一維向量,然后再對(duì)模型進(jìn)行訓(xùn)練。這樣做有兩個(gè)缺點(diǎn):
1)隨著圖像尺寸的增大,可訓(xùn)練參數(shù)的數(shù)量會(huì)急劇增加;
2)MLP會(huì)丟失圖像的空間特征。
2.3? 卷積神經(jīng)網(wǎng)絡(luò)(CNN)
2.3.1? 理解卷積
通俗來講,圖像處理中的卷積就是通過一個(gè)模板矩陣,在圖像上進(jìn)行滑窗,把對(duì)應(yīng)位置上的元素相乘后加起來,得到最終的結(jié)果,可以形象理解為把原圖像一塊區(qū)域“卷”起來融合成新圖像的一個(gè)像素點(diǎn),這個(gè)模板矩陣即為卷積核。
假設(shè)原圖像的大小為??,卷積核大小為??,往圖像兩邊填充??個(gè)像素,滑窗步長(zhǎng)為??,則經(jīng)過卷積后特征圖的大小為:
假設(shè)原圖像通道數(shù)為C1,卷積后通道數(shù)為C2,需要訓(xùn)練的參數(shù)量為:
浮點(diǎn)數(shù)相乘計(jì)算的次數(shù)為:
2.3.2? CNN簡(jiǎn)介
卷積神經(jīng)網(wǎng)絡(luò)(CNN)目前在深度學(xué)習(xí)領(lǐng)域非常熱門,在圖像和視頻處理項(xiàng)目中尤其普遍。CNN的核心就在于卷積層,卷積層會(huì)使用若干個(gè)卷積核,在圖像上進(jìn)行滑窗卷積操作,通過卷積對(duì)圖像特征進(jìn)行抽象和提取,這么做有兩個(gè)特點(diǎn):
卷積核的參數(shù)全部都是需要通過學(xué)習(xí)得到的,和ANN學(xué)習(xí)權(quán)重參數(shù)一樣,而以上兩個(gè)特性可以大幅降低訓(xùn)練參數(shù)數(shù)量,所以非常適合用于處理圖像問題。
- 卷積核的厚度 = 被卷積的圖像的通道數(shù)
- 卷積核的個(gè)數(shù) = 卷積操作后輸出的通道數(shù)
除了卷積層外,CNN中可能還包括池化層、激活層以及全連接層:
1)池化層(Pooling)通常位于卷積操作之后,其作用在于特征融合和降維,其實(shí)也是一種類似卷積的操作,只是池化層的所有參數(shù)都是超參數(shù)(Average Pooling / Max Pooling),都是不用學(xué)習(xí)得到的,池化操作的降維改變的是圖像的寬高,而不改變通道數(shù)。
2)激活層的主要作用在于增加非線性,值得注意的是卷積層中的激活過程針對(duì)的是每一個(gè)像素值,比如某卷積層輸出中某個(gè)通道的 i 行 j 列像素值為x,只要這個(gè)數(shù)x>0,則x=x;x<0,則x=0。
3)全連接層:負(fù)責(zé)邏輯推斷,所有的參數(shù)都需要學(xué)習(xí)得到。CNN中的全連接層用于鏈接卷積層的輸出,并去除空間信息(通道數(shù)),是一種將三維矩陣變成向量的過程(一種全卷積操作),其操作如下:
輸入特征圖是W×H×C,那么卷積核的尺寸為W×H×C,這樣的話整個(gè)輸入特征圖就變成了一個(gè)數(shù),一共有k個(gè)數(shù)(第一層全連接層的神經(jīng)元個(gè)數(shù)),就有K個(gè)W×H×C的卷積核,所以全連接層(尤其是第一層)的參數(shù)量是非常可怕的。
2.3.3??理解感受野
感受野用來表示神經(jīng)網(wǎng)絡(luò)內(nèi)部的不同位置的神經(jīng)元對(duì)原圖像的感受范圍的大小。神經(jīng)元之所以無法對(duì)原始圖像的全部信息進(jìn)行感知,是因?yàn)樵谶@些網(wǎng)絡(luò)結(jié)構(gòu)中普遍使用卷積層和pooling層,在層與層之間均為局部相連(通過sliding filter)。神經(jīng)元感受野的值越大表示其能接觸到的原始圖像范圍就越大,也意味著他可能蘊(yùn)含更為全局、語義層次更高的特征;而值越小則表示其所包含的特征越趨向于局部和細(xì)節(jié)。因此感受野的值可以大致用來判斷每一層的抽象層次。
由于圖像是二維的,具有空間信息,因此感受野的實(shí)質(zhì)其實(shí)也是一個(gè)二維區(qū)域。但業(yè)界通常將感受野定義為一個(gè)正方形區(qū)域,因此也就使用邊長(zhǎng)來描述其大小了。感受野的抽象公式如下:
其中,?為第n個(gè)卷積層的感受野,?和??分別表示第n個(gè)卷積層的kernel_size和stride。
2.3.4? 特殊卷積結(jié)構(gòu)
1、分組卷積(Group convolution)
分組卷積最早出現(xiàn)在AlexNet中,由于當(dāng)時(shí)的硬件資源有限,訓(xùn)練AlexNet時(shí)卷積操作不能全部放在同一個(gè)GPU處理,因此作者把feature maps分給多個(gè)GPU分別進(jìn)行處理,最過程中把多個(gè)GPU的結(jié)果進(jìn)行通道concat。通過使用分組卷積可以大大減少參數(shù)量。
2、Inception結(jié)構(gòu)
傳統(tǒng)的層疊式網(wǎng)絡(luò),基本上都是一個(gè)個(gè)卷積層的堆疊,每層只用一個(gè)尺寸的卷積核,例如VGG結(jié)構(gòu)中使用了大量的3×3卷積層。事實(shí)上,同一層feature map可以分別使用多個(gè)不同尺寸的卷積核,以獲得不同尺度的特征,再把這些特征結(jié)合起來(concat),得到的特征往往比使用單一卷積核的要好,谷歌的GoogleNet,或者說Inception系列的網(wǎng)絡(luò),就使用了多個(gè)卷積核的結(jié)構(gòu)。
3、Bottleneck結(jié)構(gòu)
發(fā)明GoogleNet的團(tuán)隊(duì)發(fā)現(xiàn),如果僅僅引入多個(gè)尺寸的卷積核,會(huì)帶來大量的額外的參數(shù),受到Network In Network中1×1卷積核的啟發(fā),為了解決這個(gè)問題,他們往Inception結(jié)構(gòu)中加入了一些1×1的卷積核,如下圖所示:
1×1卷積核也被認(rèn)為是影響深遠(yuǎn)的操作,它主要用來改變通道數(shù),降低參數(shù)量,往后大型的網(wǎng)絡(luò)為了降低參數(shù)量都會(huì)應(yīng)用上1×1卷積核。我們來做個(gè)對(duì)比計(jì)算,假設(shè)輸入feature map的維度為256維,要求輸出維度也是256維。有以下兩種操作:
- 256維的輸入直接經(jīng)過一個(gè)3×3×256的卷積層,輸出一個(gè)256維的feature map,那么參數(shù)量為:256×3×3×256 = 589824
- 256維的輸入先經(jīng)過一個(gè)1×1×64的卷積層,再經(jīng)過一個(gè)3×3×64的卷積層,最后經(jīng)過一個(gè)1×1×256的卷積層,輸出256維,參數(shù)量為:256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69632,足足把第一種操作的參數(shù)量降低到九分之一。
4、深度可分離卷積(DepthWise Convolution)
標(biāo)準(zhǔn)的卷積過程如下圖所示,一個(gè)2×2的卷積核在卷積時(shí),對(duì)應(yīng)圖像區(qū)域中的所有通道均被同時(shí)考慮,問題在于,為什么一定要同時(shí)考慮圖像區(qū)域和通道?我們?yōu)槭裁床荒馨淹ǖ篮涂臻g區(qū)域分開考慮?
標(biāo)準(zhǔn)卷積Xception網(wǎng)絡(luò)就是基于以上的問題發(fā)明而來。我們首先對(duì)每一個(gè)通道進(jìn)行各自的卷積操作,有多少個(gè)通道就有多少個(gè)過濾器。得到新的通道feature maps之后,這時(shí)再對(duì)這批新的通道feature maps進(jìn)行標(biāo)準(zhǔn)的1×1跨通道卷積操作。這種操作被稱為 “DepthWise Convolution” ,縮寫“DW”,它的直接作用就在于可以大幅降低參數(shù)量。
深度可分離卷積- 直接接一個(gè)3×3×256的卷積核,參數(shù)量為:3×3×3×256 = 6912
- DW操作,分兩步完成,參數(shù)量為:3×3×3 + 3×1×1×256 = 795,又把參數(shù)量降低到九分之一。
5、通道洗牌
在AlexNet的Group Convolution當(dāng)中,特征的通道被平均分到不同組里面,最后再通過兩個(gè)全連接層來融合特征,這樣一來,就只能在最后時(shí)刻才融合不同組之間的特征,對(duì)模型的泛化性是相當(dāng)不利的。為了解決這個(gè)問題,ShuffleNet在每一次層疊這種Group conv層前,都進(jìn)行一次channel shuffle,shuffle過的通道被分配到不同組當(dāng)中。進(jìn)行完一次group conv之后,再一次channel shuffle,然后分到下一層組卷積當(dāng)中,以此循環(huán)。
經(jīng)過channel shuffle之后,Group conv輸出的特征能考慮到更多通道,輸出的特征自然代表性就更高。另外,AlexNet的分組卷積,實(shí)際上是標(biāo)準(zhǔn)卷積操作,而在ShuffleNet里面的分組卷積操作是depthwise卷積,因此結(jié)合了通道洗牌和分組depthwise卷積的ShuffleNet,能得到超少量的參數(shù)以及超越mobilenet、媲美AlexNet的準(zhǔn)確率。
6、通道加權(quán)
無論是在Inception、DenseNet或者ShuffleNet里面,我們對(duì)所有通道產(chǎn)生的特征都是不分權(quán)重直接結(jié)合的,那為什么要認(rèn)為所有通道的特征對(duì)模型的作用就是相等的呢? 這是一個(gè)好問題,于是,ImageNet 2017冠軍SENet就出來了。
從上圖可以看到,一組特征在上一層被輸出,這時(shí)候分兩條路線,第一條直接通過,第二條進(jìn)行如下操作:
7、空洞卷積(Dilated Convolution)
標(biāo)準(zhǔn)的3×3卷積核只能看到對(duì)應(yīng)區(qū)域3×3的大小,但是為了能讓卷積核看到更大的范圍,dilated conv使其成為了可能。dilated conv原論文中的結(jié)構(gòu)如圖所示:
上圖b可以理解為卷積核大小依然是3×3,但是每個(gè)卷積點(diǎn)之間有1個(gè)空洞(dilated rate = 1),也就是在綠色7×7區(qū)域里面,只有9個(gè)紅色點(diǎn)位置作了卷積處理,其余點(diǎn)權(quán)重為0。這樣即使卷積核大小不變,但它看到的區(qū)域變得更大了。
8、可變形卷積(Deformable Convolution)
傳統(tǒng)的卷積核一般都是長(zhǎng)方形或正方形,但MSRA提出了一個(gè)相當(dāng)反直覺的見解,認(rèn)為卷積核的形狀可以是變化的,變形的卷積核能讓它只看感興趣的圖像區(qū)域 ,這樣識(shí)別出來的特征更佳。
要做到這個(gè)操作,可以直接在原來的卷積核的基礎(chǔ)上再加一層卷積核,這層卷積核學(xué)習(xí)的是下一層卷積核的位置偏移量(offset),實(shí)際增加的計(jì)算量是相當(dāng)少的,但能實(shí)現(xiàn)可變形卷積核,識(shí)別特征的效果更好。
在實(shí)際操作時(shí),并不是真正地把卷積核進(jìn)行擴(kuò)展,而是對(duì)卷積前圖片的像素重新整合,變相地實(shí)現(xiàn)卷積核的擴(kuò)張,具體來說可變性卷積的流程為:
9、上采樣、上池化和轉(zhuǎn)置卷積
1)上采樣(UnSampling)
UnSampling階段沒有使用MaxPooling時(shí)的位置信息,而是直接將內(nèi)容以插值方式來擴(kuò)充Feature Map,屬于人工特征工程,沒有要學(xué)習(xí)的參數(shù)。常用上采樣方法有:最近鄰插值(Nearest neighbor interpolation)、雙線性插值(Bi-Linear interpolation)、雙立方插值(Bi-Cubic interpolation)
?
上采樣2)上池化(UnPooling)
在Maxpooling的時(shí)候保留最大值的位置信息,之后在UnPooling階段使用該信息擴(kuò)充Feature Map,除最大值位置以外,其余補(bǔ)0。
?
上池化3)轉(zhuǎn)置卷積(Deconvolution)
反卷積是一種特殊的正向卷積,先按照一定的比例通過補(bǔ)0來擴(kuò)大輸入圖像的尺寸,接著旋轉(zhuǎn)卷積核(參數(shù)與之前正向卷積過程中使用到的卷積核參數(shù)一致),再進(jìn)行卷積。具體步驟如下:
?
?
?
下圖展示一個(gè)反卷積的工作過程,乍看一下好像反卷積和卷積的工作過程差不多,主要的區(qū)別在于反卷積輸出圖片的尺寸會(huì)大于輸入圖片的尺寸,通過增加padding來實(shí)現(xiàn)這一操作。
下圖中的反卷積的stride為2,通過間隔插入padding來實(shí)現(xiàn)的。同樣,可以根據(jù)反卷積的o、s、k、p參數(shù)來計(jì)算反卷積的輸出i,也就是卷積的輸入。公式如下:i=(o?1)?s+k?2?p,其實(shí)就是根據(jù)上式推導(dǎo)出來的。
2.3.5? 卷積的可視化
1、可視化方案
總體思路就是將某一層的feature maps 經(jīng)過相反的結(jié)構(gòu)。如經(jīng)過max pooling層那么就在對(duì)稱位置記住所取位置后,unpooling到相應(yīng)位置,如經(jīng)過relu那么在對(duì)稱位置在經(jīng)過一次relu,如經(jīng)過conv那么在對(duì)稱位置使用相同的Filter的轉(zhuǎn)置進(jìn)行deconv。
最后可視化網(wǎng)絡(luò)如下圖所示:
網(wǎng)絡(luò)的整個(gè)過程,從右邊開始:輸入圖片-->卷積-->Relu-->最大池化-->得到結(jié)果特征圖-->反池化-->Relu-->反卷積。
舉個(gè)例子:假如你想要查看Alexnet 的conv5提取到了什么東西,我們就用conv5的特征圖后面接一個(gè)反卷積網(wǎng)絡(luò),然后通過:反池化、反激活、反卷積,這樣的一個(gè)過程,把本來一張13*13大小的特征圖(conv5大小為13*13),放大回去,最后得到一張與原始輸入圖片一樣大小的圖片(227*227)。
2、理解可視化
從上圖可看出:
- layer 1、layer 2學(xué)習(xí)到的特征基本上是顏色、邊緣等低層特征;
- layer 3則開始稍微變得復(fù)雜,學(xué)習(xí)到的是紋理特征,比如上面的一些網(wǎng)格紋理;
- layer 4學(xué)習(xí)到的則是比較有區(qū)別性的特征,比如狗頭等物體的局部;
- layer 5學(xué)習(xí)到的則是物體整體的信息,具有辨別性關(guān)鍵特征。
總的來說,通過CNN學(xué)習(xí)后,我們學(xué)習(xí)到的特征,是具有辨別性的特征,比如要我們區(qū)分人臉和狗頭,那么通過CNN學(xué)習(xí)后,背景部位的激活度基本很少,我們通過可視化就可以看到我們提取到的特征忽視了背景,而是把關(guān)鍵的信息給提取出來了。
3、特征學(xué)習(xí)過程
在網(wǎng)絡(luò)訓(xùn)練過程中,每一層學(xué)習(xí)到的特征是怎么變化的,上面每一張圖片是網(wǎng)絡(luò)的某一層特征圖,然后每一行有8個(gè)小圖片,分別表示網(wǎng)絡(luò)epochs次數(shù)為:1、2、5、10、20、30、40、64的特征圖,可以看出前幾層(lower)收斂較快,后幾層收斂較慢。
上圖是對(duì)應(yīng)著圖像平移、縮放、旋轉(zhuǎn)給featuremap帶來的變化,可以看出第一層中對(duì)于圖像變化非常敏感,第7層就接近于線性變化,最后的輸變化就相對(duì)較小了。
2.3.6? 總結(jié)
總的來說,卷積核的發(fā)展有如下幾個(gè)方面和特點(diǎn):
卷積核方面:
卷積層通道方面:
卷積層連接方面:
2.4? 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
2.4.1? 基礎(chǔ)RNN結(jié)構(gòu)
普通神經(jīng)網(wǎng)絡(luò)由于結(jié)構(gòu)問題,對(duì)于時(shí)序任務(wù),會(huì)獨(dú)立的去處理每個(gè)數(shù)據(jù)項(xiàng),難以有效學(xué)習(xí)各個(gè)數(shù)據(jù)項(xiàng)之間的上下文依賴關(guān)系。
RNN的提出主要就是用來解決序列問題,強(qiáng)調(diào)的是先后順序,借助RNN的hidden state記憶單元,使得一個(gè)序列位置的輸出在數(shù)學(xué)上和之前的所有序列的輸入都是有關(guān)系的,常見RNN網(wǎng)絡(luò)結(jié)構(gòu)如下:
左邊是RNN網(wǎng)絡(luò),右邊是RNN網(wǎng)絡(luò)按時(shí)序展開的形式,其實(shí)就是同一個(gè)神經(jīng)網(wǎng)絡(luò)單元(同樣的權(quán)重在各個(gè)時(shí)間步共享),t 時(shí)刻的hidden status是當(dāng)前的時(shí)間步的數(shù)據(jù)和上一時(shí)間步的hidden status(記憶)拼接成大的矩陣后經(jīng)過一個(gè)tanh函數(shù)激活的結(jié)果,同時(shí)需要把結(jié)果??作為記憶信息輸入到下一時(shí)刻(??初始化為0)。
內(nèi)部具體結(jié)構(gòu)如下圖所示:
RNN的幾種結(jié)構(gòu):
1)RNN(N vs N)網(wǎng)絡(luò)結(jié)構(gòu)
2)RNN(N vs 1)網(wǎng)絡(luò)結(jié)構(gòu)
輸出經(jīng)過一個(gè)softmax后即可得到分類結(jié)果
3)RNN(1 vs N)網(wǎng)絡(luò)結(jié)構(gòu)
4)RNN(N vs M)網(wǎng)絡(luò)結(jié)構(gòu)
RNN存在的問題:
2.4.2? LSTM結(jié)構(gòu)
為了解決RNN存在的幾個(gè)問題,提出了LSTM神經(jīng)網(wǎng)絡(luò),它可以通過門控機(jī)制解決無法學(xué)習(xí)長(zhǎng)期依賴的問題(將梯度乘性問題轉(zhuǎn)變成加性問題),有挑選的將信息放入到細(xì)胞狀態(tài)線里,從某種角度類似時(shí)間線上的attention機(jī)制。LSTM結(jié)構(gòu)圖如下所示:
1、細(xì)胞狀態(tài)和隱狀態(tài)
LSTM相比RNN的hidden status還引入了細(xì)胞狀態(tài)來記錄信息,細(xì)胞狀態(tài)通過門結(jié)構(gòu)gate來添加新的記憶和刪除舊的記憶信息。
添加和刪除信息的原理:輸入矩陣通過sigmoid激活函數(shù)后就會(huì)得到0~1取值范圍的矩陣,再和上一時(shí)刻的cell state矩陣進(jìn)行點(diǎn)乘,就可以實(shí)現(xiàn)過濾部分信息的效果。
2、門控結(jié)構(gòu)
LSTM通過遺忘門來決定從上個(gè)隱狀態(tài)記憶中忘記哪些信息,通過輸入門來決定輸入哪部分信息,通過輸出門來決定輸出哪部分信息,以此解決長(zhǎng)時(shí)依賴問題。下面我們?cè)敿?xì)介紹一下LSTM中的各種門:
1)遺忘門
通過遺忘門可以通過過濾矩陣選擇性忘記cell state中的部分記憶信息。
2)輸入門
這一步進(jìn)行了兩個(gè)操作:一個(gè)是經(jīng)過輸入門產(chǎn)生了一個(gè)過濾矩陣來決定那些信息來加入到本時(shí)刻的cell state中;另一步是通過上一時(shí)刻的hidden state和新的輸入來計(jì)算這步的待輸入信息;然后,待輸入信息和輸入門產(chǎn)生的過濾矩陣點(diǎn)乘,產(chǎn)生最終需添加到cell state的新信息。
3)輸出門
將新的cell state信息經(jīng)過tanh激活后,再和輸出門產(chǎn)生的過濾矩陣點(diǎn)乘,得到此刻的隱狀態(tài)?
LSTM中梯度的傳播有很多條路徑,細(xì)胞記憶上多是逐元素的相乘和相加,梯度流穩(wěn)定,因此能夠解決RNN無法學(xué)習(xí)長(zhǎng)期依賴和梯度消失的問題;但是,LSTM 仍然有可能發(fā)生梯度爆炸,不過,由于 LSTM 的其他路徑非常崎嶇,和普通 RNN 相比多經(jīng)過了很多次激活函數(shù)(導(dǎo)數(shù)都小于 1),因此 LSTM 發(fā)生梯度爆炸的頻率要低得多。
2.4.3? GRU結(jié)構(gòu)
GRU的結(jié)構(gòu)如下,主要包含重置門和更新門,把GRU看著LSTM的變體,相當(dāng)于取消了LSTM中的cell state,只使用了hidden state,并且使用update gate更新門來替換LSTM中的輸入門和遺忘門,取消了LSTM中的輸出門,新增了reset gate重置門。這樣做的好處是在達(dá)到LSTM相近的效果下,GRU參數(shù)更少,訓(xùn)練的計(jì)算開銷更小,訓(xùn)練速度更快。
重置門:多大程度上擦除以前的隱狀態(tài)
更新門:忘記傳遞下來的? 中的某些維度信息,并加入當(dāng)前時(shí)刻輸入的某些維度信息。
2.5? 相關(guān)面試題
Q:用Pytorch搭建一個(gè)神經(jīng)網(wǎng)絡(luò)的大概流程是什么樣的?
A:
Q:Pytorch和Tensorflow的區(qū)別
A:
Q:
A:
第三章? 激活函數(shù)
定義:在神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元節(jié)點(diǎn)的激活函數(shù)定義了對(duì)神經(jīng)元輸出的映射,即神經(jīng)元的輸出經(jīng)過激活函數(shù)處理后再作為輸出。
作用:神經(jīng)網(wǎng)絡(luò)中激活函數(shù)的主要作用是提供網(wǎng)絡(luò)的非線性建模能力,如不特別說明,激活函數(shù)一般而言是非線性函數(shù)。
3.1? 常用激活函數(shù)
3.1.1??Sigmoid函數(shù)
Sigmoid 是使用范圍最廣的一類激活函數(shù),具有指數(shù)函數(shù)形狀 。定義為:
可見,sigmoid在定義域內(nèi)處處可導(dǎo),兩側(cè)導(dǎo)數(shù)逐漸趨近于0,也稱為軟飽和激活函數(shù);與軟飽和相對(duì)的是硬飽和激活函數(shù),即:f'(x)=0,當(dāng) |x| > c,其中 c 為常數(shù)。
缺點(diǎn):1)梯度消失;2)輸出均值始終大于0,收斂慢。
3.1.2? Tanh函數(shù)
可見,tanh(x)=2sigmoid(2x)-1,也具有軟飽和性。tanh 網(wǎng)絡(luò)的收斂速度要比sigmoid快。因?yàn)?tanh 的輸出均值比 sigmoid 更接近 0,SGD會(huì)更接近 natural gradient(一種二次優(yōu)化技術(shù)),從而降低所需的迭代次數(shù)。
缺點(diǎn):1)梯度消失。
3.1.3? ReLU函數(shù)
與傳統(tǒng)的sigmoid激活函數(shù)相比,ReLU能夠有效緩解梯度消失問題,從而直接以監(jiān)督的方式訓(xùn)練深度神經(jīng)網(wǎng)絡(luò),無需依賴無監(jiān)督的逐層預(yù)訓(xùn)練,這也是2012年深度卷積神經(jīng)網(wǎng)絡(luò)在ILSVRC競(jìng)賽中取得里程碑式突破的重要原因之一。
可見,ReLU 在x<0 時(shí)硬飽和;由于 x>0時(shí)導(dǎo)數(shù)為 1,所以,ReLU 能夠在x>0時(shí)保持梯度不衰減,從而緩解梯度消失問題。但其仍存在幾個(gè)問題:
3.1.4? PReLU函數(shù)
PReLU是ReLU 和 LReLU的改進(jìn)版本,具有非飽和性:
與Leaky ReLU相比,PReLU中的負(fù)半軸斜率a可學(xué)習(xí)而非固定,雖然PReLU 引入了額外的參數(shù),但基本不需要擔(dān)心過擬合。與ReLU相比,PReLU收斂速度更快,因?yàn)镻ReLU的輸出更接近0均值。
3.1.5? RReLU函數(shù)
數(shù)學(xué)形式與PReLU類似,但RReLU是一種非確定性激活函數(shù),其參數(shù)是隨機(jī)的。這種隨機(jī)性類似于一種噪聲,能夠在一定程度上起到正則效果。
3.1.6??Maxout函數(shù)
Maxout是ReLU的推廣,其可以看做是在深度學(xué)習(xí)網(wǎng)絡(luò)中加入一層激活函數(shù)層,包含一個(gè)參數(shù)n。這一層相比ReLU,sigmoid等,其特殊之處在于增加了n個(gè)神經(jīng)元,然后輸出激活值最大的值。
Maxout網(wǎng)絡(luò)能夠近似任意連續(xù)函數(shù),且當(dāng)w2,b2,…,wn,bn為0時(shí),退化為ReLU。Maxout能夠緩解梯度消失,同時(shí)又規(guī)避了ReLU神經(jīng)元死亡的缺點(diǎn),但增加了參數(shù)和計(jì)算量。
3.1.7? ELU函數(shù)
ELU融合了sigmoid和ReLU,具有左側(cè)軟飽性。其正式定義為:
右側(cè)線性部分使得ELU能夠緩解梯度消失,而左側(cè)軟飽能夠讓ELU對(duì)輸入變化或噪聲更魯棒。ELU的輸出均值接近于零,所以收斂速度更快。
3.2? 相關(guān)面試題
Q:
A:
?
?
第四章? 損失函數(shù)
4.1? 概覽
4.2? 分類任務(wù)損失函數(shù)
4.2.1? 二分類交叉熵?fù)p失(sigmoid_cross_entropy)
其中,?是樣本標(biāo)簽(0/1),?是模型預(yù)測(cè)樣本為正例的概率。
4.2.2? 二分類平衡交叉熵?fù)p失(balanced_sigmoid_cross_entropy)
其中,?是樣本標(biāo)簽(0/1),?是模型預(yù)測(cè)樣本為正例的概率,?是一個(gè)超參數(shù)。
4.2.3? 多分類交叉熵?fù)p失(softmax_cross_entropy)
其中,?是類別數(shù),?是樣本標(biāo)簽的onehot表示,?中每個(gè)元素??表示樣本屬于第??類的概率。
4.2.4? Focal Loss
Focal Loss主要用于解決多分類任務(wù)中樣本不平衡的現(xiàn)象,可以獲得更好的分類效果:
其中,? 用于平衡不同類別樣本的重要性,?表示給第 ?類樣本分配的權(quán)重,數(shù)量少的類別分配更大的權(quán)重,數(shù)量多的減小權(quán)重;?用于控制預(yù)測(cè)結(jié)果的loss大小,概率大說明是容易分類的樣本,loss就會(huì)減小,概率小說明是困難、錯(cuò)分的樣本,loss就會(huì)增大,通過這一參數(shù)可以使模型更關(guān)注于困難樣本。論文中α=0.25,γ=2效果最好。
4.2.5??Dice Loss
dice系數(shù)源于二分類,本質(zhì)上是衡量?jī)蓚€(gè)樣本的重疊部分,二分類時(shí)使用該loss,本質(zhì)就是不斷學(xué)習(xí),使得交比并越來越大。
最終Dice Loss = 1 - DSC
4.2.6??合頁損失(hinge loss)
svm中使用的損失函數(shù),由于合頁損失優(yōu)化到滿足小于一定gap距離就會(huì)停止優(yōu)化,而交叉熵?fù)p失卻是一直在優(yōu)化,所以,通常情況下,交叉熵?fù)p失效果優(yōu)于合頁損失。
- 當(dāng)??大于等于+1或者小于等于-1時(shí),都是分類器確定的分類結(jié)果,此時(shí)的損失函數(shù)loss為0;
- 當(dāng)預(yù)測(cè)值時(shí),分類器對(duì)分類結(jié)果不確定,loss不為0。顯然,當(dāng)??時(shí),loss達(dá)到最大值。
4.2.7? KL散度
KL散度( Kullback–Leibler divergence),也叫相對(duì)熵,是描述兩個(gè)概率分布P和Q差異的一種方法。
從上述公式中我們可以看出,KL散度 = 交叉熵 - 熵。
4.3? 回歸任務(wù)損失函數(shù)
4.3.1? 均方誤差(Mean Square Error, MSE)
MSE表示了預(yù)測(cè)值與目標(biāo)值之間差值的平方和然后求平均。
L2損失表示了預(yù)測(cè)值與目標(biāo)值之間差值的平方和然后開更方,L2表示的是歐幾里得距離。
MSE和L2的曲線走勢(shì)都一樣。區(qū)別在于一個(gè)是求的平均,一個(gè)是求的開方。
4.3.2??平均絕對(duì)誤差(Mean Absolute Error, MAE)
MAE表示了預(yù)測(cè)值與目標(biāo)值之間差值的絕對(duì)值然后求平均。
L1表示了預(yù)測(cè)值與目標(biāo)值之間差值的絕對(duì)值,L1也叫做曼哈頓距離。
MAE和L1的區(qū)別在于一個(gè)求了均值,一個(gè)沒有求,兩者的曲線走勢(shì)也是完全一致的。
總結(jié):MAE/L1 Loss 對(duì)于局外點(diǎn)更魯棒,但它的導(dǎo)數(shù)不連續(xù)使得尋找最優(yōu)解的過程低效;MSE/L2 Loss 對(duì)于局外點(diǎn)敏感,但在優(yōu)化過程中更為穩(wěn)定和準(zhǔn)確。
4.3.3??Huber Loss和Smooth L1 Loss
Huber loss具備了MAE和MSE各自的優(yōu)點(diǎn),當(dāng)δ趨向于0時(shí)它就退化成了MAE,而當(dāng)δ趨向于無窮時(shí)則退化為了MSE。
Smooth L1 loss具備了L1 loss和L2 loss各自的優(yōu)點(diǎn),本質(zhì)就是L1和L2的組合。
Huber loss和Smooth L1 loss具有相同的曲線走勢(shì),當(dāng)Huber loss中的δ等于1時(shí),Huber loss等價(jià)于Smooth L1 loss。
對(duì)于Huber損失來說,δ的選擇十分重要,它決定了模型處理局外點(diǎn)的行為。當(dāng)殘差大于δ時(shí)使用L1損失,很小時(shí)則使用更為合適的L2損失來進(jìn)行優(yōu)化。Huber損失函數(shù)克服了MAE和MSE的缺點(diǎn),不僅可以保持損失函數(shù)具有連續(xù)的導(dǎo)數(shù),同時(shí)可以利用MSE梯度隨誤差減小的特性來得到更精確的最小值,也對(duì)局外點(diǎn)具有更好的魯棒性。但Huber損失函數(shù)的良好表現(xiàn)得益于精心訓(xùn)練的超參數(shù)δ。
4.3.4??對(duì)數(shù)雙曲余弦(Log Cosh Loss)
?
其優(yōu)點(diǎn)在于對(duì)于很小的誤差來說log(cosh(x))與(x2)/2很相近,而對(duì)于很大的誤差則與abs(x)-log2很相近。這意味著log-cosh損失函數(shù)可以在擁有MSE優(yōu)點(diǎn)的同時(shí)也不會(huì)受到局外點(diǎn)的太多影響。它擁有Huber的所有優(yōu)點(diǎn),并且在每一個(gè)點(diǎn)都是二次可導(dǎo)的。
4.4? 相關(guān)面試題
Q:
A:
?
第五章? 優(yōu)化算法
5.1? 概述
機(jī)器學(xué)習(xí)的本質(zhì)是建立優(yōu)化模型,通過優(yōu)化方法,不斷迭代參數(shù)向量,找到使目標(biāo)函數(shù)最優(yōu)的參數(shù)向量,最終建立模型。通常用到的優(yōu)化方法:梯度下降方法、牛頓法、擬牛頓法等。這些優(yōu)化方法的本質(zhì)就是在更新參數(shù)。
5.1.1? 梯度下降法
梯度下降是一種最小化目標(biāo)函數(shù) J(θ) 的方法,其中 是模型參數(shù),而最小化目標(biāo)函數(shù)是通過在其關(guān)于 θ 的 梯度 的相反方向更新 θ 來實(shí)現(xiàn)的;而學(xué)習(xí)率(learning rate)則決定了在到達(dá)(局部)最小值的過程中每一步走多長(zhǎng)。
梯度下降目前主要有三種方式:
- 批量梯度下降(BGD,每次進(jìn)行一次參數(shù)更新需要在整個(gè)訓(xùn)練集上計(jì)算梯度);
- 隨機(jī)梯度下降(SGD,每次只使用一個(gè)隨機(jī)的樣本進(jìn)行參數(shù)更新);
- 小批量梯度下降(MBGD,每次從訓(xùn)練集中取出 n 個(gè)樣本作為一個(gè) mini-batch,以此來進(jìn)行一次參數(shù)更新)。根據(jù)數(shù)據(jù)量的大小,我們?cè)趨?shù)更新的準(zhǔn)確性和執(zhí)行更新所需時(shí)間之間做了一個(gè)權(quán)衡。
Q:MBGD中batch size的選擇
A:
1)為什么 batch size 會(huì)影響訓(xùn)練結(jié)果
?
2)在合理范圍內(nèi),增大 Batch_Size 有何好處
內(nèi)存利用率提高了,大矩陣乘法的并行化效率提高;
跑完一個(gè)epoch(全數(shù)據(jù)集)所需的迭代次數(shù)減少,對(duì)于相同數(shù)據(jù)量的處理速度進(jìn)一步加快;
在一定范圍內(nèi),一般來說 Batch_Size 越大,其確定的下降方向越準(zhǔn),引起訓(xùn)練震蕩越小。
3)盲目增大 Batch_Size 有何壞處
內(nèi)存利用率提高了,但是內(nèi)存容量可能撐不住了;
跑完一次 epoch(全數(shù)據(jù)集)所需的迭代次數(shù)減少,但所花費(fèi)的時(shí)間大大增加了,從而對(duì)參數(shù)的修正也就顯得更加緩慢;
Batch_Size 增大到一定程度,其確定的下降方向已經(jīng)基本不再變化。
運(yùn)行結(jié)果如上圖所示,其中絕對(duì)時(shí)間做了標(biāo)準(zhǔn)化處理。運(yùn)行結(jié)果與上文分析相印證:
5.1.2? 牛頓法
首先得明確,牛頓法是為了求解函數(shù)值為零的時(shí)候變量的取值問題的,具體地,當(dāng)要求解 f(θ)=0 時(shí),如果 f 可導(dǎo),那么可以通過迭代公式
來迭代求得最小值,可以通過一個(gè)動(dòng)圖來說明這個(gè)過程。
在機(jī)器學(xué)習(xí)中,我們應(yīng)用牛頓法求解目標(biāo)函數(shù)的一階導(dǎo)數(shù)為0時(shí)的參數(shù),進(jìn)而求出目標(biāo)函數(shù)最小值時(shí)的參數(shù)。那么迭代公式變?yōu)?#xff1a;
當(dāng)θ是向量時(shí),牛頓法可以使用下面式子表示:
其中H叫做海森矩陣,其實(shí)就是目標(biāo)函數(shù)對(duì)參數(shù)向量 θ 的二階導(dǎo)數(shù)。下面給出牛頓法的完整算法描述:
通過比較牛頓法和梯度下降法的迭代公式,可以發(fā)現(xiàn)兩者及其相似,海森矩陣的逆就好比梯度下降法的學(xué)習(xí)率參數(shù)alpha。
牛頓法的優(yōu)缺點(diǎn)總結(jié):
優(yōu)點(diǎn):二階收斂,收斂速度快;同時(shí),海森矩陣的的逆在迭代中不斷減小,起到逐漸縮小步長(zhǎng)的效果。
缺點(diǎn):牛頓法是一種迭代算法,每一步都需要求解目標(biāo)函數(shù)的Hessian矩陣的逆矩陣,計(jì)算比較復(fù)雜。
5.1.3? 擬牛頓法
擬牛頓法的本質(zhì)思想是改善牛頓法每次需要求解復(fù)雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡(jiǎn)化了運(yùn)算的復(fù)雜度。
這樣的迭代與牛頓法類似,區(qū)別就在于用近似矩陣??代替真實(shí)的Hesse矩陣。所以擬牛頓法最關(guān)鍵的地方就是每一步迭代中矩陣?的更新。具體來說,求近似矩陣的方法有:
1)DFP算法
2)BFGS算法
3)L-BFGS算法
5.2? 存在的挑戰(zhàn)
在深度學(xué)習(xí)中,我們很少去用牛頓法,而是采用梯度下降法,但是標(biāo)準(zhǔn)的 MBGD 并不保證好的收斂,也提出了以下需要被解決的問題:
5.3? 梯度下降優(yōu)化方法
5.3.1? 動(dòng)量法(Momentum)
SGD 在遇到溝壑時(shí)會(huì)比較困難(即在一個(gè)維度上比另一個(gè)維度更陡峭的曲面),這些曲面通常包圍著局部最優(yōu)點(diǎn)。在這些場(chǎng)景中,SGD 震蕩且緩慢的沿著溝壑的下坡方向朝著局部最優(yōu)點(diǎn)前進(jìn),如下圖所示:
動(dòng)量(Momentum)是一種在相關(guān)方向加速 SGD 的方法,并且能夠減少震蕩。
原理:它通過在當(dāng)前更新向量(梯度方向)中加入了先前一步的狀態(tài),對(duì)于那些當(dāng)前的梯度方向與上一次梯度方向相同的向量維度進(jìn)行加強(qiáng),即這些方向上更快了;對(duì)于那些當(dāng)前的梯度方向與上一次梯度方向不同的向量維度進(jìn)行削減,即這些方向上減慢了。因此可以獲得更快的收斂速度與減少振蕩。
其具體計(jì)算公式如下
其中,動(dòng)量項(xiàng) γ 通常設(shè)置為 0.9 或者相似的值。
5.3.2??Nesterov Accelerated Gradient(NAG)
Momentum中,θ 每次都會(huì)多走??的量;在NAG中,我們直接讓 θ 先走到 ?之后的地方,然后再根據(jù)那里的梯度前進(jìn)一步,這種預(yù)期更新防止我們下降得太快,也帶來了更高的響應(yīng)速度,這在一些任務(wù)中非常有效的提升了性能。
- 動(dòng)量法首先計(jì)算當(dāng)前梯度(圖 4 中的小藍(lán)色向量),然后在更新累積梯度方向上大幅度的跳躍(圖 4 中的大藍(lán)色向量);
- NAG 首先在先前的累積梯度方向上進(jìn)行大幅度的跳躍(圖 4 中的棕色向量),評(píng)估這個(gè)梯度并做一下修正(圖 4 中的紅色向量),這就構(gòu)成一次完整的 NAG 更新(圖 4 中的綠色向量)。
NAG算法相對(duì)于Momentum多了一個(gè)本次梯度相對(duì)上次梯度的變化量,這個(gè)變化量本質(zhì)上是對(duì)目標(biāo)函數(shù)二階導(dǎo)的近似。由于利用了二階導(dǎo)的信息,NAG算法才會(huì)比Momentum具有更快的收斂速度。
通過上面的兩種方法,可以做到每次學(xué)習(xí)過程中能夠根據(jù)損失函數(shù)的斜率做到自適應(yīng)更新來加速SGD的收斂。下一步便需要對(duì)每個(gè)參數(shù)根據(jù)參數(shù)的重要性進(jìn)行各自自適應(yīng)更新。
5.3.3??Adagrad
Adagrad也是一種基于梯度的優(yōu)化算法,它能夠?qū)Σ煌瑫r(shí)刻的參數(shù) θ?自適應(yīng)不同的學(xué)習(xí)速率,對(duì)稀疏特征,得到大的學(xué)習(xí)更新,對(duì)非稀疏特征,得到較小的學(xué)習(xí)更新,因此該優(yōu)化算法適合處理稀疏特征數(shù)據(jù)。其計(jì)算公式如下:
其中??是一個(gè)對(duì)角矩陣,對(duì)角元素??是參數(shù)??從開始到時(shí)間點(diǎn)?t?為止的梯度平方和;??是一個(gè)平滑項(xiàng),用于防止分母為 0 ,通常為?10?8?左右;?為目標(biāo)函數(shù)關(guān)于參數(shù)?θ?在 t 時(shí)刻的梯度。
Adagrad的優(yōu)缺點(diǎn)
優(yōu)勢(shì):在于它能夠?yàn)槊總€(gè)參數(shù)自適應(yīng)不同的學(xué)習(xí)速率,而一般的人工都是設(shè)定為0.01。
缺點(diǎn):在于需要計(jì)算參數(shù)梯度序列平方和,并且學(xué)習(xí)速率趨勢(shì)是不斷衰減最終達(dá)到一個(gè)非常小的值。
5.3.4??RMSProp
RMSProp是 Adagrad 的擴(kuò)展,旨在幫助緩解后者學(xué)習(xí)率單調(diào)下降的問題。與 Adagrad 累積過去所有梯度的平方和不同,RMSProp主要有兩個(gè)方面的改進(jìn):
- Adadelta 限制在過去某個(gè)大小為w的窗口內(nèi)的梯度(相當(dāng)于滑動(dòng)平均值);
- 存儲(chǔ)先前 w 個(gè)梯度的平方效率不高,Adadelta 的梯度平方和被遞歸的定義為過去所有梯度平方的滑動(dòng)平均值。
在 t 時(shí)刻的滑動(dòng)平均值 僅僅取決于先前的平均值和當(dāng)前的梯度:
先前我們推導(dǎo)過的 Adagrad 的參數(shù)更新向量,我們現(xiàn)在用過去梯度平方和的滑動(dòng)平均 來代替對(duì)角矩陣 :
由于分母只是一個(gè)梯度的均方根誤差(Root Mean Squared,RMS),我們可以用縮寫來代替:
這種方法即RMSProp,解決了對(duì)歷史梯度一直累加而導(dǎo)致學(xué)習(xí)率一直下降的問題,但仍需要自己選擇初始的學(xué)習(xí)率。
Hinton 建議將 γ 設(shè)為 0.9 ,默認(rèn)學(xué)習(xí)率 η 設(shè)為 0.001 。
5.3.5??Adadelta
為了解決參數(shù)更新中單位不匹配的問題,并自適應(yīng)的選擇一個(gè)學(xué)習(xí)率,Adadelta定義了另一個(gè)關(guān)于參數(shù)??的滑動(dòng)平均:
那么參數(shù)的均方根誤差即為:
由于??未知,采用上一步??來代替學(xué)習(xí)率??,最終得到Adadelta的更新規(guī)則:
5.3.6? Adam
Adaptive Moment Estimation是另一種為每個(gè)參數(shù)計(jì)算自適應(yīng)學(xué)習(xí)率的方法。除了像 Adadelta 和 RMSprop 一樣存儲(chǔ)歷史梯度平方的滑動(dòng)平均值??外,Adam 也存儲(chǔ)歷史梯度的滑動(dòng)平均值?,類似于動(dòng)量:
??與 ?分別是梯度的帶權(quán)平均和帶權(quán)有偏方差,初始為0向量,Adam的作者發(fā)現(xiàn)他們傾向于0向量,特別是在衰減因子β1,β2接近于1時(shí)。為了改進(jìn)這個(gè)問題,對(duì) ?與 ?進(jìn)行偏差修正:
最終Adam的更新公式為:
作者建議 β1 的默認(rèn)值為 0.9 , β2 的默認(rèn)值為 0.999 ,? 的默認(rèn)值為 10?8 。實(shí)踐證明 Adam 在訓(xùn)練中非常有效,而且對(duì)比其他自適應(yīng)學(xué)習(xí)率算法也有優(yōu)勢(shì)。
5.4? 梯度優(yōu)化額外的策略
介紹一些可以和前面討論的算法一起使用的策略,用以進(jìn)一步提升 SGD 的性能。
1)Shuffling and Curriculum Learning
- 為了使得學(xué)習(xí)過程更加無偏,應(yīng)該在每次迭代中隨機(jī)打亂訓(xùn)練集中的樣本。
- 另一方面,在很多情況下,我們是逐步解決問題的,而將訓(xùn)練集按照某個(gè)有意義的順序排列會(huì)提高模型的性能和SGD的收斂性,如何將訓(xùn)練集建立一個(gè)有意義的排列被稱為Curriculum Learning。
2)Batch normalization
- Batch normalization在每次mini-batch反向傳播之后重新對(duì)參數(shù)進(jìn)行0均值、1方差的標(biāo)準(zhǔn)化過程。這樣可以使用更大的學(xué)習(xí)速率,以及花費(fèi)更少的精力在參數(shù)初始化點(diǎn)上。Batch normalization充當(dāng)著正則化、減少甚至消除掉Dropout的必要性。
3)Early stopping
- 在驗(yàn)證集上如果連續(xù)的多次迭代過程中損失函數(shù)不再顯著地降低,那么應(yīng)該提前結(jié)束訓(xùn)練。
4)Gradient noise
?5.5? 相關(guān)面試題
Q:
A:
?
第六章? 反向傳播算法(BP算法)
基本思想:?BP算法就是目前使用較為廣泛的一種參數(shù)學(xué)習(xí)算法。其主要由由信號(hào)的正向傳播(求損失)與誤差的反向傳播(誤差回傳)兩個(gè)過程組成。
6.1? 神經(jīng)網(wǎng)絡(luò)
假設(shè)我們有一個(gè)神經(jīng)網(wǎng)絡(luò),第??層的輸入定義為??,經(jīng)過激活函數(shù)后的輸出定義為??,激活函數(shù)定義為??,本層的權(quán)重定義為?,大致如下圖所示:
通常來說,這些參數(shù)的形式如下:
? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ?? ??
其中,?表示第??層神經(jīng)元的個(gè)數(shù),例如上圖中的例子,?就是一個(gè)三行兩列的矩陣。
6.2? 正向傳播
正向傳播就是將樣本輸入到神經(jīng)網(wǎng)絡(luò),從而獲得輸出值的過程,其中涉及到了兩個(gè)重要的公式:
利用這兩個(gè)式子,我們只需要通過權(quán)重矩陣和偏置值,就可以一路計(jì)算得到神經(jīng)網(wǎng)絡(luò)每一層的輸入??和輸出 ,并記錄下來。
6.3? 反向傳播
BP算法是一種更新權(quán)重的方法,我們知道每一層都有一個(gè)權(quán)重??,在BP算法中,我們通過梯度下降法來更新每層的權(quán)重:
其中,L為模型的損失函數(shù),它是關(guān)于最后一層輸出??的一個(gè)函數(shù),?是學(xué)習(xí)率。
該方法的關(guān)鍵在于如何求出損失函數(shù)關(guān)于神經(jīng)網(wǎng)絡(luò)某一隱層權(quán)重權(quán)值矩陣的偏導(dǎo)。
在正向傳播中我們可以很容易看出,神經(jīng)網(wǎng)絡(luò)最后一層的輸出??,其實(shí)是關(guān)于某個(gè)隱層輸入??的函數(shù),綜上我們可以得到損失函數(shù)L是關(guān)于某個(gè)隱層權(quán)重矩陣的函數(shù):
為此,通過鏈?zhǔn)椒▌t我們可以得到:
此時(shí),我們定義左邊這一項(xiàng)為誤差項(xiàng)?,則有:
其中,我們可以看到??是我們?cè)谡騻鞑ブ杏涗浵聛淼妮敵鲋?#xff0c;所以問題就轉(zhuǎn)化為我們?nèi)绾吻蟮妹恳粚拥恼`差項(xiàng) ?了。
在正向傳播 中,我們有兩個(gè)重要公式,通過他們結(jié)合鏈?zhǔn)椒▌t,我們可以將??進(jìn)一步拆解:
?
這個(gè)公式告訴我們,只要知道了??層的誤差項(xiàng)和權(quán)重矩陣,我們就可以求得??層的誤差項(xiàng)。實(shí)際應(yīng)用到BP算法中,步驟如下:
假設(shè)損失函數(shù)為MSE,最后一層的誤差項(xiàng)是可以直接根據(jù)損失函數(shù)?L 計(jì)算得到的:
6.4? 總結(jié)
我們只解決了給一組數(shù)據(jù)如何更新權(quán)重,它叫做標(biāo)準(zhǔn)誤差傳播算法。它對(duì)于每個(gè)訓(xùn)練樣本都會(huì)改變一次所有的權(quán)值。但是它的更新非常非常頻繁,而且容易受到干擾。我們希望誤差累積到一定程度以后再一次性更新,因此需要用累積誤差逆?zhèn)鞑ニ惴?/strong>。因此,我們每次更新應(yīng)該是要對(duì)n個(gè)訓(xùn)練集累積下來的誤差求平均,再用來更新權(quán)重矩陣。
綜上所述,BP算法的整體流程如下:
具體實(shí)際的例子,可以參考:https://www.jianshu.com/p/708e11654913
6.5? 相關(guān)面試題
Q:
A:
?
第七章??梯度消失和梯度爆炸
7.1? 產(chǎn)生原因
7.1.1? 梯度消失
以下圖的反向傳播為例,
假設(shè)每一層只有一個(gè)神經(jīng)元且對(duì)于每一層輸出:
其中σ為sigmoid函數(shù),xi為輸入值,zi為凈激活值。我們可以推導(dǎo)出:
而sigmoid的導(dǎo)數(shù)σ'(x)如下圖
從上圖我們可以看到,σ'(x)的最大值為0.25,而且我們初始化的權(quán)重絕對(duì)值通常都小于1。于是,當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)越多,在鏈?zhǔn)椒▌t中連乘激活函數(shù)的導(dǎo)數(shù)越多次,求導(dǎo)的結(jié)果就越小,因而會(huì)出現(xiàn)梯度消失的現(xiàn)象。
7.1.2? 梯度爆炸
若我們初始化的權(quán)重w很大,大到乘以激活函數(shù)的導(dǎo)數(shù)都大于1,即|σ'(z)w|>1,那么連乘后,可能會(huì)導(dǎo)致求導(dǎo)的結(jié)果很大,形成梯度爆炸。
7.2? 解決方案
梯度消失和梯度爆炸本質(zhì)上是一樣的,都是因?yàn)榫W(wǎng)絡(luò)層數(shù)太深而引發(fā)的梯度反向傳播中的連乘效應(yīng)。
7.2.1? 梯度消失解決方案
換用Relu等其他激活函數(shù);
采用BN,將輸入值的分布落入激活函數(shù)中對(duì)輸入比較敏感的區(qū)域(即梯度大的區(qū)域),從而避免梯度消失;
采用ResNet殘差結(jié)構(gòu);
采用LSTM結(jié)構(gòu);
7.2.2? 梯度爆炸解決方案
采用好的參數(shù)初始化方式,如He初始化;
預(yù)訓(xùn)練(pre-training)和微調(diào)(fine tuning):預(yù)訓(xùn)練就是把一個(gè)已經(jīng)訓(xùn)練好的模型參數(shù),應(yīng)用到另一個(gè)任務(wù)上作為初始參數(shù)的過程;微調(diào)就是指將預(yù)訓(xùn)練過的模型作用于自己的數(shù)據(jù)集,并使參數(shù)適應(yīng)自己數(shù)據(jù)集的過程;
梯度截?cái)?#xff1a;設(shè)值一個(gè)剪切閾值,如果更新梯度時(shí),梯度超過了這個(gè)閾值,那么就將其強(qiáng)制限制在這個(gè)范圍之內(nèi),以此防止梯度爆炸;
采用權(quán)重正則化:正則化主要是通過對(duì)網(wǎng)絡(luò)權(quán)重做正則來限制過擬合,但是根據(jù)正則項(xiàng)在損失函數(shù)中的形式可以看出,如果發(fā)生梯度爆炸,那么權(quán)值的范數(shù)(正則項(xiàng))就會(huì)變的非常大,反過來,通過限制正則化項(xiàng)的大小,也可以在一定程度上限制梯度爆炸的發(fā)生。
7.3? 相關(guān)面試題
Q:
A:
?
第八章? 范數(shù)正則化
監(jiān)督機(jī)器學(xué)習(xí)中訓(xùn)練模型時(shí),需要保證模型“簡(jiǎn)單”的基礎(chǔ)上最小化訓(xùn)練誤差,這樣得到的參數(shù)才具有好的泛化性能(也就是測(cè)試誤差也小),最小化誤差是為了讓我們的模型擬合訓(xùn)練數(shù)據(jù),而模型“簡(jiǎn)單”就是通過正則化來實(shí)現(xiàn)的,可以防止我們的模型過分?jǐn)M合訓(xùn)練數(shù)據(jù)。
8.1? 正則化概述
正則化的使用可以約束我們的模型的特性,能將人對(duì)這個(gè)模型的先驗(yàn)知識(shí)融入到模型的學(xué)習(xí)當(dāng)中,強(qiáng)行地讓學(xué)習(xí)到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。?一般來說,監(jiān)督學(xué)習(xí)可以看做最小化下面的目標(biāo)函數(shù):
正則化函數(shù) Ω(w) 有很多種選擇,一般是模型復(fù)雜度的單調(diào)遞增函數(shù),模型越復(fù)雜,正則項(xiàng)值就越大。不同的選擇對(duì)參數(shù) w 的約束不同,取得的效果也不同,我們?cè)谡撐闹谐R姷亩季奂?#xff1a;零范數(shù)、一范數(shù)、二范數(shù)、跡范數(shù)、Frobenius范數(shù)和核范數(shù)等等。
8.2??L0范數(shù)與L1范數(shù)
L0范數(shù)和L1范數(shù)可以實(shí)現(xiàn)參數(shù)的稀疏化,L1因具有比L0更好的優(yōu)化求解特性而被廣泛應(yīng)用。
- L0范數(shù)是指向量中非0的元素的個(gè)數(shù)。如果我們用L0范數(shù)來正則化一個(gè)參數(shù)矩陣W的話,就是希望W的大部分元素都是0,即是讓參數(shù)矩陣W是稀疏的。
- L1范數(shù)是指向量中各個(gè)元素絕對(duì)值之和,也叫“稀疏規(guī)則算子”(Lasso regularization)。
Q:為什么L1范數(shù)會(huì)使權(quán)值稀疏?
A:假設(shè)有如下帶L1正則項(xiàng)的損失函數(shù):
我們?cè)谑褂锰荻认陆捣ㄇ蠼鈪?shù)最優(yōu)解時(shí),就是不斷在參數(shù)空間中尋找最優(yōu)點(diǎn),如果我們?cè)谠紦p失函數(shù)? 后添加L1正則化項(xiàng),相當(dāng)于對(duì)? 做了一個(gè)約束,此時(shí)我們的任務(wù)變成在L1約束下尋找參數(shù)空間中的最優(yōu)點(diǎn),也就是說最優(yōu)點(diǎn)必須在??等值線與L1圖形首次相交的地方。而在參數(shù)空間中,兩者首次相交的地方往往都在權(quán)值參數(shù)的很多維度等于0的位置。
下面我們舉一個(gè)例子來直觀說明:我們考慮二維的情況,即只有兩個(gè)權(quán)值w1和w2 ,此時(shí)L1=∣w1∣+∣w2∣。我們將求解??的過程畫出等值線,同時(shí)將L1正則化的函數(shù)L1也在w1w2二維平面上畫出來。如下圖:
圖中彩色線是? 的等值線,黑色方形是L函數(shù)的圖形,在??等值線與L1圖形首次相交的地方就是模型的最優(yōu)解。我們可以看到,此時(shí)參數(shù)的值(w1,w2)=(0,w),也就是有一個(gè)維度等于0。那么我們推廣到高維空間中,可以直觀想象,因?yàn)長(zhǎng)1函數(shù)有很多『突出的角』(二維情況下四個(gè),多維情況下更多), 與這些角接觸的機(jī)率會(huì)遠(yuǎn)大于與L1其它部位接觸的機(jī)率,而在這些角上,權(quán)值參數(shù)的很多維度等于0,這就是為什么L1正則化可以產(chǎn)生稀疏模型,進(jìn)而可以用于特征選擇。
Q:為什么要稀疏?讓參數(shù)稀疏有什么好處呢?
A:
1)特征選擇(Feature Selection)
大家對(duì)稀疏規(guī)則化趨之若鶩的一個(gè)關(guān)鍵原因在于它能實(shí)現(xiàn)特征的自動(dòng)選擇。一般來說,?的大部分特征和最終的輸出 ?相關(guān)性很低,在最小化目標(biāo)函數(shù)的時(shí)候考慮? 這些額外的特征,雖然可以獲得更小的訓(xùn)練誤差,但在預(yù)測(cè)新的樣本時(shí),這些沒用的信息反而會(huì)被考慮,從而干擾了對(duì)正確 ?的預(yù)測(cè)。稀疏規(guī)則化算子的引入就是為了完成特征自動(dòng)選擇的任務(wù),它會(huì)通過學(xué)習(xí)去掉和輸出相關(guān)性低的特征(特征對(duì)應(yīng)的權(quán)重置0),保留相關(guān)性高的特征。
2)可解釋性(Interpretability)
另一個(gè)青睞于稀疏的理由是,由于我們只選擇出少量特征,模型就會(huì)變得“簡(jiǎn)單”,因此我們就能更容易的去分析、解釋一個(gè)模型。例如說患某種病的概率是y,我們收集到了1000中可能影響患病概率的因素,通過學(xué)習(xí)我們得到的權(quán)重矩陣W里只有很少的非零元素,假設(shè)只有5個(gè)非零的?,我們就有理由相信這些對(duì)應(yīng)的特征在患病分析上面提供的信息是巨大的,決策性的。也就是說,患不患這種病只和這5個(gè)因素有關(guān),那醫(yī)生就好分析多了。但如果1000個(gè)? 都非0,醫(yī)生面對(duì)這1000種因素,便難以分析患病的緣由。
8.3? L2范數(shù)
L2范數(shù)是向量各元素的平方和然后求平方根。
在損失函數(shù)中加入L2正則項(xiàng),訓(xùn)練時(shí)會(huì)有選擇的讓某些與模型輸出相關(guān)性低的特征權(quán)值變得很小,趨近于0。
Q:為什么w越小,模型越簡(jiǎn)單?
A:可以假設(shè)一個(gè)線性回歸方程,如果某個(gè)特征的參數(shù)很大,這個(gè)特征稍微變動(dòng)一點(diǎn)點(diǎn),就會(huì)對(duì)輸出造成很大影響;但如果參數(shù)足夠小,數(shù)據(jù)偏移得多一點(diǎn)也不會(huì)對(duì)結(jié)果造成什么影響,也就是說模型的『抗擾動(dòng)能力強(qiáng)』。
因此,擬合過程中通常都傾向于讓權(quán)值盡可能小,最后構(gòu)造一個(gè)所有參數(shù)都比較小的模型,一般認(rèn)為這樣參數(shù)值小的模型比較簡(jiǎn)單,能適應(yīng)不同的數(shù)據(jù)集,在一定程度上避免了過擬合現(xiàn)象。
8.4??正則化參數(shù)的選擇
1)L1正則化參數(shù)
通常越大的λ可以讓代價(jià)函數(shù)在參數(shù)為0時(shí)取到最小值。
2)L2正則化參數(shù)
λ越大,?衰減得越快。另一個(gè)理解可以參考下圖,λ越大,L2圓的半徑越小,最后求得代價(jià)函數(shù)最值時(shí)各參數(shù)也會(huì)變得很小。
8.5? 相關(guān)面試題
Q:
A:
?
第九章??Batch Normalization
9.1? 使用BN的原因
首先我們來回顧一下MBGD的過程:假設(shè)訓(xùn)練數(shù)據(jù)集合T包含 N 個(gè)樣本,而每個(gè)Mini-Batch的Batch Size為 b ,于是整個(gè)訓(xùn)練數(shù)據(jù)可被分成 N/b 個(gè)Mini-Batch。在模型通過SGD進(jìn)行訓(xùn)練時(shí),一般跑完一個(gè)Mini-Batch的實(shí)例,叫做完成訓(xùn)練的一步(step),跑完N/b步則整個(gè)訓(xùn)練數(shù)據(jù)完成一輪訓(xùn)練,則稱為完成一個(gè)Epoch。完成一個(gè)Epoch訓(xùn)練過程后,對(duì)訓(xùn)練數(shù)據(jù)做隨機(jī)Shuffle打亂訓(xùn)練數(shù)據(jù)順序,重復(fù)上述步驟,然后開始下一個(gè)Epoch的訓(xùn)練,對(duì)模型完整充分的訓(xùn)練由多輪Epoch構(gòu)成。
由上述過程可以看出,對(duì)于Mini-Batch SGD訓(xùn)練方法來說,Mini-Batch內(nèi)的每個(gè)實(shí)例需要走一遍當(dāng)前的網(wǎng)絡(luò),產(chǎn)生當(dāng)前參數(shù)下神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)值,并根據(jù)預(yù)測(cè)值計(jì)算損失,然后反向傳播更新權(quán)重參數(shù)。這種時(shí)候,通常會(huì)出現(xiàn)一個(gè)叫Covariance Shift的問題:
- 在輸入層上,如果一批樣本的分布與另一批樣本的分布顯著不同:[0,1] vs [10,100],對(duì)于一個(gè)淺層模型而言,訓(xùn)練第一批樣本時(shí),模型可能在描繪函數(shù)A,訓(xùn)練第二批樣本時(shí),模型發(fā)現(xiàn)自己在描繪函數(shù)B,完全不同于A。這樣就是推翻自己重復(fù)勞動(dòng),訓(xùn)練低效。
- 輸入層的這種情況,對(duì)于其他層而言,也是一樣無法逃避。對(duì)于中間某個(gè)隱層的某些神經(jīng)元,它們的輸出值可能會(huì)遠(yuǎn)大于同層其他神經(jīng)元,導(dǎo)致這些神經(jīng)元的分布與其他神經(jīng)元大幅偏離,就會(huì)出現(xiàn)本層的Covariance Shift的問題,這樣子訓(xùn)練就會(huì)很低效。
總結(jié):對(duì)于神經(jīng)網(wǎng)絡(luò)某一層的某些神經(jīng)元,如果它們的激活值分布與同層其他神經(jīng)元大幅偏離,就會(huì)出現(xiàn)Covariance Shift的問題,導(dǎo)致訓(xùn)練效率低下,而解決方案就是統(tǒng)一每一層激活值的分布。
9.2? 什么是BN
規(guī)范化(Normalization)是一種對(duì)數(shù)值的特殊函數(shù)變換方法,也就是會(huì)在原始數(shù)值x外套一層起規(guī)范化作用的函數(shù),轉(zhuǎn)換后的數(shù)值滿足一定的分布特性,即:
因?yàn)樯窠?jīng)網(wǎng)絡(luò)里主要有兩類實(shí)體:神經(jīng)元或者連接神經(jīng)元的帶權(quán)邊,所以深度學(xué)習(xí)中的Normalization可以分為兩大類:
- 對(duì)神經(jīng)元激活值/凈激活值進(jìn)行Normalization操作,如BatchNorm/LayerNorm/InstanceNorm/GroupNorm等;
- 對(duì)神經(jīng)元帶權(quán)邊進(jìn)行Normalization操作,如Weight Norm等;
不論哪種Normalization方法,其規(guī)范化目標(biāo)都是一樣的,就是將其激活值規(guī)整為均值為0,方差為1的正態(tài)分布。具體到Batch Normalization,它的整個(gè)規(guī)范化過程可以分為兩步:
1)將激活值規(guī)范到均值為0,方差為1的正態(tài)分布范圍內(nèi)。
其中,?為某個(gè)神經(jīng)元原始激活值,?為規(guī)范后的值,μ是神經(jīng)元集合S中包含的m個(gè)神經(jīng)元激活值的均值,即:
?為根據(jù)均值和集合S中神經(jīng)元各自激活值求出的激活值標(biāo)準(zhǔn)差:
其中,?ε是為了增加訓(xùn)練穩(wěn)定性而加入的小的常量數(shù)據(jù)。
2)經(jīng)過第一步的Normalization操作后,會(huì)導(dǎo)致新的分布喪失從前層傳遞過來的信息,且無法有效利用激活函數(shù)的非線性功能;因此,第二步中加入了縮放因子 γ 和平移因子 β,每個(gè)神經(jīng)元在訓(xùn)練過程中會(huì)自動(dòng)學(xué)習(xí)這兩個(gè)調(diào)節(jié)因子,以自行決定是否需要對(duì)新分布做一定程度的縮放和平移(如果讓?duì)?#61;σ、β=μ,則其可以取消Normalization)。
這一步的核心思想就是讓神經(jīng)網(wǎng)絡(luò)自己學(xué)習(xí)找到一個(gè)比較好平衡點(diǎn),既能享受非線性較強(qiáng)的表達(dá)能力,又避免激活值的分布出現(xiàn)Covariance Shift,導(dǎo)致網(wǎng)絡(luò)收斂速度太慢。
BN的效果:
BN的缺點(diǎn):
9.3? BN具體是怎么做的
目前各類Normalizaiton方法大同小異,最主要的區(qū)別在于神經(jīng)元集合S的范圍怎么定,不同的方法采用了不同的神經(jīng)元集合定義方法(用于計(jì)算均值和方差)。
9.3.1? MLP中的BN
假設(shè)在訓(xùn)練時(shí)某個(gè)batch包含n個(gè)樣本,對(duì)于前向神經(jīng)網(wǎng)絡(luò)來說,這n個(gè)樣本分別通過同一個(gè)神經(jīng)元k的時(shí)候會(huì)產(chǎn)生n個(gè)激活值,使用BN時(shí)就是對(duì)這n個(gè)同一個(gè)神經(jīng)元被不同樣本激發(fā)的激活值進(jìn)行規(guī)范化。
9.3.2? CNN中的BN
對(duì)于CNN中某個(gè)卷積層對(duì)應(yīng)輸出特征圖的第k個(gè)通道來說,假設(shè)某個(gè)Batch包含n個(gè)樣本,那么每個(gè)樣本在這個(gè)通道k都會(huì)產(chǎn)生一個(gè)二維激活平面,也就是說Batch中n個(gè)樣本分別通過同一個(gè)卷積核的輸出通道k的時(shí)候產(chǎn)生了n個(gè)激活平面。假設(shè)激活平面為?,那么n個(gè)樣本總共包含??個(gè)激活值,使用BN就是對(duì)這??個(gè)激活值進(jìn)行規(guī)范化。
?
9.4? 其他Normalization方法
BN要求計(jì)算統(tǒng)計(jì)量的時(shí)候必須在同一個(gè)Mini-Batch內(nèi)的實(shí)例之間進(jìn)行統(tǒng)計(jì),因此形成了Batch內(nèi)實(shí)例之間的相互依賴和影響的關(guān)系。如何從根本上解決這些問題?一個(gè)自然的想法是:把對(duì)Batch的依賴去掉,轉(zhuǎn)換統(tǒng)計(jì)集合范圍。在統(tǒng)計(jì)均值方差的時(shí)候,不依賴Batch內(nèi)數(shù)據(jù),只用當(dāng)前處理的單個(gè)訓(xùn)練數(shù)據(jù)來獲得均值方差的統(tǒng)計(jì)量,這樣因?yàn)椴辉僖蕾嘊atch內(nèi)其它訓(xùn)練數(shù)據(jù),那么就不存在因?yàn)锽atch約束導(dǎo)致的問題。在BN后的幾乎所有改進(jìn)模型都是在這個(gè)指導(dǎo)思想下進(jìn)行的。
9.4.1??Layer Normalization
為了能夠在只有當(dāng)前一個(gè)訓(xùn)練實(shí)例的情形下,也能找到一個(gè)合理的統(tǒng)計(jì)范圍,一個(gè)最直接的想法是:MLP的同一隱層自己包含了若干神經(jīng)元;同理,CNN中同一個(gè)卷積層包含k個(gè)輸出通道,每個(gè)通道包含m*n個(gè)神經(jīng)元,整個(gè)通道包含了k*m*n個(gè)神經(jīng)元;類似的,RNN的每個(gè)時(shí)間步的隱層也包含了若干神經(jīng)元。那么我們完全可以直接用同層隱層神經(jīng)元的響應(yīng)值作為集合S的范圍來求均值和方差,這就是Layer Normalization的基本思想。下圖分示了MLP、CNN和RNN的Layer Normalization的集合S計(jì)算范圍,因?yàn)楹苤庇^,所以這里不展開詳述。
但Layer Normalization目前看好像也只適合應(yīng)用在RNN場(chǎng)景下,在CNN等環(huán)境下效果是不如BatchNorm或者GroupNorm等模型的。
9.4.2??Instance Normalization
一個(gè)樣本在經(jīng)過某個(gè)卷積層后得到了??的輸出特征圖,Instance Normalization就是對(duì)其中的每個(gè)通道k上??個(gè)激活值都單獨(dú)進(jìn)行規(guī)范化。也正是因此,這種方法只能在CNN中使用。
Instance Normalization對(duì)于一些圖片生成類的任務(wù)比如圖片風(fēng)格轉(zhuǎn)換來說效果是明顯優(yōu)于BN的,但在很多其它圖像類任務(wù)比如分類等場(chǎng)景效果不如BN。
9.4.3??Group Normalization
從上面的Layer Normalization和Instance Normalization可以看出,這是兩種極端情況,Layer Normalization是將同層所有神經(jīng)元作為統(tǒng)計(jì)范圍,而Instance Normalization則是CNN中將同一卷積層中每個(gè)卷積核對(duì)應(yīng)的輸出通道單獨(dú)作為自己的統(tǒng)計(jì)范圍。那么,有沒有介于兩者之間的統(tǒng)計(jì)范圍呢?
通道分組是CNN常用的模型優(yōu)化技巧,所以自然而然會(huì)想到對(duì)CNN中某一層卷積層的輸出或者輸入通道進(jìn)行分組,在分組范圍內(nèi)進(jìn)行統(tǒng)計(jì),這就是Group Normalization的核心思想。
Group Normalization在要求Batch Size比較小的場(chǎng)景下或者物體檢測(cè)/視頻分類等應(yīng)用場(chǎng)景下效果是優(yōu)于BN的。
9.5? 相關(guān)面試題
Q:
A:
?
第十章? Dropout
10.1??Dropout簡(jiǎn)介
dropout是指在深度學(xué)習(xí)網(wǎng)絡(luò)的訓(xùn)練過程中,對(duì)于神經(jīng)網(wǎng)絡(luò)單元,按照一定的概率將其暫時(shí)從網(wǎng)絡(luò)中丟棄。因此每一次都是在訓(xùn)練一個(gè)不同的網(wǎng)絡(luò),消除減弱了神經(jīng)元節(jié)點(diǎn)間的聯(lián)合適應(yīng)性,增強(qiáng)了泛化能力,所以對(duì)過擬合有抑制作用。
10.2? 模型變化
為了達(dá)到ensemble的特性,有了dropout后,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和預(yù)測(cè)就會(huì)發(fā)生一些變化。
10.2.1? 訓(xùn)練層面
無可避免的,訓(xùn)練網(wǎng)絡(luò)的每個(gè)單元要添加一道概率流程。
對(duì)應(yīng)的公式變化如下如下:
- 沒有dropout的神經(jīng)網(wǎng)絡(luò)
- 有dropout的神經(jīng)網(wǎng)絡(luò)
10.2.2??預(yù)測(cè)層面
預(yù)測(cè)的時(shí)候,不需要舍棄神經(jīng)元。
其他Drop技術(shù):
Dropout:完全隨機(jī)扔
SpatialDropout:按channel隨機(jī)扔
Stochastic Depth:按res block隨機(jī)扔
DropBlock:每個(gè)feature map上按spatial塊(n*n的方塊)隨機(jī)扔
Cutout:在訓(xùn)練時(shí)把輸入圖像按spatial塊隨機(jī)扔
DropConnect:將與神經(jīng)元相連的輸入權(quán)值以一定概率置0
10.3? 相關(guān)面試題
Q:
A:
?
第十一章? 注意力機(jī)制
概念:注意力機(jī)制是用來模擬人類對(duì)環(huán)境的生理感知機(jī)制而提出的,它是一種方法論,沒有嚴(yán)格的數(shù)學(xué)定義。比如,傳統(tǒng)的局部圖像特征提取、顯著性檢測(cè)、滑動(dòng)窗口方法等都可以看作一種注意力機(jī)制。在神經(jīng)網(wǎng)絡(luò)中,注意力機(jī)制通常就是一個(gè)額外的神經(jīng)網(wǎng)絡(luò)模塊,能夠硬性選擇輸入的某些部分,或者柔性地給輸入的不同部分分配不通的權(quán)值。
作用:
11.1? 注意力機(jī)制分類
注意力機(jī)制可以分為四類:
- 基于輸入項(xiàng)的柔性注意力(Item-wise Soft Attention)
- 基于輸入項(xiàng)的硬性注意力(Item-wise Hard Attention)
- 基于位置的柔性注意力(Location-wise Soft Attention)
- 基于位置的硬性注意力(Location-wise Hard Attention)
11.1.1? 基于項(xiàng)的注意力機(jī)制
1)輸入
對(duì)于基于項(xiàng)的注意力和基于位置的注意力,它們的輸入形式是不同的。
- 基于項(xiàng)的注意力的輸入需要是包含明確項(xiàng)的序列,或者需要額外的預(yù)處理步驟來生成包含明確項(xiàng)的序列(項(xiàng)可以是一個(gè)向量、矩陣,甚至一個(gè)特征圖);
- 基于位置的注意力則是針對(duì)輸入為一個(gè)單獨(dú)的特征圖設(shè)計(jì)的,所有的目標(biāo)可以通過位置指定。
2)輸出
基于項(xiàng)的注意力在項(xiàng)的層面操作。原始輸入經(jīng)過神經(jīng)網(wǎng)絡(luò)處理后(如RNN或CNN),形成了一個(gè)每一項(xiàng)具有一個(gè)單獨(dú)編碼的序列。
- 基于項(xiàng)的柔性注意力為每一項(xiàng)計(jì)算一個(gè)權(quán)重,然后對(duì)所有項(xiàng)進(jìn)行線性加權(quán)合并。合并后的編碼就是注意力機(jī)制操作后的特征,用于做預(yù)測(cè);
- 基于項(xiàng)的硬性注意力的不同在于它會(huì)做出硬性的選擇,而不是線性加權(quán)。具體就是根據(jù)注意力的權(quán)重隨機(jī)地選取若干(通常是一個(gè))編碼作為最終的特征。
11.1.2? 基于位置的注意力機(jī)制
基于位置的注意力直接在一個(gè)單獨(dú)的特征圖上進(jìn)行操作。
- 基于位置的硬性注意力從輸入的特征圖中離散地選取一個(gè)子區(qū)域,作為最終的特征,選取的位置是由注意力模塊計(jì)算出來的;
- 基于位置的柔性注意力則對(duì)整個(gè)特征圖做一個(gè)變換,使得感興趣的部分能夠突出出來(加權(quán))。
11.2? 注意力模塊
注意力機(jī)制通常由一個(gè)連接在原神經(jīng)網(wǎng)絡(luò)之后的額外的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),整個(gè)模型仍然是端對(duì)端的,因此注意力模塊能夠和原模型一起同步訓(xùn)練。對(duì)于柔性注意力,注意力模塊對(duì)其輸入是可微的,所以整個(gè)模型仍可用梯度方法來優(yōu)化。而硬性注意力機(jī)制要做出硬性的決定,離散地選擇其輸入的一部分,這樣整個(gè)系統(tǒng)對(duì)于輸入不再是可微的。所以強(qiáng)化學(xué)習(xí)中的一些技術(shù)被用來優(yōu)化包含硬性注意力的模型(強(qiáng)化學(xué)習(xí)的機(jī)制是通過收益函數(shù)來激勵(lì))。
下面我們通過幾個(gè)例子直觀了解注意力模塊在神經(jīng)網(wǎng)絡(luò)中的應(yīng)用:
1)Squeeze-and-Excitation Networks
SENet中提出顯示的建模特征通道之間的相互依賴關(guān)系,這其實(shí)就是通道維度的一種注意力機(jī)制,體來說,就是通過學(xué)習(xí)的方式來自動(dòng)獲取到每個(gè)特征通道的重要程度,然后依照這個(gè)重要程度去提升有用的特征并抑制對(duì)當(dāng)前任務(wù)用處不大的特征。
通過上圖我們可以看到,SENet就是將某一層特征圖作一次Squeeze操作,通過對(duì)各個(gè)通道進(jìn)行全局平均池化,將一個(gè)channel上整個(gè)空間的特征編碼為一個(gè)全局特征;隨后為了抓取各個(gè)通道之間的關(guān)系,采用兩個(gè)全連接層進(jìn)行非線性關(guān)系學(xué)習(xí),其中,第一個(gè)全連接層用來降維,第二個(gè)全連接層恢復(fù)維度,并采用Sigmoid將輸出的Channel Attention Featuremap的值限定在0-1之間,作為各個(gè)通道的注意力權(quán)重;最后,通過將權(quán)重和原始特征圖的各個(gè)通道進(jìn)行相乘,獲得包含了通道重要性信息的新特征圖。
2)CBAM: Convolutional Block Attention Module?
CBAM是一種結(jié)合了空間(spatial)和通道(channel)的注意力機(jī)制模塊,相比于senet只關(guān)注通道的注意力機(jī)制可以取得更好的效果。其具體模塊示意圖如下:
其中主要包括兩個(gè)模塊:Channel Attention Module 和?Spatial Attention Module,下面分別來介紹一下。
Channel Attention Module
CAM其實(shí)和SENet中的通道注意力模塊類似,CBAM將輸入的featuremap,分別經(jīng)過基于特征平面的global max pooling 和global average pooling;然后分別連接MLP,將MLP輸出的兩個(gè)對(duì)應(yīng)特征進(jìn)行elementwise加和操作,再經(jīng)過sigmoid激活操作,生成最終的channel attention featuremap;最后,將該channel attention featuremap和input featuremap做elementwise乘法操作,生成Spatial attention模塊需要的輸入特征圖。
Spatial Attention Module
將Channel Attention Module 輸出的特征圖作為本模塊的輸入特征圖。首先做一個(gè)基于通道的global max pooling 和global average pooling,然后將這2個(gè)結(jié)果基于 channel 做concat操作;隨后經(jīng)過一個(gè)卷積操作,降維為單個(gè)channel,再經(jīng)過sigmoid生成激活值在0-1之間的Spatial Attention Feature;最后將該feature和該模塊的輸入feature做乘法,得到最終生成的特征。
11.3? 相關(guān)面試題
Q:
A:
?
參考:
https://www.zhihu.com/question/53405779
https://zhuanlan.zhihu.com/p/61880018
https://www.jianshu.com/p/ac46cb7e6f87
https://zhuanlan.zhihu.com/p/28749411
https://zhuanlan.zhihu.com/p/28492837
https://zhuanlan.zhihu.com/p/22142013
https://blog.csdn.net/u014380165/article/details/76946358
https://blog.csdn.net/qq_14845119/article/details/80787753?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
https://blog.csdn.net/u010099080/article/details/78177781
https://www.cnblogs.com/tianqizhi/p/9713951.html
https://zhuanlan.zhihu.com/p/45190898
https://blog.csdn.net/zouxy09/article/details/24971995
https://blog.csdn.net/jinping_shi/article/details/52433975
https://zhuanlan.zhihu.com/p/43200897
https://blog.csdn.net/stdcoutzyx/article/details/49022443
https://www.zhihu.com/question/32673260/answer/71137399
https://www.zhihu.com/question/61607442/answer/440401209
https://zhuanlan.zhihu.com/p/56501461
總結(jié)
以上是生活随笔為你收集整理的深度学习简明教程系列 —— 基础知识(合集)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器视觉学习笔记】OpenCV C++
- 下一篇: 100天搞定机器学习|Day35 深度学