1. 程式人生 > >七月演算法深度學習筆記4 -- CNN與常用框架

七月演算法深度學習筆記4 -- CNN與常用框架

這套筆記是跟著七月演算法五月深度學習班的學習而記錄的,主要記一下我再學習機器學習的時候一些概念比較模糊的地方,具體課程參考七月演算法官網:

http://www.julyedu.com/ 

神經網路的結構

神經網路包含輸入層,輸出層,及中間的隱層

神經網路在做說明事情呢?

從邏輯迴歸到神經元--感知機:


X1,X2為輸入,z為一個線性的輸出,當z<0時,函式逐漸趨近0,z>0函式趨近1.於是,得到一個分類器,對應到神經網路中,如右圖。於是,邏輯迴歸被畫成一個非常簡單的感知機,函式a叫做激勵函式。z通過函式a得到的是一個概率。

在網路中加入一個隱層,構成淺層神經網路

對於多個隱層的網路叫做深度神經網路


神經網路為什麼優於其他分類之器

LR或者SVM做的事情,是為了找到分介面,將不同類別分開,如:

這類演算法對特徵的要求很高,要求特徵具有較高的可區分性

但是,如果樣本分佈不規則,即特徵區度底,則傳統學習方法很難給出好的結果

如圖,由如下兩個類別需要分類


神經網路的做法:

找兩組引數,一組能做出上面一條直線,另一組做出下面的直線,如下圖2

將這個and操作作為與或門分類的最後一層,連線這兩層,則可以得到


從神經網路來看,加了一個隱層使得網路能完成上面的樣本可分。

神經網路可以對平面做任何切分:


神經網路不在乎樣本點在空間上如何分佈。網路自己學習特徵。但是如上圖,可能會出現過擬合,後文會提到神經網路會用dorpout控制過擬合。

2. CNN卷積神經網路

CNN與傳統神經網路的關係

1. 依舊保持了層級結構

2. 層的動能和形式發生了變化


DATA  : 資料輸入層

CONV:卷積層

RELU:激勵層

POOLING: 池化層

FC: 全連線層

2.1 資料輸入層 Input Layer

三種常用的影象資料處理方式

i:去均值:把輸入資料各個維度都中心化到0;

ii: 歸一化: 幅度歸一化到同樣的範圍

iii:PCA/白話 : PCA降維,白化是對資料每個特徵軸上的幅度歸一化

對於CNN,只對影象做去均值處理

取均值與歸一化


區相關與白化


2.2 卷積計算層/ CONV layer

區域性關聯。每個神經元看做一個filter

視窗(receptive field)滑動,filter對區域性資料計算,


輸入資料是個32*32*3結構,其中圓圈的個數表示該層神經元的個數。在CONV中,神經元就是濾波器。每個濾波器劃過影象得到該層的輸出。

conv由三個重要的引數:

深度/depth:神經元的個數
步長/stride:滑動過程中一次跳過幾個畫素
填充值/zero-padding: 在影象外圍加邊(補0)

舉例:


該網站由詳細的關於CNN的介紹。

上圖中,影象有三個通道,濾波器也由3個通道。

CONV作用:

 引數共享機制:對同一個神經元(filter)而言,無論劃到哪裡,權值是相同的。即假設每個神經元連線資料窗的權重是固定的

關於引數共享:

 固定每個神經元連線權重,可以看做模板,每個神經元只關注一個特性

 需要估算的權重個數減少: AlexNet 1億 => 3.5w

 一組固定的權重和不同視窗內資料做內積: 卷積

2.3 激勵層(ReLU)

把卷積層輸出結果做非線性對映


激勵函式作用:不是所有的值都需要向後傳播。

不同的激勵函式:

sigmoid:


Sigmoid函式的問題在於,求偏導數的過程中,靠近1或0的位置求導結果為0。使得引數的調整無法進行,收斂很慢。

Tanh:


ReLU

ReLU(The Rectified Linear Unit/修正線性單元)
收斂快,求梯度簡單,較脆弱


若輸出為負,則陷入飽和。

Leaky ReLU


指數線性單元ELU


Maxout

計算是線性的,不會飽和不會掛
多了好些引數
兩條直線拼接

實際經驗

不要用sigmoid
首先試RELU,因為快,但要小心點
如果2失效,請用Leaky ReLU或者Maxout
某些情況下tanh倒是有不錯的結果,但是很少

2.3 池化層 / Pooling layer

夾在連續的卷積層中間
壓縮資料和引數的量,減小過擬合

下采樣過程。

max pooling


Pooling 一般夾在若干卷積層之間,用於壓縮資料量,同時減少過擬合。

2.5 全連線層:FC layer

兩層之間所有神經元都有權重連線
通常全連線層在卷積神經網路尾部

全連線層的計算量非常大。

一般CNN的結構:

INPUT
[[CONV -> RELU]*N -> POOL?]*M
[FC -> RELU]*K
FC

3. CNN的訓練過程:


Loss function非凸

BP演算法利用鏈式求導法則,逐級相乘直到求解出dW和db。

CNN利用SGD/隨機梯度下降,迭代和更新W和b

4. fine-tuning

fine-tuning:使用已用於其他目標,預訓練好模型的權重或者部分權重,作為初始值開始訓練

原因:

自己從頭訓練卷積神經網路容易出現問題
fine-tuning能很快收斂到一個較理想的狀態

做法:

複用相同層的權重,新定義層取隨機權重初始值
調大新定義層的的學習率,調小複用層學習率

參考資料:

七月演算法:http://www.julyedu.com/

圖片來自於課程PPT