卷積神經網絡(Convolutional Neural Network,CNN)又叫卷積網絡(Convolutional Network),是一種專門用來處理具備相似網格結構的數據的神經網絡。卷積神經網絡一詞中的卷積是一種特殊的線性運算。卷積網絡是指那些至少在網絡的一層中使用卷積運算來代替通常的矩陣乘法的神經網絡。面試
卷積神經網絡的出現,極大的緩解了全鏈接神經網絡中存在的一個典型的問題:數據的波形被忽視了!衆所周知,全鏈接神經網絡在進行數據輸入的時候,須要將一個二維或者三維的數據展平爲一維的數據。而咱們知道在計算機中圖形是一個三維的數據,由於須要存儲一些相似 RGB 各個通道之間關聯性的空間信息,因此三維形狀中可能隱藏有值得提取的本質模式。而全鏈接展平會致使形狀的忽視。所以須要利用卷積神經網絡來保持形狀的不變。數組
典型應用場景:圖像識別、語音識別等。網絡
典型結構以下圖所示:app
卷積運算至關於圖像處理中的「濾波器運算」。卷積運算會對輸入數據應用濾波器(Filter)。函數
假設,一個初始的圖像大小爲 \(J*K\), 同時有 \(L\) 個管道,以下圖所示:學習
咱們應用一個 \(M*N\) 大小的濾波器。圖中綠色的格子就是一個 3*3 的濾波器。卷積運算的整個操做爲:將各個位置上濾波器的元素和輸入的對應元素相乘,而後再求和(整個操做也被稱爲乘積累加運算),而後,將這個結果保存到輸出的對應位置。spa
將計算過程公式化,公式以下:3d
其中 \(K_{m,n}\) 表示濾波器的 \(m,n\) 位置的數據,\(V_{j+m,k+n}\) 表示圖像的 \(j+m,k+n\) 位置的數據,\(b\) 是偏置項。orm
將計算過程圖像化,以下圖所示:blog
其中,濾波器的參數就是權重(Weights),同時還有有個偏置項(Bias),這個偏置項會被加到濾波器最後的輸出上。
咱們能夠根據上圖看到,對一層中的每個 \(M×N\) 塊輸入應用相同的權值,計算卷積層中的下一個隱藏單元,這就是個權重共享(Weight Sharing)的概念。
填充(Padding):在進行卷積操做以前,有時候要向周圍填入固定的數據,好比用數值 0 進行填充,也叫零填充(Zero Padding)。
應用填充以後,卷積層的輸出大小將會和卷積以前的層同樣,如圖所示,其中粉色的 6 * 7 的格子是原始的圖像尺寸,咱們在周圍加上一圈數值爲 0 的格子,用白色表示:
以步幅 1 進行卷積,以下圖所示:
最終咱們獲得了一個大小爲 6 * 7 的藍色的卷積層,和原始圖像的尺寸相同,以下圖所示:
這主要也是爲了不卷積過程當中過一個典型的問題:若是每次驚醒卷積運算都會縮小空間,那麼在某個時刻輸出大小就有可能變成 1,致使沒法再應用卷積運算。爲了不這個狀況的出現,就須要使用填充。
步幅(Stribe):應用濾波器間隔的位置稱爲步幅。在上面的例子中,採用的步幅爲 1。
咱們能夠將步幅改成 2,那麼卷積過程就會變成下圖所示的:
能夠看到應用濾波器的窗口的間隔變成了 2 個元素,以下圖所示:
最終,新的一層的尺寸變爲一個 3 * 4 的層。用公式表示爲(設步長爲\(s\)):
在一開始,雖然咱們假設了一個初始的圖像大小爲 \(J*K\), 同時有 \(L\) 個管道。可是咱們討論的卷積操做一直只在單層上進行的,下面咱們就討論一下在 3 維狀況下的卷積運算。
當在通道方向上有多個特徵圖的時候,會按照通道進行輸入數據濾波器的卷積運算,並將結果相加,從而獲得輸出。計算步驟以下圖所示:
至此,咱們的公式能夠總結爲:
其中 \(K^i_{m,n}\) 表示第 \(i\) 個濾波器的 \(m,n\) 位置的數據,\(V^l_{j+m,k+n}\) 表示圖像第 \(l\) 層通道的 \(j+m,k+n\) 位置的數據,\(b^i\) 是第 \(i\) 個偏置項。根據以前的權重共享的概念,咱們能夠知道,每一層通道是共用一個濾波器的相同權重的,一樣也共用相同的偏置。
池化(Pooling)是縮小高、長方向上的空間的運算。
最典型的池化過程叫作最大池化(Max Pooling),以下圖所示,這是一個單層的池化:
圖中所示的步驟是,咱們劃定一個 \(2 * 2\) 的窗口,找出這個窗口中最大的那個值,做爲下一層的數據,這個窗口以步幅 2 進行移動。通常來講,池化的窗口大小會和步幅設定成相同的值。
除了 Max Pooling 以外,還有 Average Pooling/Mean Pooling,即平均池化,是計算目標區域的平均值。在圖像識別領域中,主要使用 Max Pooling。
重疊池化(Overlapping Pooling)是 AlexNet 中的一個概念。Overlapping Pooling 的概念和 No-Overlapping Pooling的概念相對。
LeNet 是在 1998 年提出的進行手寫數字識別的網絡。具備連續的卷積層和池化層(準確的講是隻抽取元素的子採樣層),最後經全鏈接層輸出結果。基本結構以下:
和如今的 CNN 相比,LeNet 有幾個不一樣點:
AlexNet 是一個引起深度學習熱潮的導火索。基本結構以下:
AlexNet 疊有多個卷積層和池化層,最後經由全鏈接層輸出:
AlexNet 雖然在結構上和 LeNet 沒有很大的不一樣,可是也有一些細節上的差別:
神經網絡中的權重共享是什麼?
\(1 * 1\) 卷積的做用
卷積層和池化層有什麼區別
LeNet-5 結構
AlexNet 結構