CNN
前言
在「影像辨識」任務時我們常常聽到卷積神經網路(Convolutional Neural Network, CNN) ,但「卷積」是什麼?為什麼不用 MLP 處理影像辨識的問題就好了呢?然而事實上 CNN 是深度學習中一條非常重要的分支,電腦視覺領域便是因為它的關係在近幾年有了許多重大的進展,就讓我們來看看它到底是何方神聖吧!
Why CNN?
- 圖片的特性:圖片重要的是物體本身的局部資訊,這些 pattern 可能由許多個鄰近像素構成,直接將圖片攤平會破壞這樣的 pattern 結構。
- 全連接層的參數爆炸:彩色圖片包含 RGB 三個 channel 或是高像素的圖片,導致計算成本增加同時也可能引發 overfitting。
CNN 加入了…
Receptive Field
使用 MLP 實作影像辨識任務時,圖片往往會事先攤平,可能導致重要的局部資訊遺失,假設下圖中 0、1、28、29 四個像素組成了一個重要的特徵(e.g. 鳥喙、貓耳),卻因為被打散而無法反映特徵資訊:
在 CNN 中 Receptive Field 的概念就是一次只看一小區塊,透過橫移、下移的方式來看完整張圖片,這樣一來就能夠保留空間結構,並從結構中萃取出特徵,方法如下:
kernel size:Receptive Field的大小
stride:每次移動的步距
padding:Receptive Field 超出範圍時的補值
如下圖,當 Receptive Field 遍歷到紅色區塊時,能夠提取出鳥喙的特徵:
Parameter Sharing
在全連接層 ( Fully Connected layer )每一條連線都是一組權重,如下圖,輸入 2 個資訊,並且第一層全連接層以 3 個神經元連接,會記錄 2*3 = 6 個權重(不考慮 Bias 的情況下)。一旦輸入的是一張 1200 * 800 大小且彩色的圖片,同樣以 3 個神經元連接,就有 1200 * 800* 3 (RGB) * 3 = 8640000 的參數量,計算成本飛速增加。
透過權重共享的方式減少參數。Receptive Field 在滑動的過程中可能出現相同的 pattern,意思是我們能夠使用同一組權重來偵測這樣的 pattern,也就是所謂的 filter。
李弘毅老師將權重共享的概念以全連接層的方式呈現:
如下圖,在兩張圖片的不同區塊中,都能夠提取出鳥喙的特徵:
CNN 如何運作?
CNN 由卷積層 ( Convolution layer )、池化層 (Pooling layer) 以及最後一個全連接層 ( Fully Connected layer )所搭建而成,如下圖所示:
卷積層 ( Convolution layer )是 CNN 的核心重點,Receptive Field & Parameter Sharing 皆在此發生。
卷積層 ( Convolution layer )
卷積就是結合 Receptive Field & Parameter Sharing 兩個概念,透過 filter(特徵偵測器 or 濾波器)對圖片進行滑動、內積計算,檢驗圖片中有哪些與 filter 相似的特徵,產生的粉色矩陣我們稱之為 feature map。
在CNN中,通常會有多個 filter 來進行特徵萃取,如下圖所示:
filter 是一個具有高度的 matrix,圖片並不需要事先攤平
- 將一張彩色的圖片透過 2 個 filter(又作 kernel map)進行特徵萃取,得到 2 張 feature map。
- 將 2 張 feature map 再次進行卷積,這次使用 3 個 filter(又作 kernel map)進行特徵萃取,得到 3 張 feature map。
Q:3 layer * 2 filter 不應該是 6 張 feature map 嗎?
A:filter 本身具有厚度,它會將各個 layer 計算出的內積結果相加得到新的 feature map,也就是說使用幾個 filter 做卷積就會得到幾張 feature map。
池化層 (Pooling layer)
池化層的概念就是從一張圖片每個小區塊中都偷走一點像素時,會看起來少了一些細節,但整體上卻不影響圖片的特徵。
如下圖,圖片明顯縮小了,但還是可以很輕易的看出一隻鳥:
池化層的特色:
- 降低參數量
- 特徵不變性
- 提高 Receptive Field(圖片變小了,卷積時一次能看的就變多了)
運作方式如同卷積層,使用一個 filter 進行滑動來遍歷圖片,但不會重疊覆蓋,常見的方式有 Max pooling 與 Average pooling,如下所示:
Max pooling 在框選的局部數值中挑出最大值
Average pooling 將框選的局數數值加總做平均計算
一個池化層運作的有趣影片:
全連接層 ( Fully Connected layer )
剩下的就是 MLP 的東西了,如果不清楚的話,可以去複習上一篇呦~
CNN 應用
應用一 :Alpha Go
Alpha Go 算是 CNN 一個非常著名的應用了,我們知道 CNN 非常善於偵測 pattern,然而圍棋的棋局就是透過各種 pattern 所建構的,這跟 image 有著同樣的性質。
應用二:語音辨識
如圖所示,透過 spectrogram,我們能把一段聲音表示成橫軸為時間、縱軸為頻率的圖片,並且用顏色來描述某一個時刻不同頻率的能量。
應用三:文本分析
如圖所示,輸入層是句子中的詞語對應的 word vector 依次(從上到下)排列的矩陣,假設句子有 n 個詞,vector的維數為 k ,那麼這個矩陣就是 n × k 的(在CNN中可以看作一副高度為n、寬度為k的圖像)。
結語
以上就是 CNN 的介紹,對於卷積層的概念更加理解之後,算是揭開影像辨識神秘的第一層面紗。許多現行非常強大的影像辨識模型如 MobileNet、VGG 都是基於 CNN 的概念延伸,有興趣的話就去研究看看吧,相信現在的你能夠更好理解哦!
參考資料
卷積神經網路 (Convolutional Neural , CNN) — HackMD
【機器學習2021】卷積神經網路 (Convolutional Neural Networks, CNN) — YouTube
(深度學習)卷積神經網路 Convolution Neural Network, CNN) | by Ben Hu | Medium
教育部補助大專院校STEM領域及女性研發人才培育計畫目標為建構一個「以智慧物聯技術與實務應用為基礎的教育環境和實作場域」,並規劃出符合此STEM教育領域的創新特色課程,以畢業前進入企業實習的方式,讓學生了解相關產業界所面對的問題,再輔以業界實作場域的教育訓練活動,共同帶領學生發展出動手做、判斷與解決問題的相關技能;本計畫也規劃讓學生以專題實作的組隊方式,跟業界協力領導學生對外參與智慧物聯技術的應用競賽,不僅可以累積學生實務開發的能力,更能激發其潛能來幫助企業解決所面臨的難題。
Data Science Meetup 台灣資料科學社群的使命是「為資料科學人士與企業創建經濟機會」。我們相信大數據蘊藏著巨量的信息和價值,如何處理好大數據並發掘其潛藏的商業價值,就要靠資料科學有效的應用。21世紀是資料科學決勝時代,我們社群將為大家提供與資料科學相關的最新技術和資訊實戰攻略,並透過全球業界人士和學者幫助相關職業規劃與挑戰,社群活動包含
- 台北實體版聚
- 線上版聚
- Mentorship Program
歡迎加入我們社團瞭解更多資訊: https://www.facebook.com/groups/datasciencemeetup/