iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
AI & Data

30天搞懂機器學習是否搞錯了什麼系列 第 21

【Day 21】卷積神經網路(Convolutional Neural Network, CNN)(上)

Why CNN for Image?

我們在訓練Neural Network的時候,我們會期待在這個Network裡面的每一個Neuron就代表一個最基本的Classifier,而我們使用一般的全連接前饋網路(Fully connected feedforward network)來做影像處理,會需要太多的參數。

所以CNN在做的事情是,簡化Neural Network的架構,在一開始就把Network裡面一些用不到的weight拿掉。

Property 1

假設第一層的hidden layer的Neuron要做的事情就是偵測某一種pattern,而大部分的pattern其實是比整張圖片還要小,所以它其實只要看圖片的一小部分,並不用看整張圖片。舉例來說,我們現在有一張鳥的圖片,第一層的hidden layer的某一個Neuron的工作是要偵測有沒有鳥嘴的存在,而我們只要給它看紅色框框圈出來的區域,它就可以知道它是不是一個鳥嘴。
所以每個Neuron只要連接到一個小塊的區域就好,它不需要連接到整張完整的圖片。

Property 2

而同樣的pattern在圖片中,它可能會出現在圖片不同的部分,但是它們代表的是同樣的涵義,也可以用同樣的參數,既然兩個Neuron做的事情是一樣的,我們就可以讓它們用一組參數,以減少需要參數的量。

Property 3

那我們知道可以對圖片做Subsampling,也就是把圖片的奇數行、偶數列的pixel拿掉,但它其實不會影響人對這張圖片的理解,所以做Subsampling對影響辨識來說沒有太大的影響,這樣我們就可以用這樣的概念來達到減少參數的目的。

Convolutional Neural Network(CNN)

首先輸入一張圖片,這張圖片通過一個Convolution的layer,接著做Max pooling,然後再做一次Convolution,接著再做一次Max pooling,這樣子的循環可以重複很多次,做完之後,接著就要做Flatten,然後把輸出丟到一般的全連接網路裡面,得到最後影像辨識的結果。

而我們剛剛提到的Property 1, 2就是用Convolution的layer來處理,Property 3則是用Max pooling來處理。

CNN - Convolution

假設我們的輸入是6x6的黑白圖片,1代表有塗到墨水,0代表沒有塗到墨水。而在Convolution layer裡面有很多組Filter,每一個Filter都是一個3x3的Matrix,這個Matrix裡面的值就是Network的參數,是根據訓練資料學出來的。

如果今天Filter是一個3x3的Matrix,就代表它在偵測一個3x3的pattern,也就考慮了Property 1。

運算的過程是,首先你有一個Filter是3x3的Matrix,然後把這個Filter放在圖片的左上角,接著把這兩個矩陣做內積。

算出來之後,就挪動一下Filter的位置,這個挪動的距離我們稱之為Stride,我們必須事先決定好要挪多少,假設我們的Stride是1,就去計算每挪動一次的兩個矩陣的內積。

最後原本6x6的Matrix,經過這個Convolution process,就會得到一個4x4的Matrix。

下圖中Filter斜對角的值是1,1,1,所以它的工作就是偵測有沒有也是左上到右下的1,1,1出現在圖片裡面,如果有,Convolution就會得到最大值,也就考慮了Property 2。

接著繼續用下一個Filter做Convolution,最後得到的很多4x4的Matrix,我們稱之為Feature Map

CNN - Colorful image

剛剛討論的都是黑白的照片,如果今天是彩色的照片要做的事情就會更多。首先彩色的圖片是RGB組成的,所以一個彩色的圖片就是好幾個Matrix疊在一起,就是一個立方體。如果今天要處理彩色的圖片,你的Filter也會是一個立方體,而在做Convolution的時候,就是一樣把Filter的這些值,跟圖片裡面的值做內積。

Convolution vs Fully Connected

事實上Convolution就是一個Neural Network,它就是全連接層把一些weight拿掉而已,而Convolution的輸出,其實就是一個hidden layer的Neuron的輸出。

也就是說,假設我們今天Convolution做完內積的第一個值是3,這件事等同於,我們把6x6的圖片拉直,然後有一個Neuron的輸出是3,就代表它的weight只連接到1,2,3,7,8,9,13,14,15這些pixel而已,這樣就達到了減少參數的效果。

在往下算就會發現做Convolution的時候,我們會把每一個Neuron前面連接的weight減少,並且會強迫他們共用同一組weight。


參考資料

李宏毅老師 - ML Lecture 10


上一篇
【Day 20】深度學習(Deep Learning)--- Tip(五)
下一篇
【Day 22】卷積神經網路(Convolutional Neural Network, CNN)(下)
系列文
30天搞懂機器學習是否搞錯了什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言