深度學習-卷積神經網絡(CNN)

目錄

一、CNN

1、卷積

2、什麼時候用local-conv、什麼時候用全卷積

3、可分離卷積模型壓縮?

4、CNN常見問題

5、Batch-Normalization:(加速訓練)

6、Pooling作用?max-pooling和mean-pooling

7、dropout

8、L1與L2正則化

7、激活函數

8、ReLU代替 sigmoid 的利弊

9、卷積反向傳播過程

10、交叉熵損失、均方誤差損失

11、softmax交叉熵損失函數求導

12、logloss和auc的區別


一、CNN

1、卷積

時間複雜度:M2*K2*Cin*Cout

空間複雜度:K2*Cin*Cout

其中,M爲輸出圖特徵尺寸,K爲卷積核尺寸,Cout輸出通道數,Cin輸入通道數,

對圖像(不同的數據窗口數據)和濾波矩陣(一組固定的權重:因爲每個神經元的多個權重固定,所以又可以看做一個恆定的濾波器filter)做內積(逐個元素相乘再求和)的操作就是所謂的『卷積』操作,也是卷積神經網絡的名字來源。

幾個不相關的問題的相關性在於,都存在局部與整體的關係,由低層次的特徵經過組合,組成高層次的特徵,並且得到不同特徵之間的空間相關性。

(優點)CNN通過:局部感知、權值共享、池化操作、多層次結構抓住了這個共性。局部感知使網絡可以提取數據的局部特徵;權值共享大大降低了網絡的訓練難度;池化操作和多層次結構一起,實現了數據的降維,將低層次的特徵組合成高層次的特徵。

缺點:需要調參,需要大量樣本;

2、什麼時候用local-conv、什麼時候用全卷積

答案:局部特徵之間有較強的相關性,適合用全卷積。在不同的區域有不同的特徵分佈時,適合用local-Conv。

3、可分離卷積模型壓縮?

舉個例子,假設有一個3×3大小的卷積層,其輸入通道爲3、輸出通道爲16。

那麼一般的操作就是用16個3×3的卷積核來分別同輸入數據卷積,這樣每個卷積核需要3×3×3個參數,得到的輸出是隻有一個通道的數據。之所以會得到一通道的數據,是因爲剛開始3×3×3的卷積核的每個通道會在輸入數據的每個對應通道上做卷積,然後疊加每一個通道對應位置的值,使之變成了單通道,那麼16個卷積核一共需要(3×3×3)×16 =432個參數。

而應用深度可分離卷積的過程是①用3個3×3大小的卷積核(1通道)分別與輸入的3通道的數據做卷積(這裏使用了3個1通道的卷積核,輸入數據的每個通道用1個3×3的卷積核卷積),得到了3個通道的特徵圖,我們說該步操作是depthwise(逐層)的,在疊加3個特徵圖之前,②接着用16個1×1大小的卷積核(3通道)在這3個特徵圖進行卷積運算,將3個通道的信息進行融合(用1×1的卷積進行不同通道間的信息融合),我們說該步操作是pointwise(逐像素)的。這樣我們可以算出整個過程使用了3×3×3+(1×1×3)×16 =75個參數。

4、CNN常見問題

a、梯度消失問題:過多的層數會導致梯度消失,解決手段:減少層數;增大學習率;用Relu代替sigmoid。

b、權重衰減:CNN的權重共享相當於自帶某種正則項,所以代價函數裏可不加正則

c、學習率的選擇問題。

5、Batch-Normalization:(加速訓練)

在輸入層,輸入特徵會進行減去均值和除以方差的歸一化,以使歸一化後的特徵是0均值和1方差。

爲了克服神經網絡層數加深導致難以訓練而出現的一個算法。說到底,BN 還是爲了解決梯度消失/梯度爆炸問題,特別是梯度消失。

6、Pooling作用?max-pooling和mean-pooling

