深度学习03——CNN
說明:本系列是七月算法深度學習課程的學習筆記
文章目錄
- 1神經網絡與卷積神經網絡
- 1.1 深度神經網絡適合計算機視覺處理嗎
- 1.2CNN的結構
- 1.2.1 數據輸入層
- 1.2.2 卷積層
- 1.2.3 激勵層
- 1.2.3 池化層
- 1.2.4 全連接層
- 1.3CNN的訓練算法
- 1.4CNN的優缺點
- 2正則化與Droupout
- 3典型結構與訓練調優
1神經網絡與卷積神經網絡
1.1 深度神經網絡適合計算機視覺處理嗎
深度神經網絡簡稱DNN,卷積神經網絡簡稱CNN。
DNN的每一層與后面一層都是全連接。如果輸入層是3維,隱層1有4個神經元。那從輸入層到隱層1會有35=15個參數。如果隱層2有4個神經元,從隱層1到隱層2,需要44=16個參數。
在圖像視頻處理中,輸入是非常大的。例如一張圖片可能的輸入是32x32x3,也就是一張長32,寬32的彩色圖片。如果輸入層有1萬張圖片用于訓練,那參數就是=307210000維(在圖像處理中一般會把 原始的輸入矩陣做flatten,變為向量)。這是非常大的一個數。每一個隱層神經元數量實際中不會太少,因為太少就很難捕捉到重要信息,例如4000,參數量變為40003072*10000。這是一個很大的數字。這還只是一層。參數量大,在工程上壓力大,計算、加載、存儲壓力都很大。參數量大,也很容易過擬合。所以DNN不適合。CNN可以。
1.2CNN的結構
CNN為什么適合計算機視覺處理呢?先看下CNN的結構。
一個CNN包含:數據輸入層/input layer+卷積計算層/conv layer、激勵層activation layer、池化層 pooling layer、全連接層 FC layer、Batch Normalization層(可能有)。
1.2.1 數據輸入層
有3種常見的數據處理方式。
1 去均值:把數據的各個維度都中心化到0,相當于沒有了截距。
2 歸一化:把數據的各個維度都歸一化到同樣的范圍,便于梯度計算,各個維度收斂速度一致。
常見的歸一化的方法有:
min-max標準化,將數據歸一到[0,1]范圍內。x?=x?minmax?minx^*=\dfrac{x-min}{max-min}x?=max?minx?min?。
z-score標準化:處理后數據變為符合標準正態分布。x?=x?μσx^*=x-\mu\sigmax?=x?μσ,其中μ為所有樣本數據的均值,σ為所有樣本數據的標準差。
3 PCA/白化:PCA 降維 。白化:降維之后的各個維度可能幅度不一致,這里再做一次歸一化。
注意:這里需要說明的是如果在訓練集上做了什么操作,在測試集或者預測的時候也需要做同樣的處理。可以使用樣本的歸一化的值(均值、方差等),做歸一化。
1.2.2 卷積層
卷積層的幾個核心概念:局部關聯、 窗口滑動。
局部關聯是指用輸入層的一小塊區域與下一層的每個神經元做內積。這塊小區域被稱為一個窗口。一個窗口計算完,按照一定的步長移動窗口,直至計算完成。滑動過程中遇到最后一次計算,不夠窗口寬度,可以填充0,補充完整。
下一層神經元的個數被稱為深度。
下一層中每個神經元的連接權重是固定的。如圖中下一層有5個神經元,那就是5組參數。每一組參數是會與窗口中的數據做內積,如果窗口是一個3x3x3的大小,那一個神經元的參數個數就是3x3x3。這一層參數總個數是3x3x3x5。這樣參數的數量與DNN(32x32x3x5)相比就少了很多。
一組固定的權重與不同的窗口內數據做內積,這個過程稱為卷積。
1.2.3 激勵層
激勵層:把卷積層的輸出做非線性變換。否則無論加多少個隱層,這個符合函數還是線性的。是不能形成彎曲的曲線,在某些數據上是沒法分割的。
常用的激勵函數有:sigmoid、tanh(雙曲正切)、Relu、Leaky Relu、ELU、Maxout
只要神經網絡正常,選擇哪個激勵函數不影響最后的結果。
慎用sigmoid函數,優先選擇Relu,可以繼續嘗試Leaky Relu、Maxout。
1.2.3 池化層
池化層:夾在連續的卷積層中間。主要起到壓縮數據和參數的作用,可以防止過擬合。
可以做池化的原因是發現將一個224x224的特征可視化之后發現降低到112x112,特征不會丟失很多。
可以采取的池化方法是max pooling和average pooling。
相當于給一個圖像做了模糊化。減少了數據量,對下一層就意味著減少了輸入的參數量。同時因為模糊化了,降低過擬合的風險。
1.2.4 全連接層
全連接:兩層之間所有神經元都有權重鏈接。通常全連接層放在CNN的尾部。
一個典型的CNN結構=INPUT +[[CONV->RELU]*N->POOLING?]*M+[FC->RELU]*K+FC
1.3CNN的訓練算法
先定義loass function:衡量和實際結構之間的差距
找到最小化損失函數的W和b,CNN中使用的是SGD
利用BP 鏈式法則求導,求出dw和db(將錯誤信息回傳到每一層)
利用SGD/隨機梯度下降,迭代更新W和b(學習到新一輪知識)
1.4CNN的優缺點
優點:共享卷積核,優化計算量;
無需手動選擇特征,訓練好權重即得特征;
深層次的網絡抽取圖像信息豐富,表達效果好。
缺點:需要調參、計算量大
物理含義不明確
2正則化與Droupout
原因:神經網絡學習能力過強,可能會過擬合
傳統方式可以使用L1、L2正則化,在NN中是使用dropout。
Dropout正則化:別一次開啟所有學習單元。給每個神經元安了一個開關,這個開關會以一定的概率關閉。
在訓練階段:
p=0.5def train_step(X):H1 = np.maximum(0, np.dot(W1,X)+b1)U1 = np.random.rand(H1.shape) <p//<p則保留H1 = H1*U1...在預測階段:
def predict(X):H1 = np.maximum(0, np.dot(W1,X)+b1)*p....在預測階段會乘以概率p,實際工程中,會在訓練階段除以p。
p=0.5def train_step(X):H1 = np.maximum(0, np.dot(W1,X)+b1)U1 = (np.random.rand(H1.shape) <p)/pH1 = H1*U1...def predict(X):H1 = np.maximum(0, np.dot(W1,X)+b1)....對dropout的理解方式一:不要記住太多的東西,學習過程中保持泛華能力。
對dropout的理解方式二:每次都關掉一部分感知器,得到一個新模型,最后做融合。不至于聽一家之言。
3典型結構與訓練調優
典型CNN網絡有:Lenet、AlexNet、ZFNet、VGG、GoogleNet、ResNet。
調優:可以在這些典型的網絡模型基礎上訓練自己的圖片分類模型。可以做的是:不要修改層的名稱,使用原有參數,降低學習率;修改層的名稱,修改分類數為自己的分類數量,提高學習率;新增自己的層,提高學習率。
總結
以上是生活随笔為你收集整理的深度学习03——CNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [密码学基础][每个信息安全博士生应该知
- 下一篇: 微型计算机原理与应用简称为啥,微型计算机