計算機視覺與深度學習
全連接神經(jīng)網(wǎng)絡
首先下面的流程圖是整個全連接神經(jīng)網(wǎng)絡所要學習的內(nèi)容。

圖像表示
像素表示與之前所說的相同,將不同像素點的rgb值轉(zhuǎn)化為一個列向量,直接利用原始像素作為特征,例如cifar10中每個圖像可表示為特征。
分類模型
多層感知器:
下面是多層全連接網(wǎng)絡的表達式:

全連接神經(jīng)網(wǎng)絡之所以特征提取能力更強就是如圖所示,其中W1可以按照個人的需求自己設定,調(diào)整W1行數(shù)等于增加模板個數(shù),W2需要匹配多個模板的結(jié)果來實現(xiàn)最終打分。這樣分類器就可以學到更多我們想讓其學到的東西。
線性分類器可以分類線性關系的數(shù)據(jù),而神經(jīng)網(wǎng)絡可以分類處于非線性關系的數(shù)據(jù)。
全連接神經(jīng)網(wǎng)絡的命名:一般的神經(jīng)網(wǎng)絡包括輸入層,隱藏層,輸出層,然后神經(jīng)網(wǎng)絡的層數(shù)不包括輸入層,剩下的層數(shù)就是這個神經(jīng)網(wǎng)絡的層數(shù)。如果說N隱層神經(jīng)網(wǎng)絡就和上面不一樣,這里指隱層的數(shù)目為N。例如:
N層全連接神經(jīng)網(wǎng)絡:除輸入層之外其他層的數(shù)量為N的網(wǎng)絡。
N個隱層的全連接神經(jīng)網(wǎng)絡:網(wǎng)絡隱層的數(shù)量為N的網(wǎng)絡。
激活函數(shù)
首先為什么需要激活函數(shù),就如下圖所示,假如沒有激活函數(shù)的話,全連接神經(jīng)網(wǎng)絡就會變成一個線性分類器。
接著是常見的激活函數(shù)
其中Sigmoid的激活函數(shù)使得輸出的值保持在0到1之間。ReLU激活函數(shù)是最常用的激活函數(shù),其作用就是將小于0的值歸0。tanh激活函數(shù)的作用是使得輸出的值保持在-1到+1之間,保持其對稱性,也會保留原本的正負,最后Leaky ReLU激活函數(shù)的正半軸與ReLU相同,負半軸將其縮小為原來的十分之一。
網(wǎng)絡結(jié)構(gòu)設計
對于網(wǎng)絡結(jié)構(gòu)設計,應該考慮兩個問題。
1.用不用隱層,用一個還是用幾個隱層?(深度設計)
2.每隱層設置多少個神經(jīng)元比較合適?(寬度設計)
依據(jù)分類任務的難易程度來調(diào)整神經(jīng)網(wǎng)絡模型的復雜程度。分類任務越難,我們設計的神經(jīng)網(wǎng)絡結(jié)構(gòu)就應該越深,越寬。但是,需要注意的是對訓練集分類精度最高的全連接神經(jīng)網(wǎng)絡模型,在真實場景下識別性能未必是最好的(過擬合)。
小結(jié):
1.全連接神經(jīng)網(wǎng)絡的組成:一個輸入層,一個輸出層以及多個隱層;
2.輸入層與輸出層的神經(jīng)元個數(shù)由任務決定,而隱層數(shù)量以及每個隱層的神經(jīng)元個數(shù)需要人為指定;
3.激活函數(shù)是全連接神經(jīng)網(wǎng)絡中的一個重要部分,缺少了激活函數(shù),全連接神經(jīng)網(wǎng)路將退化為線性分類器。
輸入值用預處理來實現(xiàn)零均值等操作,激活函數(shù)作用于全連接神經(jīng)網(wǎng)絡,作用于神經(jīng)元,線性變換以后的輸出上面的。
損失函數(shù)
SOFTMAX與交叉熵:首先介紹SOFTMAX,其中對于隱層輸出的值取e的次方是和logistic回歸有關,是推到出來的表達式。接著是交叉熵,我們也可以推導出交叉熵等于熵與相對熵的和。
對比多類支持向量機損失:
接下來,將交叉熵損失與支持向量機損失相對比可以得到:
從上面可以看到,在同樣可以預測正確的情況下,不同的損失函數(shù)所計算出來的結(jié)果是不一樣的,交叉熵損失對比支持向量機損失能看出更多的數(shù)據(jù)。
優(yōu)化算法
計算圖與反向傳播
計算圖是一種有向圖,它用來表達輸入輸出以及中間變量之間的計算關系,每一個節(jié)點對應著一個數(shù)學運算。
計算圖總結(jié):
1.任意復雜的函數(shù),都可以用計算圖的形式總結(jié)。
2.在整個計算圖中,每個門單元都會得到一些輸入,然后,進行下面兩個計算:
a)這個門的輸入值。
b)其輸出值關于輸入值的局部梯度
3.利用鏈式法則,門單元應該將回傳的梯度乘以它對其的輸入的局部梯度,從而得到整個網(wǎng)絡的輸出對該門單元的每個輸出值的梯度。
計算圖的顆粒度:可以將表達式直接求導,這樣顆粒度比較大,計算效率快。也可以按照公式逐步求導,這樣計算下來顆粒度比較小,但是計算效率不高。
常見門單元如下:
再談激活函數(shù)
梯度消失:梯度消失是神經(jīng)網(wǎng)絡訓練中非常致命的一個問題,其本質(zhì)是由于鏈式法則的乘法特性導致的。
梯度爆炸:斷崖處梯度乘以學習率后會是一個非常大的值,從而“飛”出了合理區(qū)域,最終導致算法不收斂。解決辦法包括把沿梯度方向前進的步長限制在某個值內(nèi)就可以避免“飛”出了,這個方法也稱為梯度裁剪。
sigmoid函數(shù)使用頻率不高的原因:其梯度情況不好,最高的梯度是0.25,如果神經(jīng)網(wǎng)絡的層數(shù)比較多的話就會出現(xiàn)梯度消失現(xiàn)象。雙曲正切函數(shù)tanh(x)與sigmoid類似,局部梯度特性不利于網(wǎng)絡梯度流的反向傳播。
Relu函數(shù):當輸入大于0時,局部梯度永遠不會為0,比較有利于梯度流的傳遞。
Leakly Relu函數(shù):基本沒有死區(qū),也就是梯度永遠不會為0。之所以說基本,是因為函數(shù)在0處沒有導數(shù)。
激活函數(shù)結(jié)論:盡量選擇Relu函數(shù)或者Leakly ReLU函數(shù),相對于Sigmoid或者是tanh,ReLU函數(shù)或者Leakly ReLU函數(shù)會讓梯度流更加順暢,訓練過程收斂更快。
動量法與自適應梯度:
梯度下降法存在的問題1)損失函數(shù)特性:一個方向上變化迅速而在另一個方向上變化緩慢。
2)優(yōu)化目標:從起點處走到底端笑臉處。
3)梯度下降算法存在的問題:山壁間震蕩,往谷低方向的行進較慢。
動量法介紹:
自適應梯度法:
自適應梯度法通過減小震蕩方向步長,增大平坦方向步長來減小震蕩,加速通往谷低方向。自適應梯度法通過減小震蕩方向步長,增大平坦方向步長來減小震蕩,加速通往谷低方向。關于震蕩方向和谷低方向的劃分,梯度幅度的平方較大的方向是震蕩方向,梯度幅度較小的方向是平坦方向。

