CNN核心概念理解

卷積神經網絡 (Convolutional Neural Networks,簡稱CNN),是一種經典的神經網絡算法。因爲在圖像識別領域取得的良好效果,隨着人工智能的火熱,它也受到愈來愈多的關注。CNN的核心概念卷積、池化聽起來好像很神祕,瞭解以後會發現其實也並不複雜。本文試圖用通俗的語言,簡明扼要地介紹這些關鍵的概念,給讀者帶來一個直觀的理解。做者在文章最後給出了一些參考資料,以便讀者進一步參考。算法

1、爲何要提出CNN?網絡

咱們知道CNN是一種基於神經網絡的算法。而傳統的神經網絡,多層感知機(MLP),在圖像識別領域的效果並很差。緣由也很容易理解:按照傳統網絡的觀點,要處理圖像,須要將圖片按行展開,每個像素就是一個輸入。可想而知,參數數量會多麼巨大,而這又會帶來更多問題:須要龐大的數據集、漫長的訓練時間不說,還容易帶來讓人頭疼的過擬合問題。架構

以手寫體識別爲例,一個圖像通過平移、旋轉、縮放等變換會呈現出不一樣的姿態。人類很容易應對這種變換,可是對於傳統的神經網絡來講,其泛化能力就不足以處理這些變換了。機器學習

還有一個問題,圖像自己帶有拓撲結構——典型的二維結構。而傳統的全鏈接網絡不能有效利用這種結構。在進入神經網絡以前,這些重要的結構信息就已經被破壞掉了。爲了解決上面提到的各類問題,LeCun在1998年提出了LeNet,今後CNN應運而生。函數

 

2、什麼是卷積?性能

首先來看看「卷積」這個關鍵概念。首先須要明確的是,卷積不是在CNN中被提出的,而是一種有着普遍應用的數學運算,有明確的數學定義和物理意義。在圖像處理領域經常使用卷積操做,不少圖像處理操做好比模糊、銳化等均可以經過卷積來實現。學習

下面來看看CNN中卷積運算是怎麼進行的:對於給定的一幅圖像來講,給定一個卷積核,卷積操做就是根據卷積窗口進行加權求和。卷積窗口在整個圖片上滑動,在每個位置輸出一個數值,最終仍然輸出一個矩陣。以下圖所示:人工智能

在圖像處理中,卷積核是已知的。而在CNN的卷積層,卷積核的參數也是須要訓練的。在LeCun的論文中,他使用局部感覺野的概念來解釋其原理。考慮到人類在感知目標時老是從局部到整體、從片面到全面的,這樣就從神經科學的角度解釋了卷積層的原理。本文從另外一個角度解釋,卷積能夠視爲圖像處理的操做,可是圖像變換的參數是未知的,須要從數據集中學習獲得。這正是機器學習方法擅長的套路。.net

但願上面的解釋能使讀者對卷積產生一個直觀的認識。實際上CNN中的卷積和數學上的卷積並不徹底一致,若是想要進一步理解卷積的概念和應用,能夠參閱下面給出的參考資料。翻譯

  • http://setosa.io/ev/image-kernels/,以交互的方式理解圖像處理中的卷積
  • https://www.zhihu.com/question/22298352/answer/228543288,對卷積運算的通俗理解
  • https://blog.csdn.net/lz0499/article/details/70195284,從數字信號處理角度理解卷積,包括在圖像領域中的應用

 

3、什麼是池化?

LeNet5中第一個隱藏層是卷積層,第二個隱藏層就是池化層。池化,實際上也沒有聽上去那麼神祕,其實就是圖片下采樣 (sub-sampling)。具體來講就是對圖片的每一個子區域進行聚合統計,例如最大值、平均值等。獲得的效果是相鄰的幾個像素合併成一個像素。下面舉一個例子 (2, 2) 最大池化的例子。

假設原圖是一張4 * 4的圖片,(2, 2) 池化就是對相鄰的4個像素,取最大值做爲下采樣後的像素值。計算過程以下所示:

通過這次下采樣,咱們獲得處理後的圖片爲:

池化的方法還有不少,好比可使用不一樣的聚合函數,還有重疊採樣的池化等。那麼在神經網絡中加入池化層有什麼做用呢?首先,很明顯地,通過池化後像素點的個數大大減小了,訓練參數的數量也隨之降低。在計算能力足夠的狀況下是否是就不須要池化了呢?也不是的,池化的過程省略掉了圖片的一些細節,這樣有利於避免過擬合,增長模型的泛化性能。

4、全鏈接層

在通過若干次卷積和池化以後,特徵圖被送到全鏈接層進行分類。全鏈接層的功能至關於經典的前向全鏈接網絡,所以做爲分類器是很是天然的。回過頭來看CNN的總體架構,能夠把卷積和池化的步驟看作是特徵提取的過程,把最後的全鏈接層看作一個分類器。這就回歸到機器學習的經典套路了,理解這種結構也比較天然了。

5、總結

本文簡要介紹了CNN中的幾個關鍵性的概念,力圖清晰,不求全面。最後,做者也是剛剛接觸深度學習不久,若有謬誤之處,還請批評指正。

參考資料

  • 《Gradient-Based Learning Applied to Document Recognition》,LeCun經典之做
  • https://blog.csdn.net/hjimce/article/details/47323463,包含了理論和實戰部分
  • https://my.oschina.net/u/876354/blog/1620906,給出了很不錯的例子
  • https://blog.csdn.net/qianqing13579/article/details/71076261:翻譯了LeNet論文部分篇章
相關文章
相關標籤/搜索