1. 程式人生 > >卷積神經網路之卷積計算、作用與思想

卷積神經網路之卷積計算、作用與思想

部落格:blog.shinelee.me | 部落格園 | CSDN

卷積運算與相關運算

在計算機視覺領域,卷積核、濾波器通常為較小尺寸的矩陣,比如\(3\times3\)\(5\times5\)等,數字影象是相對較大尺寸的2維(多維)矩陣(張量),影象卷積運算與相關運算的關係如下圖所示(圖片來自連結),其中\(F\)為濾波器,\(X\)為影象,\(O\)為結果。

convolution and correlation

相關是將濾波器在影象上滑動,對應位置相乘求和;卷積則先將濾波器旋轉180度(行列均對稱翻轉),然後使用旋轉後的濾波器進行相關運算。兩者在計算方式上可以等價,有時為了簡化,雖然名義上說是“卷積”,但實際實現時是相關。

在二維影象上,使用Sobel Gx濾波器進行卷積如下圖所示(圖片來自

連結),
Sobel Gx convolution

當輸入為多維影象(或者多通道特徵圖)時,多通道卷積如下圖所示(圖片來自連結),圖中輸入影象尺寸為\(6\times6\),通道數為3,卷積核有2個,每個尺寸為\(3\times3\),通道數為3(與輸入影象通道數一致),卷積時,仍是以滑動視窗的形式,從左至右,從上至下,3個通道的對應位置相乘求和,輸出結果為2張\(4\times4\)的特徵圖。一般地,當輸入為\(m\times n \times c\)時,每個卷積核為\(k\times k \times c\),即每個卷積核的通道數應與輸入的通道數相同(因為多通道需同時卷積),輸出的特徵圖數量與卷積核數量一致,這裡不再贅述。
RGB convolution

理解卷積

