iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0
AI & Data

30 天學會深度學習和 Tensorflow系列 第 9

08. 深度學習甜點系列:一個瑞士卷積網路(CNN)

  • 分享至 

  • xImage
  •  

類神經網路學門中,除了感知器所用的人工神經元,另外一個由生理現象引發靈感的網路結構,則是 1989 年由 Yann LeCun 所提出 Convolution Neural Network(CNN)。該網路的靈感來自於靈長類的視覺成像的原理,在腦後方的視覺皮質,在接受光線刺激時,並非所有的視覺細胞都會激發,相對的,每一視覺細胞都只負責接受區域性的訊息。

區域性的連接(Local Connectivity),在生理上被稱為 receptive fields,是 CNN 中與傳統的 Feed Forward 類神經網路最大不同的地方。見下圖,可以看到兩種不同的類神經網路架構的分別。
feedforward and CNN
圖一:上圖為一個常見的三層 Feed Forward Network,而下圖則為由三層 convolution layer 構成的 convolution network。

可以看到比起 Feed Forward Network 來,CNN 的權重參數只負責一小部分的局部區域,而達到 sparse connection 的目的。這在電腦視覺中,一張影像動輒有幾千萬像素,傳統使用在 Feed Forward 網路的 fully-connected layer,會造成參數過載的情況,而使類神經網路訓練困難。

另外一個區域性的連接連接的好處,則是透過訊號處理中經常使用的 convolution operation,而達到萃取偏移不變的特徵。convolution operation,在訊號處理上,可以視為使用一個固定函式來作為訊號擷取的取樣訊號。這常見的函式通常是一個固定週期的 step function,持續對欲取樣的 1D 訊號中擷取訊號。

雖然 convolution operation 最初是應用在 1D 的訊號上,但 CNN 所處理的輸入是影像,若是灰階影像則為 2D。但和 1D 訊號中使用同一取樣函式有異曲同工之妙,為了能對影像進行 2D 的 convolution operation,會使用 parameter sharing 的方式來偵測影像在不同位置中具有相同特性的特徵。

1D convolution in signal processing
圖二:圖解如何用 step function 對 1D 的訊號 apply convolution operation 作取樣。

但若為 RGB 影像,CNN 的輸入則為 3D,因為除了影像的長度和寬度外,尚有 RGB 三個 Channel 形成的深度(depth)。此時,所使用的 convolution operation 仍舊是 2D,而原因應當是 RGB 的深度,可以看做物件在成像時不同的 raw 特徵,所以在進行 convolution operation 的時候會透過如 fully-connected layer 的方法,將 raw channel 映射到更高維的特徵表現中,那也就是為什麼,CNN 的架構總是如下圖會逐漸加深深度,其原理就和 Feed Forward 網路在上層使用更多的神經元以捕捉更微細或抽象的特徵。

convolution network architecture - convolution layer
圖三:上方為一個常見的 convolution network 架構的示意圖,下方則為一個 convolution layer。對於一個convolution layer 經常的需要 apply 不同的 filter 而萃取不同的訓練實例中的部分特徵,而造成 output volume 逐漸變深的情況。

另外一個在 CNN 架構中常見的則是 pooling layer。Convolution operation 負責 scan 影像,以萃取影像中局部的特徵,然而真正的偏移不變性,仍需要透過 pooling 的方式對萃取出的局部特徵作 reduction,而得到影像不同位置中共享有的特徵,常使用的 reduction function 有 max 或 average。

在 pooling layer 中,除了對經過 convolution operation 萃取出的 feature map 或 output volume 取出局部特徵中最具代表性的單一特徵值,而具有如訊號處理中抑制雜訊的作用,同時也進行 dimensionality reduction ,所以 pooling layer 的輸出,其截面必定會縮小,而深度則維持不變。

convolution network architecture - pool layer
圖四:上方為一個常見的 convolution network 架構的示意圖,下方左則為一個 max pooling layer,下方右則為一個 average pooling layer。pooling layer 並不會對 output volumen 的深度有任何影響,但會縮小 output volume 的截面積。

Convolution layer 的實作細節:

  1. padding: 由於 apply convolution operation 會造成輸出的 feature map 或 output volume 縮小,以及資訊損失(因為在影像邊緣的部分,通常只會被 scan 一次,而不像其他位於影像中間的像素,可以被 scan 多次),所以在 apply convolution operation 前對上一層輸入作 padding 可以維持輸出的 feature map 具有相同的維度,也可保證在邊緣的像素資訊能獲得相同的權重。這種 padding 的方式被稱為 "same" padding,在 tensorflow 中,提供了另一種 “valid” padding,但這種 padding 模式其實就是沒有任何的 padding。

different padding
圖五:對原影像做 padding 的示意圖,在這裡是 "same" 的 padding 模式。圖下方,則是一個簡單的 3x3 灰階影像(下方左),經過對上下左右 padding 兩個 0 值之後的變為 7x7 的灰階影像。

  1. convolution: 就如同上所言, convolution operation 主要是來自於訊號處理,透過使用一個固定長度的 sliding window 而對輸入訊號或影像做局部特徵擷取。下圖,即是一個簡單的圖示,對如何進行 2D convolution 做圖解說明。

applying filter with single channel
圖六:對一張 5x5 的影像用 3x3 filter 做 convolution,原影像不做 padding 的話,經過 convolution 得出的最後 feature map 會縮小至 3x3,如圖所示。

這就是今天關於卷機網路的閃電秀,那麼卷機網路和瑞士卷倒底有沒有關係呢?嗯,除了只有愈捲愈長的共同點,單純就是筆者貪吃甜食而已。

圖片來源:

  1. 圖一來自於史坦佛大學 cs231n 關於卷機網路的課程摘要
  2. 圖二來自 Understanding Convolutions
  3. 其餘的圖片都來自於吳恩達教授於 Coursera 線上教學平台 Deep Learning Course #4 Convolution Neural Network

上一篇
07. 鐵達尼預測內幕總結
下一篇
09. 深度學習甜點系列:愈堆愈高的 ResNet
系列文
30 天學會深度學習和 Tensorflow30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言