16.批量歸一化和殘差網(wǎng)絡(luò)
批量歸一化(BatchNormalization)
BN是由Google于2015年提出,這是一個深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的技巧,它不僅可以加快了模型的收斂速度,而且更重要的是在一定程度緩解了深層網(wǎng)絡(luò)中“梯度彌散”的問題,從而使得訓(xùn)練深層網(wǎng)絡(luò)模型更加容易和穩(wěn)定。所以目前BN已經(jīng)成為幾乎所有卷積神經(jīng)網(wǎng)絡(luò)的標(biāo)配技巧了,即對每一批數(shù)據(jù)進行歸一化。
批量歸一化屬于深度模型,主要利用小批量上的均值和標(biāo)準(zhǔn)差,不斷調(diào)整神經(jīng)網(wǎng)絡(luò)中間輸出,從而使整個神經(jīng)網(wǎng)絡(luò)在各層的中間輸出的數(shù)值更穩(wěn)定。
對輸入的標(biāo)準(zhǔn)化(淺層模型)
處理后的任意一個特征在數(shù)據(jù)集中所有樣本上的均值為0、標(biāo)準(zhǔn)差為1;標(biāo)準(zhǔn)化處理輸入數(shù)據(jù)使各個特征的分布相近
1.對全連接層做批量歸一化
位置:全連接層中的仿射變換和激活函數(shù)之間。

2.對卷積層做批量歸?化
位置:卷積計算之后、應(yīng)?激活函數(shù)之前。
如果卷積計算輸出多個通道,我們需要對這些通道的輸出分別做批量歸一化,且每個通道都擁有獨立的拉伸和偏移參數(shù)。 計算:對單通道,batchsize=m,卷積計算輸出=pxq 對該通道中m×p×q個元素同時做批量歸一化,使用相同的均值和方差。
3.預(yù)測時的批量歸?化
訓(xùn)練:以batch為單位,對每個batch計算均值和方差。
預(yù)測:用移動平均估算整個訓(xùn)練數(shù)據(jù)集的樣本均值和方差。
殘差網(wǎng)絡(luò)(ResNet)
深度CNN網(wǎng)絡(luò)達到一定深度后再一味地增加層數(shù)并不能帶來進一步地分類性能提高,反而會招致網(wǎng)絡(luò)收斂變得更慢,準(zhǔn)確率也變得更差。
殘差塊(Residual Block)
恒等映射:左邊:f(x)=x? ? ? 右邊:f(x)-x=0 (易于捕捉恒等映射的細(xì)微波動)
在殘差塊中,輸?可通過跨層的數(shù)據(jù)線路更快 地向前傳播。
稠密連接網(wǎng)絡(luò)(DenseNet)
主要構(gòu)建模塊:
稠密塊(dense block): 定義了輸入和輸出是如何連結(jié)的。
過渡層(transition layer):用來控制通道數(shù),使之不過大。
稠密塊
17.凸優(yōu)化
優(yōu)化與深度學(xué)習(xí)
優(yōu)化與估計
盡管優(yōu)化方法可以最小化深度學(xué)習(xí)中的損失函數(shù)值,但本質(zhì)上優(yōu)化方法達到的目標(biāo)與深度學(xué)習(xí)的目標(biāo)并不相同。
優(yōu)化方法目標(biāo):訓(xùn)練集損失函數(shù)值
深度學(xué)習(xí)目標(biāo):測試集損失函數(shù)值(泛化性)
優(yōu)化在深度學(xué)習(xí)中的挑戰(zhàn)?
局部最小值;鞍點(黑塞矩陣為零);梯度消失
凸性 (Convexity)
凸函數(shù):設(shè)S是En中的非空凸集,f(x)是定義在S上的實函數(shù),如果對于每一對x1,x2?S及每一個a,0≤a≤1,都有:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? f(ax1+(1-a)x2)≤a f(x1)+(1-a)f(x2)
則稱函數(shù)f(x)為S上的凸函數(shù).上式中,若≤變?yōu)?lt;,則稱為嚴(yán)格凸函數(shù)。若-f(x)為S的凸函數(shù),則稱f(x)為S上的凹函數(shù).
Jensen 不等式

