iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
AI & Data

Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型系列 第 25

Day-24 一定會見面,Convolutional Neural Network (CNN)

  • 分享至 

  • xImage
  •  
  • 我們在歷經了各種風霜之後,總算走到了這裡,在深度學習的路上的必修課,也就是 Convolutional Neural Network(卷積神經網絡),也簡稱 CNN
  • CNN 可以說是所有可以找到的深度學習教材中都一定會提到的神經網絡,那為何 CNN 是必說教材呢?因為 CNN 可以說是影像辨識中威力強大的發明,且後續很多新的辨識網絡都是基於 CNN 架構做延伸的,因此可以說他是深度學習中影像辨識的始祖都不為過,且由於他也是前幾個基於人類辨識圖像概念去做設計的神經網絡,因此可以說它的意義非凡
  • 當然,除了意義非凡,理解 CNN 的神經網絡架構能夠更好的輔助我們去理解其他深度學習模型,因此 CNN 確實在深度學習的路上有不可抹滅的重要性
  • 那就讓我們好好認識它吧~

Convolutional Neural Network(CNN)

  • Convolutional Neural Network(CNN) 被稱為卷積神經網絡,是一個深度學習的算法,此算法會在輸入的圖像中切割圖像,並對每個切割的影像分配重要性(也就是調整 weight & bias),並於過程中去學習那些圖像區塊對於圖片分類有重要影響
  • 那雖然說 CNN 屬於前饋神經網絡的一種,但是他卻有比一般前饋網路更好的資料特徵判斷狀況,視為什麼呢?最主要原因在於圖片屬於二維資料,而在一般的神經網絡中,我們都會將資料攤平(二維 to 一維),那圖像中的資料關係會因為攤平的行為被稀釋掉,這樣會大大影響我們對於資料特徵的學習,而卷積神經網絡則用另外的方式解決了這個問題,我們後面會提到
  • 卷積神經網絡參考了人類大腦視覺組織的概念建立的,因此可以說是一個非常貼近神經網絡概念設計的神經網絡,也正因為如此,後續很多圖像辨識的模型都有參考 CNN 的設計理念
  • 那我們廢話不多說,我們來解釋 CNN 到底長怎樣吧~

CNN 的結構


image from: A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way

  • 上圖是一張對於手寫數字進行分類的 CNN 結構圖,在這個結構中我們可以發現他做了兩次一樣的結構,也就是 Convalution, Pooling, Fully Connected, 因此讓我們理解他們分別在做什麼,就可以理解 CNN 了

Convolution Layer 卷積層

  • 卷積層運算是將原始圖片與特定的 Feature Detector(Filter) 去做卷積運算,那卷積運算的意思是將對應矩陣做鑲成後在相加,我們拿下面這張圖片作為舉例

  • 我們有一個特徵擷取區塊,這個區塊會遍歷資料,然後做計算,這個計算以上圖做舉例會長成 https://chart.googleapis.com/chart?cht=tx&chl=%241%20*%200%20%2B%200%20*%201%20%2B%201%20*%200%20%2B%200%20*%201%20%2B%201%20*%200%20%2B%201%20*%200%20%2B%201%20*%201%20%2B%200%20*%201%20%2B%201%20*%201%20%3D%202%24 ,也就是我現在這個區塊積於現在特徵選取是 2 的意思,那假設我們每次為一是一格,我們會有下面這張圖

  • 所以當我們依序做完整張圖片會得到一張特徵表如下圖

  • 那產生 Feature Map 的 Feature Detector 可以是任意排列組合,那假設我們產生 9 種不同的排列組合,並生成九種不同的 Feature Map,就類似我們對於物體產生了九種不同的特徵判斷,這個過程就很像我們人在過濾判斷一張圖片的特徵有哪些的過程,因為 Feature Detector 一定會保留某些資訊,因此這些被保留的資訊就可以視為一個個特徵
  • 所以我們可以發現 Convalution Layer 在做的事情就是特徵提取,而這些特徵就包含圖片的邊緣、顏色、梯度方向等等

Pooling Layer 池化層

  • 其實 Pooling Layer 的操作跟 Convolution Layer 近似,池化層最主要的工作是負責減少卷積特徵的空間大小
  • 這是為了利用降維來降低處理數據所需要的計算能力,且這個過程有助於提取旋轉、位置不變等等主導特徵,來保持模型有效的訓練過程
  • Pooling 有分成兩種,一種是 Max Pooling 而另一種則是 Average Pooling,
    • Max Pooling 顧名思義就是回傳區域內最大值
    • Average Pooling 則是回傳區域內平均值
  • 那大家會聽到 Max Pooling 的效果比 Average Pooling 的狀況好,主要原因在於 Max Pooling 能降低 Noise(噪音,也就是所謂影響判斷的資料/特徵)的影響,是一個分常好的噪音抑制器
  • 到這裡我們已經有被提取和整理之後的特徵了,接下來我們就要把資料攤平然後送進神經網絡中做分類啦~

Fully Connected Layer 全連接層

  • 既然我們有特別整理過的資料了,那當然要好好地使用他們,使用的方式就是送到我們的 NN 中啦~
  • Fully Connected Layer 就是將前面的結果平坦化後接到基本的神經網絡中,就這樣,沒錯,非常單純

整體結構

每日小結

  • CNN 在深度學習裡面有非常重要的地位,它利用了卷積層和池化層解決了圖片特徵學習關係被平坦化影響的問題,也利用了一個全新的思路去模仿人類學習資料特徵的方式,可以說是圖像辨識的重大突破
  • CNN 在圖像辨識上有非常好的效果,明天就讓我們來看看如何實做出一個 CNN Network

上一篇
Day-23 Model 可以重複使用嗎? 儲存和讀取 Model
下一篇
Day-25 PyTorch 的 CNN Model
系列文
Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言