16.批量歸一化和殘差網(wǎng)絡
批量歸一化(BatchNormalization)
BN是由Google于2015年提出谓媒,這是一個深度神經(jīng)網(wǎng)絡訓練的技巧,它不僅可以加快了模型的收斂速度,而且更重要的是在一定程度緩解了深層網(wǎng)絡中“梯度彌散”的問題湾趾,從而使得訓練深層網(wǎng)絡模型更加容易和穩(wěn)定。所以目前BN已經(jīng)成為幾乎所有卷積神經(jīng)網(wǎng)絡的標配技巧了,即對每一批數(shù)據(jù)進行歸一化蒂培。
批量歸一化屬于深度模型,主要利用小批量上的均值和標準差榜苫,不斷調(diào)整神經(jīng)網(wǎng)絡中間輸出护戳,從而使整個神經(jīng)網(wǎng)絡在各層的中間輸出的數(shù)值更穩(wěn)定。
對輸入的標準化(淺層模型)
處理后的任意一個特征在數(shù)據(jù)集中所有樣本上的均值為0垂睬、標準差為1灸异;標準化處理輸入數(shù)據(jù)使各個特征的分布相近
1.對全連接層做批量歸一化
位置:全連接層中的仿射變換和激活函數(shù)之間。
2.對卷積層做批量歸?化
位置:卷積計算之后羔飞、應?激活函數(shù)之前肺樟。
如果卷積計算輸出多個通道,我們需要對這些通道的輸出分別做批量歸一化逻淌,且每個通道都擁有獨立的拉伸和偏移參數(shù)么伯。 計算:對單通道,batchsize=m,卷積計算輸出=pxq 對該通道中m×p×q個元素同時做批量歸一化,使用相同的均值和方差卡儒。
3.預測時的批量歸?化
訓練:以batch為單位,對每個batch計算均值和方差田柔。
預測:用移動平均估算整個訓練數(shù)據(jù)集的樣本均值和方差。
殘差網(wǎng)絡(ResNet)
深度CNN網(wǎng)絡達到一定深度后再一味地增加層數(shù)并不能帶來進一步地分類性能提高骨望,反而會招致網(wǎng)絡收斂變得更慢硬爆,準確率也變得更差。
殘差塊(Residual Block)
恒等映射:左邊:f(x)=x? ? ? 右邊:f(x)-x=0 (易于捕捉恒等映射的細微波動)
在殘差塊中擎鸠,輸?可通過跨層的數(shù)據(jù)線路更快 地向前傳播缀磕。
稠密連接網(wǎng)絡(DenseNet)
主要構(gòu)建模塊:
稠密塊(dense block): 定義了輸入和輸出是如何連結(jié)的。
過渡層(transition layer):用來控制通道數(shù),使之不過大袜蚕。
稠密塊
17.凸優(yōu)化
優(yōu)化與深度學習
優(yōu)化與估計
盡管優(yōu)化方法可以最小化深度學習中的損失函數(shù)值糟把,但本質(zhì)上優(yōu)化方法達到的目標與深度學習的目標并不相同。
優(yōu)化方法目標:訓練集損失函數(shù)值
深度學習目標:測試集損失函數(shù)值(泛化性)
優(yōu)化在深度學習中的挑戰(zhàn)?
局部最小值牲剃;鞍點(黑塞矩陣為零)遣疯;梯度消失
凸性 (Convexity)
凸函數(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;夭坪,則稱為嚴格凸函數(shù)。若-f(x)為S的凸函數(shù)过椎,則稱f(x)為S上的凹函數(shù).
Jensen 不等式
性質(zhì):
1.無局部極小值
2.與凸集的關系:凸函數(shù)滿足條件的點構(gòu)成的集合是凸集
3.二階條件:二階導數(shù)大于等于零等價于函數(shù)是凸函數(shù)
18.梯度下降
一維梯度下降
多維梯度下降
自適應方法
牛頓法
收斂性分析
預處理 (Heissan陣輔助梯度下降)
梯度下降與線性搜索(共軛梯度法)?
隨機梯度下降
參數(shù)更新
動態(tài)學習率
19.目標檢測基礎?
目標檢測和邊界框
錨框
目標檢測算法通常會在輸入圖像中采樣大量的區(qū)域室梅,然后判斷這些區(qū)域中是否包含我們感興趣的目標,并調(diào)整區(qū)域邊緣從而更準確地預測目標的真實邊界框(ground-truth bounding box)疚宇。不同的模型使用的區(qū)域采樣方法可能不同亡鼠。這里我們介紹其中的一種方法:它以每個像素為中心生成多個大小和寬高比(aspect ratio)不同的邊界框。這些邊界框被稱為錨框(anchor box)敷待。我們將在后面基于錨框?qū)嵺`目標檢測间涵。
生成多個錨框
交并比
我們剛剛提到某個錨框較好地覆蓋了圖像中的狗。如果該目標的真實邊界框已知榜揖,這里的“較好”該如何量化呢勾哩?一種直觀的方法是衡量錨框和真實邊界框之間的相似度。我們知道举哟,Jaccard系數(shù)(Jaccard index)可以衡量兩個集合的相似度思劳。給定集合A和B,它們的Jaccard系數(shù)即二者交集大小除以二者并集大蟹列伞:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
實際上潜叛,我們可以把邊界框內(nèi)的像素區(qū)域看成是像素的集合。如此一來壶硅,我們可以用兩個邊界框的像素集合的Jaccard系數(shù)衡量這兩個邊界框的相似度威兜。當衡量兩個邊界框的相似度時,我們通常將Jaccard系數(shù)稱為交并比(Intersection over Union庐椒,IoU)椒舵,即兩個邊界框相交面積與相并面積之比,如圖所示约谈。交并比的取值范圍在0和1之間:0表示兩個邊界框無重合像素笔宿,1表示兩個邊界框相等犁钟。
9.4.3 標注訓練集的錨框
在訓練集中,我們將每個錨框視為一個訓練樣本措伐。為了訓練目標檢測模型特纤,我們需要為每個錨框標注兩類標簽:一是錨框所含目標的類別军俊,簡稱類別侥加;二是真實邊界框相對錨框的偏移量,簡稱偏移量(offset)粪躬。在目標檢測時担败,我們首先生成多個錨框,然后為每個錨框預測類別以及偏移量镰官,接著根據(jù)預測的偏移量調(diào)整錨框位置從而得到預測邊界框提前,最后篩選需要輸出的預測邊界框。
我們知道泳唠,在目標檢測的訓練集中狈网,每個圖像已標注了真實邊界框的位置以及所含目標的類別。在生成錨框之后笨腥,我們主要依據(jù)與錨框相似的真實邊界框的位置和類別信息為錨框標注拓哺。那么,該如何為錨框分配與其相似的真實邊界框呢脖母?
輸出預測邊界框
在模型預測階段士鸥,我們先為圖像生成多個錨框,并為這些錨框一一預測類別和偏移量谆级。隨后烤礁,我們根據(jù)錨框及其預測偏移量得到預測邊界框。當錨框數(shù)量較多時肥照,同一個目標上可能會輸出較多相似的預測邊界框脚仔。為了使結(jié)果更加簡潔,我們可以移除相似的預測邊界框舆绎。常用的方法叫作非極大值抑制(non-maximum suppression玻侥,NMS)。
我們來描述一下非極大值抑制的工作原理亿蒸。對于一個預測邊界框B凑兰,模型會計算各個類別的預測概率。設其中最大的預測概率為p边锁,該概率所對應的類別即B的預測類別姑食。我們也將p稱為預測邊界框B的置信度。在同一圖像上茅坛,我們將預測類別非背景的預測邊界框按置信度從高到低排序音半,得到列表L则拷。從L中選取置信度最高的預測邊界框B1作為基準,將所有與B1的交并比大于某閾值的非基準預測邊界框從L中移除曹鸠。這里的閾值是預先設定的超參數(shù)煌茬。此時,L保留了置信度最高的預測邊界框并移除了與其相似的其他預測邊界框彻桃。 接下來坛善,從L中選取置信度第二高的預測邊界框B2作為基準,將所有與B2的交并比大于某閾值的非基準預測邊界框從L中移除邻眷。重復這一過程眠屎,直到L中所有的預測邊界框都曾作為基準。此時L中任意一對預測邊界框的交并比都小于閾值肆饶。最終改衩,輸出列表L中的所有預測邊界框。
小結(jié)
1.以每個像素為中心驯镊,生成多個大小和寬高比不同的錨框葫督。
2.交并比是兩個邊界框相交面積與相并面積之比。
3.在訓練集中板惑,為每個錨框標注兩類標簽:一是錨框所含目標的類別橄镜;二是真實邊界框相對錨框的偏移量。
4.預測時洒放,可以使用非極大值抑制來移除相似的預測邊界框蛉鹿,從而令結(jié)果簡潔。
多尺度目標檢測
在錨框那節(jié)中往湿,我們在實驗中以輸入圖像的每個像素為中心生成多個錨框妖异。這些錨框是對輸入圖像不同區(qū)域的采樣。然而领追,如果以圖像每個像素為中心都生成錨框他膳,很容易生成過多錨框而造成計算量過大。舉個例子绒窑,假設輸入圖像的高和寬分別為561像素和728像素棕孙,如果以每個像素為中心生成5個不同形狀的錨框,那么一張圖像上則需要標注并預測200多萬個錨框(561×728×5)些膨。
減少錨框個數(shù)并不難蟀俊。一種簡單的方法是在輸入圖像中均勻采樣一小部分像素,并以采樣的像素為中心生成錨框订雾。此外肢预,在不同尺度下,我們可以生成不同數(shù)量和不同大小的錨框洼哎。值得注意的是烫映,較小目標比較大目標在圖像上出現(xiàn)位置的可能性更多沼本。舉個簡單的例子:形狀為1×1、1×2和2×2的目標在形狀為2×2的圖像上可能出現(xiàn)的位置分別有4锭沟、2和1種抽兆。因此,當使用較小錨框來檢測較小目標時族淮,我們可以采樣較多的區(qū)域辫红;而當使用較大錨框來檢測較大目標時,我們可以采樣較少的區(qū)域瞧筛。
為了演示如何多尺度生成錨框厉熟,我們先讀取一張圖像导盅。它的高和寬分別為561像素和728像素较幌。
20.圖像風格遷移
樣式遷移
在本節(jié)中,我們將介紹如何使用卷積神經(jīng)網(wǎng)絡自動將某圖像中的樣式應用在另一圖像之上白翻,即樣式遷移(style transfer)乍炉。這里我們需要兩張輸入圖像,一張是內(nèi)容圖像滤馍,另一張是樣式圖像岛琼,我們將使用神經(jīng)網(wǎng)絡修改內(nèi)容圖像使其在樣式上接近樣式圖像。下圖中的內(nèi)容圖像為本書作者在西雅圖郊區(qū)的雷尼爾山國家公園(Mount Rainier National Park)拍攝的風景照巢株,而樣式圖像則是一副主題為秋天橡樹的油畫槐瑞。最終輸出的合成圖像在保留了內(nèi)容圖像中物體主體形狀的情況下應用了樣式圖像的油畫筆觸,同時也讓整體顏色更加鮮艷阁苞。
方法
下圖用一個例子來闡述基于卷積神經(jīng)網(wǎng)絡的樣式遷移方法困檩。首先,我們初始化合成圖像那槽,例如將其初始化成內(nèi)容圖像悼沿。該合成圖像是樣式遷移過程中唯一需要更新的變量,即樣式遷移所需迭代的模型參數(shù)骚灸。然后糟趾,我們選擇一個預訓練的卷積神經(jīng)網(wǎng)絡來抽取圖像的特征,其中的模型參數(shù)在訓練中無須更新甚牲。深度卷積神經(jīng)網(wǎng)絡憑借多個層逐級抽取圖像的特征义郑。我們可以選擇其中某些層的輸出作為內(nèi)容特征或樣式特征。以下圖為例丈钙,這里選取的預訓練的神經(jīng)網(wǎng)絡含有3個卷積層非驮,其中第二層輸出圖像的內(nèi)容特征,而第一層和第三層的輸出被作為圖像的樣式特征著恩。接下來院尔,我們通過正向傳播(實線箭頭方向)計算樣式遷移的損失函數(shù)蜻展,并通過反向傳播(虛線箭頭方向)迭代模型參數(shù),即不斷更新合成圖像邀摆。樣式遷移常用的損失函數(shù)由3部分組成:內(nèi)容損失(content loss)使合成圖像與內(nèi)容圖像在內(nèi)容特征上接近纵顾,樣式損失(style loss)令合成圖像與樣式圖像在樣式特征上接近,而總變差損失(total variation loss)則有助于減少合成圖像中的噪點栋盹。最后施逾,當模型訓練結(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.可以通過預訓練的卷積神經(jīng)網(wǎng)絡來抽取圖像的特征掉伏,并通過最小化損失函數(shù)來不斷更新合成圖像。
3.用格拉姆矩陣表達樣式層輸出的樣式澳窑。
21.?圖像分類案例1
Kaggle上的圖像分類(CIFAR-10)
CIFAR-10 - Object Recognition in Images | Kaggle
定義模型
ResNet-18網(wǎng)絡結(jié)構(gòu):ResNet全名Residual Network殘差網(wǎng)絡斧散。Kaiming He 的《Deep Residual Learning for Image Recognition》獲得了CVPR最佳論文。他提出的深度殘差網(wǎng)絡在2015年可以說是洗刷了圖像方面的各大比賽照捡,以絕對優(yōu)勢取得了多個比賽的冠軍颅湘。而且它在保證網(wǎng)絡精度的前提下,將網(wǎng)絡的深度達到了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ù)集上預訓練的模型來抽取圖像特征脚草,以作為自定義小規(guī)模輸出網(wǎng)絡的輸入。
此處我們使用與訓練的ResNet-34模型原献,直接復用預訓練模型在輸出層的輸入馏慨,即抽取的特征埂淮,然后我們重新定義輸出層,本次我們僅對重定義的輸出層的參數(shù)進行訓練写隶,而對于用于抽取特征的部分倔撞,我們保留預訓練模型的參數(shù)。
23.GAM
生成對抗網(wǎng)絡(Generative Adversarial Networks)
在前面的內(nèi)容我們大都討論了如何進行預測慕趴。 在某種形式上痪蝇,我們使用了深度神經(jīng)網(wǎng)絡學習的從數(shù)據(jù)點到標簽的映射。 這種學習稱為判別學習冕房,例如躏啰,我們希望能夠區(qū)分照片中的貓和狗中的照片。 分類器和回歸器都是歧視性學習的例子耙册。 通過反向傳播訓練的神經(jīng)網(wǎng)絡顛覆了我們認為關于大型復雜數(shù)據(jù)集的判別式學習的所有知識给僵。 在短短5至6年間,高分辨率圖像的分類精度已從無用變成了人類級別觅玻。
但是想际,機器學習不僅僅是解決區(qū)分性任務培漏。 例如溪厘,給定一個大型數(shù)據(jù)集,而沒有任何標簽牌柄,我們可能想要學習一個簡潔地捕獲此數(shù)據(jù)特征的模型畸悬。 給定這樣一個模型,我們可以對類似于訓練數(shù)據(jù)分布的綜合數(shù)據(jù)點進行采樣珊佣。 例如蹋宦,給定大量的面孔照片,我們可能希望能夠生成新的真實感圖像咒锻,看起來好像它可能來自同一數(shù)據(jù)集冷冗。 這種學習稱為生成建模。
直到最近惑艇,還沒有能夠合成新穎的逼真的圖像的方法蒿辙。 但是,深度神經(jīng)網(wǎng)絡用于判別學習的成功開辟了新的可能性滨巴。 在過去三年中思灌,一大趨勢是應用區(qū)分性深網(wǎng)來克服我們通常不認為是監(jiān)督學習的問題中的挑戰(zhàn)。 遞歸神經(jīng)網(wǎng)絡語言模型是使用判別網(wǎng)絡(經(jīng)過訓練可預測下一個字符)的一個示例恭取,該網(wǎ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ù)據(jù)集看起來好像不是來自相同的分布”,而是使用兩個樣本的檢驗為生成的模型提供訓練信號檀葛。這使我們能夠改進數(shù)據(jù)生成器进宝,直到它生成類似于真實數(shù)據(jù)的內(nèi)容為止纳决。至少,它需要愚弄分類器。即使我們的分類器是最先進的深度神經(jīng)網(wǎng)絡吁峻。
可以看到GAN架構(gòu)。GAN架構(gòu)有兩部分魄咕。首先胧弛,我們需要一個設備(例如,深層網(wǎng)絡楚殿,但實際上可能是任何東西撮慨,例如游戲渲染引擎),這可能是 能夠生成看起來像真實事物的數(shù)據(jù)脆粥。 如果要處理圖像砌溺,則需要生成圖像。 如果要處理語音变隔,則需要生成音頻序列规伐,依此類推。 我們稱其為發(fā)電機網(wǎng)絡匣缘。 第二部分是鑒別器網(wǎng)絡猖闪。 它試圖將偽造數(shù)據(jù)與真實數(shù)據(jù)區(qū)分開。 這兩個網(wǎng)絡相互競爭孵户。 生成器網(wǎng)絡試圖欺騙鑒別器網(wǎng)絡萧朝。 此時,鑒別器網(wǎng)絡將適應新的偽造數(shù)據(jù)夏哭。 該信息繼而用于改善發(fā)電機網(wǎng)絡检柬,等等。
24.DCGAN
深度卷積生成對抗網(wǎng)絡(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)絡笨农,只是它使用泄漏的ReLU作為其激活功能。 給定帖渠,其定義為
可以看出谒亦,正常的ReLU是α=0,身份函數(shù)是α=1空郊。 對于份招,泄漏ReLU是一個非線性函數(shù)α∈(0,1),為負輸入提供非零輸出狞甚。 它旨在解決“垂死的ReLU”問題锁摔,因為神經(jīng)元可能總是輸出負值,因此由于ReLU的梯度為0入愧,因此無法取得任何進展鄙漏。
小結(jié)
1.DCGAN體系結(jié)構(gòu)具有四個用于鑒別器的卷積層和四個用于生成器的“小跨度”卷積層。
2.鑒別器是一個具有批歸一化(輸入層除外)和泄漏性ReLU激活的4層跨卷積棺蛛。
3.泄漏的ReLU是一個非線性函數(shù),為負輸入提供非零輸出巩步。 它旨在解決“垂死的ReLU”問題旁赊,并幫助漸變在整個體系結(jié)構(gòu)中更輕松地流動。