性質(zhì):
1.無局部極小值
2.與凸集的關(guān)系:凸函數(shù)滿足條件的點構(gòu)成的集合是凸集
3.二階條件:二階導(dǎo)數(shù)大于等于零等價于函數(shù)是凸函數(shù)
18.梯度下降
一維梯度下降

多維梯度下降

自適應(yīng)方法
牛頓法

收斂性分析

預(yù)處理 (Heissan陣輔助梯度下降)

梯度下降與線性搜索(共軛梯度法)?
隨機梯度下降
參數(shù)更新

動態(tài)學(xué)習(xí)率

19.目標(biāo)檢測基礎(chǔ)?
目標(biāo)檢測和邊界框

錨框
目標(biāo)檢測算法通常會在輸入圖像中采樣大量的區(qū)域,然后判斷這些區(qū)域中是否包含我們感興趣的目標(biāo),并調(diào)整區(qū)域邊緣從而更準(zhǔn)確地預(yù)測目標(biāo)的真實邊界框(ground-truth bounding box)。不同的模型使用的區(qū)域采樣方法可能不同。這里我們介紹其中的一種方法:它以每個像素為中心生成多個大小和寬高比(aspect ratio)不同的邊界框。這些邊界框被稱為錨框(anchor box)。我們將在后面基于錨框?qū)嵺`目標(biāo)檢測。
生成多個錨框

交并比
我們剛剛提到某個錨框較好地覆蓋了圖像中的狗。如果該目標(biāo)的真實邊界框已知,這里的“較好”該如何量化呢?一種直觀的方法是衡量錨框和真實邊界框之間的相似度。我們知道,Jaccard系數(shù)(Jaccard index)可以衡量兩個集合的相似度。給定集合A和B,它們的Jaccard系數(shù)即二者交集大小除以二者并集大?。?/p>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
實際上,我們可以把邊界框內(nèi)的像素區(qū)域看成是像素的集合。如此一來,我們可以用兩個邊界框的像素集合的Jaccard系數(shù)衡量這兩個邊界框的相似度。當(dāng)衡量兩個邊界框的相似度時,我們通常將Jaccard系數(shù)稱為交并比(Intersection over Union,IoU),即兩個邊界框相交面積與相并面積之比,如圖所示。交并比的取值范圍在0和1之間:0表示兩個邊界框無重合像素,1表示兩個邊界框相等。
9.4.3 標(biāo)注訓(xùn)練集的錨框
在訓(xùn)練集中,我們將每個錨框視為一個訓(xùn)練樣本。為了訓(xùn)練目標(biāo)檢測模型,我們需要為每個錨框標(biāo)注兩類標(biāo)簽:一是錨框所含目標(biāo)的類別,簡稱類別;二是真實邊界框相對錨框的偏移量,簡稱偏移量(offset)。在目標(biāo)檢測時,我們首先生成多個錨框,然后為每個錨框預(yù)測類別以及偏移量,接著根據(jù)預(yù)測的偏移量調(diào)整錨框位置從而得到預(yù)測邊界框,最后篩選需要輸出的預(yù)測邊界框。
我們知道,在目標(biāo)檢測的訓(xùn)練集中,每個圖像已標(biāo)注了真實邊界框的位置以及所含目標(biāo)的類別。在生成錨框之后,我們主要依據(jù)與錨框相似的真實邊界框的位置和類別信息為錨框標(biāo)注。那么,該如何為錨框分配與其相似的真實邊界框呢?



輸出預(yù)測邊界框
在模型預(yù)測階段,我們先為圖像生成多個錨框,并為這些錨框一一預(yù)測類別和偏移量。隨后,我們根據(jù)錨框及其預(yù)測偏移量得到預(yù)測邊界框。當(dāng)錨框數(shù)量較多時,同一個目標(biāo)上可能會輸出較多相似的預(yù)測邊界框。為了使結(jié)果更加簡潔,我們可以移除相似的預(yù)測邊界框。常用的方法叫作非極大值抑制(non-maximum suppression,NMS)。
我們來描述一下非極大值抑制的工作原理。對于一個預(yù)測邊界框B,模型會計算各個類別的預(yù)測概率。設(shè)其中最大的預(yù)測概率為p,該概率所對應(yīng)的類別即B的預(yù)測類別。我們也將p稱為預(yù)測邊界框B的置信度。在同一圖像上,我們將預(yù)測類別非背景的預(yù)測邊界框按置信度從高到低排序,得到列表L。從L中選取置信度最高的預(yù)測邊界框B1作為基準(zhǔn),將所有與B1的交并比大于某閾值的非基準(zhǔn)預(yù)測邊界框從L中移除。這里的閾值是預(yù)先設(shè)定的超參數(shù)。此時,L保留了置信度最高的預(yù)測邊界框并移除了與其相似的其他預(yù)測邊界框。 接下來,從L中選取置信度第二高的預(yù)測邊界框B2作為基準(zhǔn),將所有與B2的交并比大于某閾值的非基準(zhǔn)預(yù)測邊界框從L中移除。重復(fù)這一過程,直到L中所有的預(yù)測邊界框都曾作為基準(zhǔn)。此時L中任意一對預(yù)測邊界框的交并比都小于閾值。最終,輸出列表L中的所有預(yù)測邊界框。
小結(jié)
1.以每個像素為中心,生成多個大小和寬高比不同的錨框。
2.交并比是兩個邊界框相交面積與相并面積之比。
3.在訓(xùn)練集中,為每個錨框標(biāo)注兩類標(biāo)簽:一是錨框所含目標(biāo)的類別;二是真實邊界框相對錨框的偏移量。
4.預(yù)測時,可以使用非極大值抑制來移除相似的預(yù)測邊界框,從而令結(jié)果簡潔。
多尺度目標(biāo)檢測
在錨框那節(jié)中,我們在實驗中以輸入圖像的每個像素為中心生成多個錨框。這些錨框是對輸入圖像不同區(qū)域的采樣。然而,如果以圖像每個像素為中心都生成錨框,很容易生成過多錨框而造成計算量過大。舉個例子,假設(shè)輸入圖像的高和寬分別為561像素和728像素,如果以每個像素為中心生成5個不同形狀的錨框,那么一張圖像上則需要標(biāo)注并預(yù)測200多萬個錨框(561×728×5)。
減少錨框個數(shù)并不難。一種簡單的方法是在輸入圖像中均勻采樣一小部分像素,并以采樣的像素為中心生成錨框。此外,在不同尺度下,我們可以生成不同數(shù)量和不同大小的錨框。值得注意的是,較小目標(biāo)比較大目標(biāo)在圖像上出現(xiàn)位置的可能性更多。舉個簡單的例子:形狀為1×1、1×2和2×2的目標(biāo)在形狀為2×2的圖像上可能出現(xiàn)的位置分別有4、2和1種。因此,當(dāng)使用較小錨框來檢測較小目標(biāo)時,我們可以采樣較多的區(qū)域;而當(dāng)使用較大錨框來檢測較大目標(biāo)時,我們可以采樣較少的區(qū)域。
為了演示如何多尺度生成錨框,我們先讀取一張圖像。它的高和寬分別為561像素和728像素。
20.圖像風(fēng)格遷移
樣式遷移
在本節(jié)中,我們將介紹如何使用卷積神經(jīng)網(wǎng)絡(luò)自動將某圖像中的樣式應(yīng)用在另一圖像之上,即樣式遷移(style transfer)。這里我們需要兩張輸入圖像,一張是內(nèi)容圖像,另一張是樣式圖像,我們將使用神經(jīng)網(wǎng)絡(luò)修改內(nèi)容圖像使其在樣式上接近樣式圖像。下圖中的內(nèi)容圖像為本書作者在西雅圖郊區(qū)的雷尼爾山國家公園(Mount Rainier National Park)拍攝的風(fēng)景照,而樣式圖像則是一副主題為秋天橡樹的油畫。最終輸出的合成圖像在保留了內(nèi)容圖像中物體主體形狀的情況下應(yīng)用了樣式圖像的油畫筆觸,同時也讓整體顏色更加鮮艷。

方法
下圖用一個例子來闡述基于卷積神經(jīng)網(wǎng)絡(luò)的樣式遷移方法。首先,我們初始化合成圖像,例如將其初始化成內(nèi)容圖像。該合成圖像是樣式遷移過程中唯一需要更新的變量,即樣式遷移所需迭代的模型參數(shù)。然后,我們選擇一個預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)來抽取圖像的特征,其中的模型參數(shù)在訓(xùn)練中無須更新。深度卷積神經(jīng)網(wǎng)絡(luò)憑借多個層逐級抽取圖像的特征。我們可以選擇其中某些層的輸出作為內(nèi)容特征或樣式特征。以下圖為例,這里選取的預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)含有3個卷積層,其中第二層輸出圖像的內(nèi)容特征,而第一層和第三層的輸出被作為圖像的樣式特征。接下來,我們通過正向傳播(實線箭頭方向)計算樣式遷移的損失函數(shù),并通過反向傳播(虛線箭頭方向)迭代模型參數(shù),即不斷更新合成圖像。樣式遷移常用的損失函數(shù)由3部分組成:內(nèi)容損失(content loss)使合成圖像與內(nèi)容圖像在內(nèi)容特征上接近,樣式損失(style loss)令合成圖像與樣式圖像在樣式特征上接近,而總變差損失(total variation loss)則有助于減少合成圖像中的噪點。最后,當(dāng)模型訓(xùn)練結(jié)束時,我們輸出樣式遷移的模型參數(shù),即得到最終的合成圖像。

定義損失函數(shù)
內(nèi)容損失:與線性回歸中的損失函數(shù)類似,內(nèi)容損失通過平方誤差函數(shù)衡量合成圖像與內(nèi)容圖像在內(nèi)容特征上的差異。平方誤差函數(shù)的兩個輸入均為extract_features函數(shù)計算所得到的內(nèi)容層的輸出。
樣式損失:

總變差損失:

樣式遷移的損失函數(shù)即內(nèi)容損失、樣式損失和總變差損失的加權(quán)和。通過調(diào)節(jié)這些權(quán)值超參數(shù),我們可以權(quán)衡合成圖像在保留內(nèi)容、遷移樣式以及降噪三方面的相對重要性。
小結(jié)
1.樣式遷移常用的損失函數(shù)由3部分組成:內(nèi)容損失使合成圖像與內(nèi)容圖像在內(nèi)容特征上接近,樣式損失令合成圖像與樣式圖像在樣式特征上接近,而總變差損失則有助于減少合成圖像中的噪點。
2.可以通過預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)來抽取圖像的特征,并通過最小化損失函數(shù)來不斷更新合成圖像。
3.用格拉姆矩陣表達樣式層輸出的樣式。
21.?圖像分類案例1
Kaggle上的圖像分類(CIFAR-10)
CIFAR-10 - Object Recognition in Images | Kaggle
定義模型
ResNet-18網(wǎng)絡(luò)結(jié)構(gòu):ResNet全名Residual Network殘差網(wǎng)絡(luò)。Kaiming He 的《Deep Residual Learning for Image Recognition》獲得了CVPR最佳論文。他提出的深度殘差網(wǎng)絡(luò)在2015年可以說是洗刷了圖像方面的各大比賽,以絕對優(yōu)勢取得了多個比賽的冠軍。而且它在保證網(wǎng)絡(luò)精度的前提下,將網(wǎng)絡(luò)的深度達到了152層,后來又進一步加到1000的深度。
22.圖像分類案例2
Kaggle上的狗品種識別(ImageNet Dogs)
?Dog Breed Identification | Kaggle
在這項比賽中,我們嘗試確定120種不同的狗。該比賽中使用的數(shù)據(jù)集實際上是著名的ImageNet數(shù)據(jù)集的子集。
定義模型
這個比賽的數(shù)據(jù)屬于ImageNet數(shù)據(jù)集的子集,我們使用微調(diào)的方法,選用在ImageNet完整數(shù)據(jù)集上預(yù)訓(xùn)練的模型來抽取圖像特征,以作為自定義小規(guī)模輸出網(wǎng)絡(luò)的輸入。
此處我們使用與訓(xùn)練的ResNet-34模型,直接復(fù)用預(yù)訓(xùn)練模型在輸出層的輸入,即抽取的特征,然后我們重新定義輸出層,本次我們僅對重定義的輸出層的參數(shù)進行訓(xùn)練,而對于用于抽取特征的部分,我們保留預(yù)訓(xùn)練模型的參數(shù)。
23.GAM
生成對抗網(wǎng)絡(luò)(Generative Adversarial Networks)
在前面的內(nèi)容我們大都討論了如何進行預(yù)測。 在某種形式上,我們使用了深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的從數(shù)據(jù)點到標(biāo)簽的映射。 這種學(xué)習(xí)稱為判別學(xué)習(xí),例如,我們希望能夠區(qū)分照片中的貓和狗中的照片。 分類器和回歸器都是歧視性學(xué)習(xí)的例子。 通過反向傳播訓(xùn)練的神經(jīng)網(wǎng)絡(luò)顛覆了我們認(rèn)為關(guān)于大型復(fù)雜數(shù)據(jù)集的判別式學(xué)習(xí)的所有知識。 在短短5至6年間,高分辨率圖像的分類精度已從無用變成了人類級別。
但是,機器學(xué)習(xí)不僅僅是解決區(qū)分性任務(wù)。 例如,給定一個大型數(shù)據(jù)集,而沒有任何標(biāo)簽,我們可能想要學(xué)習(xí)一個簡潔地捕獲此數(shù)據(jù)特征的模型。 給定這樣一個模型,我們可以對類似于訓(xùn)練數(shù)據(jù)分布的綜合數(shù)據(jù)點進行采樣。 例如,給定大量的面孔照片,我們可能希望能夠生成新的真實感圖像,看起來好像它可能來自同一數(shù)據(jù)集。 這種學(xué)習(xí)稱為生成建模。
直到最近,還沒有能夠合成新穎的逼真的圖像的方法。 但是,深度神經(jīng)網(wǎng)絡(luò)用于判別學(xué)習(xí)的成功開辟了新的可能性。 在過去三年中,一大趨勢是應(yīng)用區(qū)分性深網(wǎng)來克服我們通常不認(rèn)為是監(jiān)督學(xué)習(xí)的問題中的挑戰(zhàn)。 遞歸神經(jīng)網(wǎng)絡(luò)語言模型是使用判別網(wǎng)絡(luò)(經(jīng)過訓(xùn)練可預(yù)測下一個字符)的一個示例,該網(wǎng)絡(luò)一旦受過訓(xùn)練就可以充當(dāng)生成模型。
2014年,一篇突破性論文介紹了Generative Adversarial Network(GANs)Goodfellow.Pouget-Abadie.Mirza.ea.2014,這是一種利用判別模型的力量來獲得良好的生成模型的聰明新方法。 GAN的核心思想是,如果我們不能將假數(shù)據(jù)與真實數(shù)據(jù)區(qū)分開,那么數(shù)據(jù)生成器就很好。在統(tǒng)計中,這稱為兩樣本檢驗,用來回答是否從相同的分布中提取數(shù)據(jù)集的問題的檢驗。大多數(shù)統(tǒng)計文件與GAN之間的主要區(qū)別在于,后者以建設(shè)性的方式使用了這一思想。換句話說,他們不只是訓(xùn)練模型說“嘿,這兩個數(shù)據(jù)集看起來好像不是來自相同的分布”,而是使用兩個樣本的檢驗為生成的模型提供訓(xùn)練信號。這使我們能夠改進數(shù)據(jù)生成器,直到它生成類似于真實數(shù)據(jù)的內(nèi)容為止。至少,它需要愚弄分類器。即使我們的分類器是最先進的深度神經(jīng)網(wǎng)絡(luò)。

可以看到GAN架構(gòu)。GAN架構(gòu)有兩部分。首先,我們需要一個設(shè)備(例如,深層網(wǎng)絡(luò),但實際上可能是任何東西,例如游戲渲染引擎),這可能是 能夠生成看起來像真實事物的數(shù)據(jù)。 如果要處理圖像,則需要生成圖像。 如果要處理語音,則需要生成音頻序列,依此類推。 我們稱其為發(fā)電機網(wǎng)絡(luò)。 第二部分是鑒別器網(wǎng)絡(luò)。 它試圖將偽造數(shù)據(jù)與真實數(shù)據(jù)區(qū)分開。 這兩個網(wǎng)絡(luò)相互競爭。 生成器網(wǎng)絡(luò)試圖欺騙鑒別器網(wǎng)絡(luò)。 此時,鑒別器網(wǎng)絡(luò)將適應(yīng)新的偽造數(shù)據(jù)。 該信息繼而用于改善發(fā)電機網(wǎng)絡(luò),等等。


24.DCGAN
深度卷積生成對抗網(wǎng)絡(luò)(Deep Convolutional Generative Adversarial Networks)
上節(jié)介紹了GAN的工作原理。 證明了他們可以從一些簡單,易于采樣的分布(如均勻分布或正態(tài)分布)中抽取樣本,并將它們轉(zhuǎn)換為看起來與某些數(shù)據(jù)集的分布相匹配的樣本。 盡管我們提出的匹配2D高斯分布的例子很明確,但這并不是特別令人興奮。
在本節(jié)中,我們將演示如何使用GAN生成逼真的圖像。 我們將基于在:cite:Radford.Metz.Chintala.2015中引入的深度卷積GAN(DCGAN)建立模型。 我們將借鑒已證明在區(qū)分計算機視覺問題上如此成功的卷積架構(gòu),并展示如何通過GAN來利用它們來生成逼真的圖像。
鑒別器
鑒別器是普通的卷積網(wǎng)絡(luò),只是它使用泄漏的ReLU作為其激活功能。 給定,其定義為

可以看出,正常的ReLU是α=0,身份函數(shù)是α=1。 對于,泄漏ReLU是一個非線性函數(shù)α∈(0,1),為負(fù)輸入提供非零輸出。 它旨在解決“垂死的ReLU”問題,因為神經(jīng)元可能總是輸出負(fù)值,因此由于ReLU的梯度為0,因此無法取得任何進展。
小結(jié)
1.DCGAN體系結(jié)構(gòu)具有四個用于鑒別器的卷積層和四個用于生成器的“小跨度”卷積層。
2.鑒別器是一個具有批歸一化(輸入層除外)和泄漏性ReLU激活的4層跨卷積。
3.泄漏的ReLU是一個非線性函數(shù),為負(fù)輸入提供非零輸出。 它旨在解決“垂死的ReLU”問題,并幫助漸變在整個體系結(jié)構(gòu)中更輕松地流動。