關於CNN(卷積神經網路)中一些基本要點的簡要敘述
現階段卷積神經網路基本是以下幾個過程 :
1.卷積(Convolution)
2.非線性處理(ReLu)
3.池化(Pooling)
4.全連線層進行分類(Fully Connected)
假設輸入影象可以是狗 ,貓,船,鳥,當我們輸入一張船的影象的時候,卷積神經網路會分配一個最高的概率(這裡是0.94)給到船,同時在輸出層(output prediction)中,所有概率之和為1。
一:卷積
每張影象本質上都可以表示為畫素值的矩陣,而做卷積則是根據輸入影象的畫素矩陣,利用多種不同的過濾器(也叫卷積核,也是一種畫素矩陣)在輸入影象的畫素矩陣上進行滑動計算得到的輸出的特徵圖。
可以通過下圖理解,輸入影象經過了兩種不同的過濾器的滑動計算生成了兩種不同的特徵圖,cnn中會對輸出的不同特徵影象進行學習:
那麼卷積的計算過程是怎麼樣的呢?
假設輸入影象的畫素矩陣是:
過濾器(卷積核)的矩陣:
卷積的過程則是:
輸出的特徵影象(Convolved Feature)的一個元素4的是這樣來的,當卷積核在最開始的位置時是這樣的,那麼我們把卷積核與輸入影象的畫素矩陣對應的元素 互相 進行相乘並求和,即:1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1=4,依次類推即可得到我們卷積後的特徵影象。一般來說為了獲得更多的特徵影象,會用到多個不同卷積核,所以往往一張輸入影象在經過卷積後會產生多個輸出的特徵影象 (記住這句話,這是卷積與接下來要講到的池化層的區分)
二.池化
池化常常是為了保持特徵影象的抗扭曲性與不變性的情況下,減少輸出的維度大小。即是在保留輸出的特徵影象的大部分資訊的同時降低輸出影象的大小,對特徵影象額行空間維度的優化降低,控制過擬合。
池化層一般用最大值池化層,如下圖所示,我們定義一個2X2的視窗,在特徵影象中進行步長(stride)為2滑動,並在每次滑動後從視窗內的特徵元素中取最大的元素。除了最大值,我們還可取平均值。
這樣的操作後就大大的降低了特徵影象的維度大小。
池化操作是用於每個輸出的特徵影象中的,所以有3張特徵圖,那麼在池化操作後仍然輸出3張降維後的特徵圖(注意卷積過程是一張輸出影象經過卷積後生成多個特徵影象)。
下圖展示了特徵影象經過池化操作後的效果
三.全連線層
卷積和池化是為了把輸入影象的高階特徵給表現出來,全連線層的目的是利用這些高階特徵通過啟用函式(如softmax)等分類器對最初輸入的影象進行類別的分類,如下圖所示。
本人也是深度學習的新學生,本文是對於ujjwalkarn作者的文章的理解,如有誤多謝指出。