為什么使用卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)最初的設(shè)計(jì)是為了解決圖像數(shù)據(jù)預(yù)處理的要求,避免復(fù)雜的特征過程。因?yàn)槠鋵?duì)于圖像的縮放,評(píng)議,旋轉(zhuǎn)等畸變有著不變性,所以有著很強(qiáng)的泛化性。它最大的特點(diǎn)是權(quán)重共享,這大大減少來參數(shù)量,簡化網(wǎng)絡(luò)結(jié)構(gòu),防止來過擬合。
卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)成

卷積神經(jīng)網(wǎng)絡(luò)一般包括以下幾個(gè)部分:
1. 輸入層
即輸入的圖片等數(shù)據(jù)。我們以圖片為例,輸入層為一個(gè)32 * 32 * 3的矩陣。3代表RGB模式下,一個(gè)圖片有三個(gè)原色圖疊合而成。
2. 卷積層
我們用來做卷積計(jì)算的部分稱為過濾器(filter)或卷積核(kernel)。它的尺寸由我們自己指定,通常為3 * 3,5 * 5,深度不限。
什么是卷積計(jì)算呢?
我們?cè)谳斎刖仃囍羞x取和卷積核一樣大小的數(shù)據(jù),進(jìn)行卷積計(jì)算,即求對(duì)應(yīng)位置的乘積和。這個(gè)乘積和即為卷積計(jì)算的輸出值。

以此為例,我們?cè)? * 5原圖上選取一個(gè)3 * 3的區(qū)域,每次移動(dòng)一格,那么輸出就是3 * 3的矩陣。這個(gè)一格,就是步長。如果我們把步長設(shè)為2,那么輸出就是2 * 2的矩陣。
每一個(gè)卷積層中卷積核的參數(shù)都是一樣的,這就巨幅減少了網(wǎng)絡(luò)結(jié)構(gòu)中的參數(shù)量。假設(shè)我們卷積核的尺寸為5 * 5,深度為16(可以理解為16個(gè)不同的5 * 5的而為過濾器),那么這一層的參數(shù)就是5 * 5 * 3 * 16 + 16 = 1216個(gè)。倘若我們使用全連接神經(jīng)網(wǎng)絡(luò),一個(gè)32 * 32 * 3的輸入,在第一層有200個(gè)隱藏節(jié)點(diǎn),那么就需要32 * 32 * 3 * 200 + 200 = 614600個(gè)參數(shù)。
3. 池化層
池化層用于卷積層中間,可以有效的縮減矩陣的尺寸,進(jìn)一步減少參數(shù)量,加快運(yùn)算并防止過擬合。

池化層的使用類似于卷積層,它規(guī)定一個(gè)窗口大小,比如2 * 2, 然后將輸入中每2 * 2的區(qū)域用一個(gè)值來代替。比較常用的是最大化池和平均值池。
最大化池是指取每個(gè)目標(biāo)區(qū)域中的最大值代替。下圖是一個(gè)變成為2,步長為2的最大化池,它取每一個(gè)2 * 2區(qū)域中最大的值作為這個(gè)目標(biāo)區(qū)域的代替:

平均池就是顧名思義,用平均值代替。

4. 全連接層
經(jīng)過若干層卷積和池化之后,我們需要用1-2層全連接層來進(jìn)行最后的分類。這里的全連接就跟全連接神經(jīng)網(wǎng)絡(luò)的全連接步驟一樣。
5. 分類層
分類層也是和我們以前的步驟一樣。
BONUS
在實(shí)際操作中我們也會(huì)使用以下幾個(gè)技術(shù):
- ReLU激活函數(shù)我們一般會(huì)在卷積層之后,池化層之前使用,用以對(duì)數(shù)據(jù)進(jìn)行去線性化
- LRN, 即局部響應(yīng)歸一化。它對(duì)局部神經(jīng)元的活動(dòng)創(chuàng)建競爭機(jī)制,使得其中響應(yīng)比較大的值變得相對(duì)更大,并抑制其他反饋較小的神經(jīng)元,增強(qiáng)了模型的泛化能力。 tensorflow官方文檔中的tf.nn.lrn函數(shù)給出了局部響應(yīng)歸一化的論文出處 :http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks
- Dropout層,即隨機(jī)忽略一部分神經(jīng)元,以避免模型過擬合
下面幾章我們會(huì)通過分析幾款經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)來理解卷積神經(jīng)網(wǎng)絡(luò)的強(qiáng)大應(yīng)用。