1. 程式人生 > >什麼是卷積和池化

什麼是卷積和池化

在傳統的神經網路中,比如多層感知機(MLP),其輸入通常是一個特徵向量,需要人工設計特徵,然後將這些特徵計算的值組成特徵向量,在過去幾十年的經驗來看,人工找到的特徵並不是怎麼好用,有時多了,有時少了,有時選擇的特徵根本就不起作用(真正起作用的特徵在浩瀚的未知裡面)。這就是為什麼在過去卷積神經網路一直被SVM等完虐的原因。

如果有人說,任何特徵都是從影象中提取的,那如果把整副影象作為特徵來訓練神經網路不就行了,那肯定不會有任何資訊丟失!那先不說一幅影象有多少冗餘資訊,單說著資訊量就超級多。。。

假如有一幅1000*1000的影象,如果把整幅影象作為向量,則向量的長度為100000010^6)。在假如隱含層神經元的個數和輸入一樣,也是

1000000;那麼,輸入層到隱含層的引數資料量有10^12,什麼樣的機器能訓練這樣的網路呢。所以,我們還得降低維數,同時得以整幅影象為輸入(人類實在找不到好的特徵了)。於是,牛逼的卷積來了。接下來看看卷積都幹了些啥。

  1. 什麼叫卷積?

卷積層是用一個固定大小的矩形區去席捲原始資料,將原始資料分成一個個和卷積核大小相同的小塊,然後將這些小塊和卷積核相乘輸出一個卷積值(注意這裡是一個單獨的值,不再是矩陣了)。

卷積的本質就是用卷積核的引數來提取原始資料的特徵,通過矩陣點乘的運算,提取出和卷積核特徵一致的值,如果卷積層有多個卷積核,則神經網路會自動學習卷積核的引數值,使得每個卷積核代表一個特徵。

卷積首先要定義一個卷積核,卷積核通常是一個正方形,長寬就是卷積核的尺寸,比如

(2,2)的卷積核,表示用:

      [w1,w2

      w3,w4]

大小的卷積核來對原始資料進行卷積。卷積核的權重引數w1-w4就是該卷積核的特徵值,卷積結果是輸入資料

首先我們需要知道什麼是卷積計算,它其實是一種簡單數學運算,有兩個步驟:一個是矩陣內積乘法,另一個是將內積乘法的結果進行全加。

1)矩陣內積乘法

矩陣的內積乘法非常簡單,就是把兩個相乘的矩陣,相同位置的元素進行乘法運算,這個時候會得到一個新的矩陣(在這裡我們需要注意一下,卷積是在作矩陣內積乘法,而不是矩陣乘法)。

2)全加計算

這個新矩陣的全部值會進行相加,然後會得到一個值,這個值才是卷積運算的結果。

2、特徵影象與卷積核

對於實際的卷積過程中,它一方面有輸入影象,這些影象被稱作是特徵影象(注:卷積神經網路中,原始的輸入是真實的影象,經過卷積後會生成特徵影象),另一方面還需要有卷積核。

卷積核的值是人為設定的,它是可以調節的,在實際的卷積神經網路中,卷積核的值就是網路的引數。對卷積網路進行訓練,就是在調節這些卷積核心的引數。在實際中一般不會用太大的卷積核,常見的卷積核大小有3*35*51*1的大小。

特徵影象和卷積核都是以矩陣的形式存在,因此它們可以進行卷積計算。卷積計算的輸入不僅可以是影象,還可以是其它的二維矩陣資訊(當然還有一維和三維的卷積,這裡就不多介紹了)。卷積核首先會對特徵影象的第一個區域進行卷積運算,這個卷積計算的結果,會作為輸出特徵影象上的一個點,如下圖所示。

上圖中在卷積之後,將畫素圖中相連的4個畫素提取成了一個畫素,通俗一點什麼意思?讀者可以好好體會一下:將一個小區域的影象中的特徵提取成一個值來表示。

 

3、什麼是池化

池化(Pooling):也稱為欠取樣或下采樣。主要用於特徵降維,壓縮資料和引數的數量,減小過擬合,同時提高模型的容錯性。比如以(2,2)作為一個池化單位,其含義就是每次將2*2=4個特徵值根據池化演算法合併成一個特徵值,常用的池化演算法有以下幾種:

  1. 平均值:取4個特徵值的平均值作為新的特徵值。
  2. 最大值:取4個特徵值中最大值作為新的特徵值。
  3. 最小值:取4個特徵值中最小值作為新的特徵值。


https://images2018.cnblogs.com/blog/1226410/201809/1226410-20180910194605414-874059268.png 
通過池化層,使得原本4*4的特徵圖壓縮成了2*2,從而降低了特徵維度。

最後小結一下:

(1)卷積是從一小塊影象區域中提取出特徵值來表示這一小塊區域的內在特徵(或者說內在含義)。

(2)池化是將相臨的多個特徵用一個特徵來代替,壓縮特徵維度。

卷積和池化是影象人工智慧應用場景中繞不過去的兩種基本處理過程,所以我們還是先了解他倆的內在含義吧。