池化函數使用某一位置的相鄰輸出的總體統計特徵來代替網絡在該位置的輸出。

1、將小鄰域內的特徵點整合得到新的特徵

特徵提取的誤差主要來自兩個方面:(1)鄰域大小受限造成的估計值方差增大;(2)卷積層參數誤差造成估計均值的偏移。

2、mean-pooling能減小第一種誤差,更多的保留圖像的背景信息

3、max-pooling能減小第二種誤差,更多的保留紋理信息。

4、stochastic pooling (統計池)

具體:

假設feature map中的pooling區域元素值如下:

https://images0.cnblogs.com/blog/381513/201311/19190605-9cd434c24d4943388d68fd056ef8b82b.jpg

3*3大小的,元素值和sum=0+1.1+2.5+0.9+2.0+1.0+0+1.5+1.0=10方格中的元素同時除以sum後得到的矩陣元素爲:

https://images0.cnblogs.com/blog/381513/201311/19190624-a145e7e160504ef69216150e29bcf8dc.jpg

每個元素值表示對應位置處值的概率,現在只需要按照該概率來隨機選一個,方法是:將其看作是9個變量的多項式分佈,然後對該多項式分佈採樣即可,theano中有直接的multinomial()來函數完成。當然也可以自己用01均勻分佈來採樣,將單位長度1按照那9個概率值分成9個區間(概率越大,覆蓋的區域越長,每個區間對應一個位置),然隨機生成一個數後看它落在哪個區間。比如如果隨機採樣後的矩陣爲:

https://images0.cnblogs.com/blog/381513/201311/19190659-952e87784fb04d16a7be22149fcb0d27.jpg

 

7、dropout

只在訓練過程中使用dropout,在測試期間不使用dropout。因爲在測試階段,我們不期望輸出結果是隨機的,如果測試階段應用了dropout,預測會受到干擾。

8、L1與L2正則化

L1是拉普拉斯分佈,L2是高斯分佈

添加 L1 正則化,相當於在 L1範數的約束下求目標函數 J 的最小值,下圖展示了二維的情況:

 

L1 在和每個座標軸相交的地方都會有“角”出現(多維的情況下,這些角會更多),在角的位置就會產生稀疏的解。而 J 與這些“角”相交的機會遠大於其他點,因此 L1 正則化會產生稀疏的權值。類似的,可以得到帶有 L2正則化的目標函數在二維平面上的圖形,如下:

 

相比 L1,L2 不會產生“角”,因此 J 與 L2 相交的點具有稀疏性的概率就會變得非常小。

相同點(爲什麼可以防止過擬合?)

L1 & L2 正則化會使模型偏好於更小的權值。簡單來說,更小的權值意味着更低的模型複雜度,也就是對訓練數據的擬合剛剛好(奧卡姆剃刀),不會過分擬合訓練數據(比如異常點,噪聲),以提高模型的泛化能力。此外,添加正則化相當於爲模型添加了某種先驗(限制),規定了參數的分佈,從而降低了模型的複雜度。模型的複雜度降低,意味着模型對於噪聲與異常點的抗干擾性的能力增強,從而提高模型的泛化能力。

不同點

L1 正則化可以產生稀疏權值矩陣,即產生一個稀疏模型,可以用於特徵選擇;一定程度上防止過擬合。L2 正則化主要用於防止模型過擬合

L1 適用於特徵之間有關聯的情況;L2 適用於特徵之間沒有關聯的情況

爲什麼只對權重做正則懲罰,而不對偏置做權重懲罰?

在神經網絡中,參數包括每一層仿射變換的權重和偏置,我們通常只對權重做懲罰而不對偏置做正則懲罰。精確擬合偏置所需的數據通常比擬合權重少得多。每個權重會指定兩個變量如何相互作用。我們需要在各種條件下觀察這兩個變量才能良好地擬合權重。而每個偏置僅控制一個單變量。這意味着,我們不對其進行正則化也不會導致太大的方差。另外,正則化偏置參數可能會導致明顯的欠擬合。