Adam是上面兩種算法的合并。將兩種算法的優(yōu)點合并在一起。

權(quán)值初始化小結(jié)
1.好的初始化方法可以防止前向傳播過程中的信息消失,也可以解決反向傳播過程中的梯度消失。
2.激活函數(shù)選擇雙曲正切或Sigmoid時,建議使用Xaizer初始化方法。
3.激活函數(shù)選擇ReLU或Leakly ReLU時,推薦使用He初始化方法。
批歸一化:
直接對神經(jīng)元的輸出進行批歸一化。調(diào)整權(quán)值分布使得輸出與輸入具有相同的分布。如果每一層的每個神經(jīng)元進行歸一化,就能解決前向傳遞過程中的信號消失問題。

上面圖中第一問答案:根據(jù)對分類的貢獻自行決定數(shù)據(jù)分布的均值和方差。
第二問答案:來自與訓練中,累加訓練時每個批次的均值和方差,最后進行平均,用平均后的結(jié)果作為預測時的均值和方差。
過擬合與欠擬合:
過擬合--是指學習時選擇的模型所包含的參數(shù)過多,以至于出現(xiàn)這一模型對已知數(shù)據(jù)預測的很好,但對未知數(shù)據(jù)預測得很差的現(xiàn)象。這種情況下模型可能只是記住了訓練集數(shù)據(jù),而不是學習到了數(shù)據(jù)特性。
欠擬合--模型描述能力太弱,以至于不能很好地學習到數(shù)據(jù)中的規(guī)律。產(chǎn)生欠擬合的原因通常是模型過于簡單。
機器學習的根本問題是優(yōu)化和泛化的問題,優(yōu)化--是指調(diào)節(jié)模型以在訓練數(shù)據(jù)上得到最佳性能。泛化--是指訓練好的模型在前所未見的數(shù)據(jù)上的性能好壞。
訓練初期:優(yōu)化和泛化是相關的,訓練集上的誤差越小,模型的泛化能力逐漸增強。
訓練后期:模型在驗證集上的錯誤率不再降低,轉(zhuǎn)而開始變高。模型出現(xiàn)過擬合,開始學習僅和訓練數(shù)據(jù)有關的模式。
關于過擬合的解決方法:最優(yōu)方案:獲取更多的訓練數(shù)據(jù)。最優(yōu)方案:調(diào)節(jié)模型允許存儲的信息量或者對模型允許存儲的信息加以約束,該類方法也稱為正則化。
實際方案:1)調(diào)節(jié)模型大小
2)約束模型權(quán)重,即權(quán)重正則化(常用的有L1,L2正則化)
3)隨機失活(Dropout)
隨機失活為什么能夠防止過擬合?
答:有三種解釋。1)隨機失活使得每次更新梯度時參與計算的網(wǎng)絡參數(shù)減少了,降低了模型容量,所以能防止過擬合。2)隨機失活激勵權(quán)重分散,從這個角度來看隨機失活也能起到正則化的作用,從而防止過擬合。3)Dropout可以看作模型集成。
神經(jīng)網(wǎng)絡中的超參數(shù):
網(wǎng)絡結(jié)構(gòu):隱層神經(jīng)元個數(shù),網(wǎng)絡層數(shù),非線性單元選擇等
優(yōu)化相關:學習率,Dropout比率,正則項強度等
學習率作為一種超參數(shù),學習率過大,訓練過程無法收斂。學習率偏大,在最小值附近震蕩,達不到最優(yōu)。學習率太小,收斂時間較長。學習率適中,收斂快,結(jié)果好。
超參數(shù)優(yōu)化方法:
1)網(wǎng)絡搜索法:1.每個超參數(shù)分別取幾幾個值,組合這些超參數(shù)值,形成多組超參數(shù)。2.在驗證集上評估每組超參數(shù)的模型性能。3.選擇性能最優(yōu)的模型所采用的那組值作為最終的超參數(shù)的值。
2)隨機搜索法:1.參數(shù)空間內(nèi)隨機取點,每個點對應一組超參數(shù)。2.在驗證集上評估每組超參數(shù)的模型性能。3.選擇性能最優(yōu)的模型所采用的那組值作為最終的超參數(shù)的值。
隨機搜索法是實驗效果更好。
超參數(shù)搜索策略:1)粗搜索:利用隨機法在較大范圍里采樣超參數(shù),訓練一個周期,依據(jù)驗證集正確率縮小超參數(shù)范圍。2)精搜索:利用隨機法在前述縮小的范圍內(nèi)采樣超參數(shù),運行模型五到十個周期,選擇驗證集上精度最高的那組超參數(shù)。
建議:對于學習率,正則項強度這類超參數(shù),在對數(shù)空間上進行隨機采樣更合適。








