2012年,Alex Krizhesky 和 Geoff Hinton 提出的 AlexNet 在 ImageNet 的圖像分類競賽中以巨大優勢贏得冠軍,使 Convolutional Neural Network(CNN,又稱卷積神經網絡)開始被廣泛研究,成為學術界的焦點,可以說是王者回歸。但在此之前,CNN 的鋒芒一直被「手工設計特徵 + SVM」的分層結構所蓋過,這個分層結構沒有 CNN 這種端到端(end-to-end)學習的特色。我想下一篇也許可以來解析為什麼 AlexNet 能夠有這樣的突破。
CNN 是深度學習的一種架構,被廣泛用在圖片處理以及物體辨認(object recognition)上。在深入 CNN 結構之前,想先跟各位聊聊圖片:
這張圖片,若視野擺放的位置不同就有不同的理解(正面與側臉)。這代表面對一張圖,人類不需要把整張圖看完才能理解它,有時候看部分就能瞬間理解。
來欣賞 CNN 的魔法陣樣貌:
截圖自 [地圖] 深度學習世界的魔法陣們
CNN 主要由下列概念所組成:
神經網絡隨機生成 Kernel(又稱 Filter)來抓取不同的特徵,將特徵存入 feature maps 中,再透過訓練決定哪些類型是重要的。Filter 在過程中可將圖片變小,使得圖片能夠更容易以及快速被神經網絡處理。
圖片來源:https://www.kdnuggets.com/2017/11/understanding-deep-convolutional-neural-networks-tensorflow-keras.html
謎之牙狼族:在這過程中是否會遺失掉訊息嗎?
答案:會的。不過就如同前面探討的圖片,實際上我們在看圖時不會每個 pixel 都看,例如可能只看眼睛、鼻子等特徵(feature),而這些特徵被保存在 feature map 中。
Filter 抓取特徵的例子:
以 Max pooling 為例:
圖片來源:https://computersciencewiki.org/index.php/Max-pooling_/_Pooling
如圖所示,抓出矩陣中的最大值。Max pooling 擁有去雜訊的功能,且當圖片平移的話也不會影響電腦的判斷。
下面是實際例子:
圖片來源:https://computersciencewiki.org/index.php/Max-pooling_/_Pooling
圖片來源:https://www.kdnuggets.com/2017/11/understanding-deep-convolutional-neural-networks-tensorflow-keras.html/2
全連接層(Fully Connected Layer)起到分類任務的作用,而前面的層充當特徵提取器,整個 CNN 的流程如下圖:
最後的最後,提供一個延伸閱讀:2D Visualization of a Convolutional Neural Network,視覺化 CNN 在手寫數字上的效果,各位見習魔法使們可以玩玩看。