7、激活函數

反向求導難易,梯度彌散,網絡稀疏性

(爲什麼引入激活函數?)如果不用非線性激勵函數,每一層都是上一層的線性函數,無論神經網絡多少層,輸出都是輸入的線性組合,與只有一個隱藏層效果一樣。相當於多層感知機了。所以引入非線性激勵函數,深層網絡就變得有意義了,可以逼近任意函數。

第一,採用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法和指數運算,計算量相對大,而採用Relu激活函數,整個過程的計算量節省很多。

第二,對於深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失),這種現象稱爲飽和,從而無法完成深層網絡的訓練。而ReLU就不會有飽和傾向,不會有特別小的梯度出現。

第三,Relu會使一部分神經元的輸出爲0,這樣就造成了網絡的稀疏性,並且減少了參數的相互依存關係,緩解了過擬合問題的發生。

8、ReLU代替 sigmoid 的利弊

當神經網絡比較小時,sigmoid 表現更好;

在深度學習早期,人們認爲應該避免具有不可導點的激活函數,而 ReLU 不是全程可導/可微的

sigmoid 和 tanh 的輸出是有界的,適合作爲下一層的輸入,以及整個網絡的輸出。實際上,目前大多數網絡的輸出層依然使用的 sigmoid(單輸出) 或 softmax(多輸出)。

爲什麼 ReLU 不是全程可微也能用於基於梯度的學習?——雖然 ReLU 在 0 點不可導,但是它依然存在左導數和右導數,只是它們不相等(相等的話就可導了),於是在實現時通常會返回左導數或右導數的其中一個,而不是報告一個導數不存在的錯誤。

一階函數:可微==可導

對於小數據集,使用整流非線性甚至比學習隱藏層的權重值更加重要

當數據增多時,在深度整流網絡中的學習比在激活函數具有曲率或兩側飽和的深度網絡中的學習更容易:傳統的 sigmoid 函數,由於兩端飽和,在傳播過程中容易丟棄信息

ReLU 的過程更接近生物神經元的作用過程

飽和(saturate)現象:在函數圖像上表現爲變得很平,對輸入的微小改變會變得不敏感。

ReLU有什麼缺點:如果你的learning rate 很大,那麼很有可能你網絡中的40%的神經元都”dead”了。

9、卷積反向傳播過程

 

梯度消失?推導?

許多激活函數將輸出值擠壓在很小的區間內,在激活函數兩端較大範圍的定義域內梯度爲0,導致權重更新的緩慢訓練難度增加,造成學習停止。(前面層上的梯度是來自後面的層上項的乘積,當層數過多時,隨着乘積的累積,將越來越小。)

10、交叉熵損失、均方誤差損失

交叉熵損失(Cross Entropy Loss):假設誤差是二值分佈,可以視爲預測概率分佈和真實概率分佈的相似程度。在分類問題中有良好的應用 

 

均方損失(Mean Square Loss):假設誤差是正態分佈,適用於線性的輸出,特點是對於與真實結果差別越大,則懲罰力度越大,這並不適用於分類問題。 

均方誤差(MSE)作爲損失函數時,會導致大部分情況下梯度偏小,其結果就是權重的更新很慢,且容易造成“梯度消失”現象。而交叉熵損失克服了這個缺點,當誤差大的時候,權重更新就快,當誤差小的時候,權重的更新才慢。

11、softmax交叉熵損失函數求導

softmax函數的公式是這種形式:

損失函數 loss function

 

 

 

12、logloss和auc的區別

Log loss主要是評估是否準確的,auc是用來評估是把正樣本排到前面的能力,評估的方面不一樣。

比如 1 1 0 1 預測值 爲 0.5 0.5 0.3 0.5

那麼 auc 是 1

我們提升預測值到 0.7 0.7 0.4 0.7

那麼 auc 依然是1

但是 logloss 有了很大的提升

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章