卷積神經網路-1

阿蘇爾發表於2018-04-19

本文來自於網易雲課堂

計算機視覺

多虧了深度學習,計算機視覺得到飛速發展。計算機視覺可以幫助車輛識別行人,訊號燈等並幫助汽車做出響應。計算機還成功應用在人臉識別中,甚至還催生了一種新的藝術形式。
這裡寫圖片描述
在應用計算機視覺時要面臨一個挑戰就是資料的輸入可能非常大。以前的圖片是64*64*3,這個資料量為12288,而如果你的圖片是1000*1000*3=3百萬個資料量,那麼神經網路的輸入層的維度就有300萬,如果第一層有1000個節點,那麼W[1] = (1000,3m),引數共有30億個,這是一個非常大的數字。在引數如此大的情況下,難以獲取足夠的資料來防止神經網路發生過擬合和競爭需求。而這麼大的神經網路需要的記憶體也讓人無法接受,但是你也不想只處理小圖片,為此你需要進行卷積運算。
這裡寫圖片描述

邊緣檢測示例

卷積運算是卷積神經網路最基本的組成部分。通過邊緣檢測來演示一下卷積是如何運算的。
這裡寫圖片描述
對於一個6*6*1的灰度影像,為了檢測影像中的垂直邊緣,你可以構造一個3*3的矩陣,在神經網路的專用術語,它被稱為過濾器(filter)或核(kernal)。卷積(convolution)運算用*表示。
這裡寫圖片描述
為什麼卷積運算可以用來邊緣檢測呢?在下圖中,卷積結果中的中間白色部分就表示垂直邊緣。當然這裡的維度不太正確,因為檢測到的邊緣太粗了。這是因為這個例子中圖片太小了。如果使用1000*1000的圖片,那麼效果就會好的多。在這個例子中,輸出影像的中間白色部分表示原圖中中間有明顯的垂直邊緣。從中得到的啟發是,因為我們使用的是3*3的矩陣,所以垂直邊緣是3*3的區域,左邊是明亮的畫素,中間不需要考慮,右邊是深色畫素。在左邊圖中,明亮的畫素在左邊(10),灰色畫素在右邊(0),那麼這個就被認為是一個邊界。
這裡寫圖片描述

更多檢測邊緣內容

這裡寫圖片描述
對於3*3的矩陣,現在只使用了一種組合,但是實際上有很多種。比如說sobel濾波器,它的優點在於增加了中間一行元素的權重,也就是處在影像中央的畫素點,這使得結果的魯棒性更高一些。但實際上,你可以不使用它們的數字組合而是把他們當做引數讓神經網路自己去學習。得到的濾波器對資料的捕捉能力甚至會超過任何之前手寫的濾波器。
這種將9個數字都當做引數的思想,已經成為計算機視覺中最有效的思想之一。
這裡寫圖片描述

padding

在卷積神經網路中,一個基本的卷積操作就是padding。在之前,一個6*6的矩陣與3*3的矩陣卷積得到一個4*4的矩陣,這是因為在6*6中只有4*4個可能的位置。這背後的數學解釋是,如果我們有一個n*n的影像,和一個f*f的過濾器,那麼卷積結果就是(n-f+1)(n-f+1)。這樣有2個缺點,第一是每次卷積影像都會縮小。多做幾次可能會縮小到1*1。第二個缺點是角落上的畫素只使用了一次。這意味著丟失了很多資訊。為了解決這些問題,在進行卷積操作之前可以先填充(padding)這幅影像。在這個例子中,你就可以填充一層畫素,那麼6*6就會填充為8*8,得到的輸出就是6*6.習慣上填充0.如果用p代表填充的數量,那麼輸出就是(n+2p-f+1)(n+2p-f+1)。當然你也可以選擇填充2層
置於選擇多少層,通常有2個選擇,分別叫做valid卷積和same卷積。valid卷積意味著不填充。same卷積意味著填充後的輸出層和輸入大小是一致的。那麼p = (f-1)/2,只要f是奇數,那麼只要確定p就能得到一樣的輸出。f很少有偶數的情況,因為這樣的話你只能選擇不對稱填充,另外如果是奇數填充就會有一箇中心點,這個中心點會很方便的指出過濾器的位置。

卷積步長

這裡寫圖片描述
卷積的步長是另一個基本的卷積操作。如果將卷積步長設定為stride = 2,那麼一個7*7的輸入卷積一個3*3的過濾器就得到了一個3*3的輸出。令padding = p,stride = s,那麼對於n*n的輸入,f*f的過濾器有輸出為(n+2pf2+1)

(\frac{n+2p-f}{2}+1)
*(n+2pf2+1)
(\frac{n+2p-f}{2}+1)
。如果商不是整數,那我們就向下取整n+2pf2+1
\lfloor \frac{n+2p-f}{2}+1 \rfloor
。這個意思就是如果籃框完全在輸入內部則進行計算,如果出去邊界則不進行計算。
這裡寫圖片描述

關於互相關和卷積的技術性建議。這不會影響到你構建卷積神經網路的方式但取決於你讀的是數學教材還是訊號處理教材在不同的教材裡符號可能不一致。如果你看的是一本典型的數學教科書,那麼卷積的定義就是元素乘積求和之前還有一個步驟就是你將過濾器水平和垂直翻轉。所以我們之前所做的卷積運算跳過了這個映象操作。從技術上講,我們實際做的是互相關操作而不是卷積。但是在深度學習文獻中,按照慣例,我們將這稱為卷積操作。所以總結說來,按照機器學習的慣例我們通常不翻轉操作,從技術上講這種操作稱為互相關更好。但是大部分文獻都稱為卷積,所以我們也遵從這個約定。事實上,在訊號處理中,卷積的定義包含翻轉,使得(A*B)C=A(B*C),但對於神經網路來說這個性質真的不重要,因此省略了雙重映象操作,就簡化了程式碼,並使神經網路也能正常工作。

下一節介紹立體卷積。

卷積為何有效

這裡寫圖片描述
這裡寫圖片描述
過濾器也為 3個通道,那麼如果我們將紅色通道開啟,而其他通道全為0,那麼這個過濾器只對紅色起作用,如果你不關心哪個顏色,那麼你就可以對每個通道都開啟。按照計算機視覺的慣例,當你的輸入有特定的高,寬和通道數時,你的過濾器可以有不同的高寬但必須要有相同的通道數。
這裡寫圖片描述
如果我們不僅僅想檢測垂直邊緣還想同時檢測水平邊緣或者說如果想同時利用多個過濾器會怎麼樣。只需要把不同過濾器的輸出堆疊起來就可以了。用公式來表示的話就是n×n×ncf×f×nc=(n+2pf2+1)×(n+2pf2+1)×nc

n\times n \times n_c * f \times f \times n_c = (\frac{n+2p-f}{2}+1)\times (\frac{n+2p-f}{2}+1) \times n_c^{'}
,其中nc
n_c是通道數
nC
n_C^{'}是過濾器數

相關文章