這裡提供兩個理解卷積的角度:

  1. 從函式(或者說對映、變換)的角度理解。 卷積過程是在影象每個位置進行線性變換對映成新值的過程,將卷積核看成權重,若拉成向量記為\(w\),影象對應位置的畫素拉成向量記為\(x\),則該位置卷積結果為\(y = w'x+b\),即向量內積+偏置,將\(x\)變換為\(y\)從這個角度看,多層卷積是在進行逐層對映,整體構成一個複雜函式,訓練過程是在學習每個區域性對映所需的權重,訓練過程可以看成是函式擬合的過程。

  2. 從模版匹配的角度理解。 前面我們已經知道,卷積與相關在計算上可以等價,相關運算常用模板匹配即認為卷積核定義了某種模式,卷積(相關)運算是在計算每個位置與該模式的相似程度,或者說每個位置具有該模式的分量有多少,當前位置與該模式越像,響應越強

    。下圖為影象層面的模板匹配(圖片來自連結),右圖為響應圖,可見狗頭位置的響應最大。當然,也可以在特徵層面進行模版匹配,卷積神經網路中的隱藏層即可以看成是在特徵層面進行模板匹配。這時,響應圖中每個元素代表的是當前位置與該模式的相似程度,單看響應圖其實看不出什麼,可以想像每個位置都有個“狗頭”,越亮的地方越像“狗頭”,若給定模板甚至可以通過反捲積的方式將影象復原出來。這裡多說一句,我們真的是想把影象復原出來嗎,我們希望的是在影象中找到需要的模式,若是通過一個非線性函式,將響應圖中完全不像“狗頭”的地方清零,而將像“狗頭”的地方保留,然後再將影象復原,發現復原圖中只有一個“狗頭”,這是不是更美好——因為我們明確了影象中的模式,而減少了其他資訊的干擾!

template matching

本篇文章將傾向於從第2個角度來理解卷積神經網路。

卷積能抽取特徵

上一節中提到了“狗頭”模板,如果把卷積核定為“狗頭”模板會有什麼問題?將缺乏靈活性,或者說泛化能力不夠,因為狗的姿態變化是多樣的,如果直接把卷積核定義得這麼“死板”,狗換個姿勢或者換一條狗就不認得了。

那麼,為了適應目標的多樣性,卷積核該怎麼設計呢?這個問題,我們在下一節回答,這裡先看看人工定義的卷積核是如何提取特徵的。

以下圖sobel運算元為例(圖片來自連結),對影象進行卷積,獲得影象的邊緣響應圖,當我們看到響應圖時,要知道圖中每個位置的響應代表著這個位置在原圖中有個形似sobel運算元的邊緣,資訊被壓縮了,響應圖裡的一個數值其實代表了這個位置有個相應強度的sobel邊緣模式,我們通過卷積抽取到了特徵。
sobel operator

人工能定義邊緣這樣的簡單卷積核來描述簡單模式,但是更復雜的模式怎麼辦,像人臉、貓、狗等等,儘管每個狗長得都不一樣,但是我們即使從未見過某種狗,當看到了也會知道那是狗,所以對於狗這個群體一定是存在著某種共有的模式,讓我們人能夠辨認出來,但問題是這種模式如何定義?在上一節,我們知道“死板”地定義個狗的模板是不行的,其缺乏泛化能力,我們該怎麼辦?

通過多層卷積,來將簡單模式組合成複雜模式,通過這種靈活的組合來保證具有足夠的表達能力和泛化能力。

多層卷積能抽取複雜特徵

為了直觀,我們先上圖,圖片出自論文《Visualizing and Understanding Convolutional Networks》,作者可視化了卷積神經網路每層學到的特徵,當輸入給定圖片時,每層學到的特徵如下圖所示,注意,我們上面提到過每層得到的特徵圖直接觀察是看不出什麼的,因為其中每個位置都代表了某種模式,需要在這個位置將模式復現出來才能形成人能夠理解的影象,作者在文中將這個復現過程稱之為deconvolution,詳細檢視論文(前文已經有所暗示,讀者可以先獨自思考下復現會怎麼做)。

Visualization of features in a fully trained model

從圖中可知,淺層layer學到的特徵為簡單的邊緣、角點、紋理、幾何形狀、表面等,到深層layer學到的特徵則更為複雜抽象,為狗、人臉、鍵盤等等,有幾點需要注意:

  1. 卷積神經網路每層的卷積核權重是由資料驅動學習得來,不是人工設計的,人工只能勝任簡單卷積核的設計,像邊緣,但在邊緣響應圖之上設計出能描述複雜模式的卷積核則十分困難。

  2. 資料驅動卷積神經網路逐層學到由簡單到複雜的特徵(模式),複雜模式是由簡單模式組合而成,比如Layer4的狗臉是由Layer3的幾何圖形組合而成,Layer3的幾何圖形是由Layer2的紋理組合而成,Layer2的紋理是由Layer1的邊緣組合而成,從特徵圖上看的話,Layer4特徵圖上一個點代表Layer3某種幾何圖形或表面的組合,Layer3特徵圖上一個點代表Layer2某種紋理的組合,Layer2特徵圖上一個點代表Layer1某種邊緣的組合。

  3. 這種組合是一種相對靈活的方式在進行,不同的邊緣→不同紋理→不同幾何圖形和表面→不同的狗臉、不同的物體……,前面層模式的組合可以多種多樣,使後面層可以描述的模式也可以多種多樣,所以具有很強的表達能力,不是“死板”的模板,而是“靈活”的模板,泛化能力更強。

  4. 卷積神經網路真正使用時,還需要配合池化、啟用函式等,以獲得更強的表達能力,但模式蘊含在卷積核中,如果沒有非線性啟用函式,網路仍能學到模式,但表達能力會下降,由論文《Systematic evaluation of CNN advances on the ImageNet》,在ImageNet上,使用調整後的caffenet,不使用非線性啟用函式相比使用ReLU的效能會下降約8個百分點,如下圖所示。通過池化和啟用函式的配合,可以看到復現出的每層學到的特徵是非常單純的,狗、人、物體是清晰的,少有其他其他元素的干擾,可見網路學到了待檢測物件區別於其他物件的模式。

Top-1 accuracy gain over ReLU in the Ca eNet-128 architecture

總結

本文僅對卷積神經網路中的卷積計算、作用以及其中隱含的思想做了介紹,有些個人理解難免片面甚至錯誤,歡迎交流指正。

參考