CNN與常用框架
1. 神經網路
1.1 神經網路——是什麼?
神經網路沒有一個嚴格的正式定義。它的基本特點,是試圖模仿大腦的神經元之間傳遞,處理資訊的模式。還是有些抽象,那麼看看下面這張圖。
輸入層和輸出層之間有多個隱層hidden layer,輸入層、輸出層和隱層都有若干個節點。每一個節點是一個神經元,每個神經元,通過激勵函式,計算處理來自其它相鄰神經元的加權輸入值;神經元之間的資訊傳遞的強度,用所謂加權值來定義,演算法會不斷自我學習,調整這個加權值。
在邏輯迴歸中,我們知道迴歸函式中得到線性擬合z=θ0+θ1x1+θ2x2z=θ0+θ1x1+θ2x2,輸入到sigmoid函式中a=g(z)=11+e−za=g(z)=11+e−z,這個過程可以看做一個沒有隱層的神經元,g(z)就是激勵函式:
如果在中間加上少量隱層,就是淺層神經網路,增多中間層,就是深層神經網路(DNN)。
1.2 神經網路——為什麼?
神經網路為什麼比其他的分類器有更好的效果呢?傳統的邏輯斯特迴歸或者linear SVM來做簡單的的分類,對於非線性可分的情況,可以設定核函式去把平面資料分隔開,但是樣本很不規則的時候卻難以分割。那麼神經網路是怎麼做的呢?舉一個吳恩達老師課件裡的例子:
當x1、x2相同時y=1,不同時y=0,對y的取值進行切分,很難用一條直線切分。如果有一個分類器,用兩條線性分類的組合(邏輯與)判定正負樣本,就可以完成。如圖,給定一組權重可得到一條直線,由兩組權重構造兩條直線,再有這兩條直線進行線性加權,得到切分函式。
除了“邏輯與”,神經元還可以完成“邏輯或”,這兩個操作是神經網路的高明所在。例如對下圖四種顏色分類,採用“摳圖”的方式得到綠色:先對上面綠色的模組的7條變作線性切分,得到0、1的分類,再對這7條線性分類做與操作,得到上面的這個綠色。再和其他的綠色模組取或操作,得到全部的綠色區域。
我們已經瞭解了神經網路的結構,是全連線的,那麼卷積神經網路又是什麼呢?
2. 卷積神經網路的層級結構
卷積神經網路依舊是層級結構,但是層的功能和形式做了變化,主要的層次有資料輸入層、卷積計算層、激勵層、池化層和全連線層,這些層次穿插著組合在一起。
2.1 資料輸入層——Input layer
有3種常見的影象資料處理方式:
1. 去均值:把輸入資料各個維度都中心化到0。
2. 歸一化:幅度歸一化到同樣的範圍。
3. PCA/白化:用PCA降維,白化是對資料每個特徵軸上的幅度歸一化。
CNN裡一般只做去訓練集的均值。
2.2 卷積計算層——CONV layer
卷積計算層是卷積神經網路的核心,這個操作在物理上是可解釋的。我們知道神經網路是全連線的,卷積網路不是,是區域性關聯的。過程是:每個神經元看做一個濾波器filter,filter對區域性資料計算。取一個數據視窗,這個資料視窗不斷地滑動,直到覆蓋所有樣本 。需要知道這幾個引數:
a. 深度depth:神經元個數,決定輸出的depth厚度。
b. 步長stride:決定滑動多少步可以到邊緣
c. 填充值zero-padding:在外圍邊緣補充若干圈0,方便從初始位置以步長為單位可以剛好滑倒末尾位置,通俗地講就是為了總長能被步長整除。
舉例分析:下面這張圖中,有兩個神經元,即depth=2;取3*3的視窗,每次移動兩個步長,stride=2;zero-padding=1。分別以兩個濾子為軸滑動陣列,得到兩組結果。
具體是怎麼計算的呢?對應位置上是數字先乘後相加,中間濾波器filter與資料視窗做內積。以第一個結果-3為例:第0組0∗0+0∗0+0∗(−1)+0∗1+1∗0+2∗0+0∗0+1∗0+0∗1=00∗0+0∗0+0∗(−1)+0∗1+1∗0+2∗0+0∗0+1∗0+0∗1=0,第1組=-4,第2組=0,偏差bias=1,所以 0+(-4)+0+1=-3。整個計算過程的動態圖如下,做的很直觀明瞭!
之所以卷積神經網路的引數不會很大,有一個很重要的性質就是引數共享機制:同一個神經元,無論輸入資料如何滑動變化,連線資料窗的權重是固定的。這樣一來,有多少個神經元,就制定多少組引數,過程中不會再改變。
卷積神經網路在影象上的應用很廣泛,下面這張圖表示使用不同的濾子處理影象的差別。
2.3 激勵層——ReLU
激勵層有一個激勵函式,把卷積層輸出結果做非線性對映。非線性的對映有:Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Maxout等,大多數用的是ReLU。ReLU收斂快(比sigmoid函式至少提高6倍),求梯度簡單,但是較脆弱,它的影象如下:
改進的有:
a. Leaky ReLU:不會“飽和” /掛掉,計算也很快。
b. 指數線性單元ELU:所有ReLU有的優點都有,不會掛,輸出均值趨於0,因為指數存在,計算量略大。
c. Maxout:計算是線性的,不會飽和不會掛,多了好些引數;max(ωT1x+b1,ωT2x+b2)max(ω1Tx+b1,ω2Tx+b2)
選擇激勵函式的一些實際經驗:不要用sigmoid,太難以訓練;首先試RELU,因為快,但要小心點,列印中間資訊判斷狀態;如果RELU失效,請用Leaky ReLU或者Maxout;某些情況下tanh倒是有不錯的結果,但是很少。
2.4 池化層——Pooling layer
池化層夾在連續的卷積層中間,用於壓縮資料和引數的量、減小過擬合。如下圖,在不影響影象內容的前提下,把224x224的圖片壓縮成 112x112,基於的理論是平移不變性。
池化層有 Max pooling 和 average pooling兩種方式,工業界多用Max pooling。Max pooling每次把視窗中最大的值抽出來,如下圖:
2.5 全連線層——FC layer
全連線層中,兩層之間所有神經元都有權重連線,通常全連線層在卷積神經網路尾部,因為尾部的資訊量沒有開始那麼大。
一般卷積神經網路的結構層次如下:
2.6 卷積神經網路的優缺點
優點:
a. 共享卷積核,對高維資料處理無壓力
b. 無需手動選取特徵,訓練好權重,即得特徵
c. 分類效果好
缺點:
a. 需要調參,需要大樣本量,訓練最好要用GPU
b. 物理含義不明確
3. 典型CNN
1. LeNet,這是最早用於數字識別的CNN
2. AlexNet, 2012 ILSVRC比賽遠超第2名的CNN,比LeNet更深,用多層小卷積層疊加替換單大卷積層
3. ZF Net, 2013 ILSVRC比賽冠軍
4. GoogLeNet, 2014 ILSVRC比賽冠軍
5. VGGNet, 2014 ILSVRC比賽中的模型,影象識別略差於GoogLeNet,但是在很多影象轉化學習問題(比如object detection)上效果奇好。
4. CNN常用框架
1. Caffe:源於Berkeley的主流CV工具包,支援C++,python,matlab,Model Zoo中有大量預訓練好的模型供使用。
prototxt是用命令列做訓練時要用的,定義了cnn的層級結構。
2. Torch:Facebook用的卷積神經網路工具包,通過時域卷積的本地介面,使用非常直觀,torch定義新網路層比較簡單,可以做影象或者RNN。
3. TensorFlow:Google的深度學習框架,視覺化很方便,資料和模型並行化好,速度快。開源後資源會更豐富。
CNN的應用:影象識別與檢索、人臉識別、性別/年齡/情緒識別、物體檢測、場景判定與危險監控等。
More
深度學習—CNN與常用框架 視訊及PPT下載
CNN筆記:通俗理解卷積神經網路
---------------------
作者:心瀟瑤
來源:CSDN
原文:https://blog.csdn.net/joycewyj/article/details/51792477?utm_source=copy
版權宣告:本文為博主原創文章,轉載請附上博文連結!