[深度学习基础] 4. 卷积神经网络
卷積神經網絡 (convolutional neural networks, CNN, ConvNets) 是流行的深度學習技術中的一種. 和上文討論的神經網絡一樣, CNN 也是由可學習的參數組成, 每一層也是進行一個線性運算和經過一個激活函數, 參數的學習也是根據 BP?算法. CNN 和神經網絡的區別, CNN 的優點, 和CNN 參數的具體學習過程將在本文進行討論.
1 訓練數據
CNN 要求輸入是圖像, 這樣可以讓我們依據圖像的性質對 CNN 的結構進行設計, 使得 CNN 相比一般的神經網絡結構更加高效性能更好.
因此, 和線性分類器和神經網絡的訓練數據使用特征向量不同, CNN 的訓練數據將由代表圖像的張量 (tensor) 組成.
其中, X^(i) 是第 i 張圖像, H × W × D 是每個圖像的尺寸. 注意這里有些濫用記號: 用 W 即表示可學習的參數, 也表示圖像的寬; D 即表示整個訓練集, 也表示圖像的深度.
2 假設函數
由于 CNN 的輸入變成了張量, 因此神經網絡中每一層的神經元將不再像神經網絡中按一個維度排列成向量, 而是沿著三個維度 (高度, 寬度, 深度) 排列成張量. 最后一層 (第 L 層) 的神經元輸出維數是 1 × 1 × K, 這將和普通神經網絡一樣, 是一個表示每個類分數的向量, 見圖.
和普通神經網絡每層都是一個全連接層 (仿射運算 +relu 非線性激活函數) 不同, CNN 在每層有 4 種選擇: 卷積層 (convolutional layer, conv), 匯合層 2 (pooling layer, pool), 線性整流層 (relu), 和全連接層 (fc). 下面將分別分析每層的結構.
2.1?卷積層 (conv)
[全連接仿射的張量擴展]
上一章討論的神經網絡中, 每個神經元和上一層的所有神經元保持全連接. 假設在第 l 層, 輸入是 x ∈ R^{n_{l?1}}.?x 經過一個仿射運算:
這可以認為是同時有 n_l 個 w_{d_l} , b_{d_l} 作用于 x , 每個完成計算
w_d 和 x 的維度保持一致.
當輸入由一維向量 x ∈ R^{n_l?1} 變成三維張量 X ∈ R^{H_l?1 ×W_l?1 ×D_l?1} 時,?若保持全連接性質, 則權值也要變為三維張量 W d ∈ R^{H_l?1 ×W_l?1 ×D_l?1 }.
在這里及后文, 為了寫法上簡單一些, 使用 X(i, j, d) 表示 X 中位于位置(i, j, d) 的元素.
全連接結構對圖像的可擴展性并不好. 在 CIFAR-10 數據集中, 圖像的大小是 32 × 32 × 3. 因此在第一層中, 每個神經元有 32 × 32 × 3 = 3072個權值, 這個參數量還可以接受. 但是對于一個相對合理的圖片大小, 比如200 × 200 × 3, 每個神經元將有 200 × 200 × 3 = 120, 000 個權值. 大量的參數需要繁重的計算, 但更重要的是, 容易導致過擬合. 為了解決這個問題, 卷積層做了兩個簡化.
[卷積層的兩個簡化]
(1). 稀疏連接. 在全連接中, 每個輸出 a_{d_l} 通過 W_d l (i, j, d) 和每個輸入神經元 X(i, j, d) 相連. 而在圖像識別中, 關鍵性的圖像特征, 邊緣, 角點等只占據了整個圖像的一小部分, 圖像中相距很遠的兩個像素之間有相互影響的可能性很小. 因此, 每個神經元 a_{d_l} 只需要和一小部分輸入神經元相連, 下圖是一個一維的例子.
局部連接的空間范圍 F 1 × F 2 稱為感受野 (receptive field), 而沿深度軸的連接數總是等于輸入的深度. 也就是說, 沿高和寬軸是局部連接的, 沿深度軸是全連接的, 下圖是一個三維的例子.
隨著這個局部連接區域在輸入張量上空間位置的變化 (沿著高軸和寬軸), 將得到一個二維的輸出神經元排列, 稱為激活映射 (activation map), 見下圖.
每個 W_{d_l} 維度將變成 F_1 × F_2 × D_{l?1} , W_{d_l} 作用于輸入神經元, 得到一個激活映射, D_l 個濾波器將得到 D_l 個激活映射. 將這 D_l 個激活映射沿著深度方向排列起來, 將得到一個輸出神經元張量 A ∈ R^{H_l ×W_l ×D_l} , 見下圖.?將這 D l 個濾波器 W d l 沿著第四維排列起來, 將得到一個四維的參數矩陣W ∈ R^{H_F 1 ×W_F 2 ×D_l?1 ×D_l}
?
(2). 共享參數. 如果一組權重可以在圖像中某個區域提取出有效的表示, 那么它也能在圖像的另外的區域中提取出有效的表示. 也就是說, 如果一個圖案出現在圖像中的某個區域, 那么它也可以出現在圖像中的其他任何區域. 因此在相同激活映射上的不同位置的神經元共享相同的權重, 用于發現圖像中不同位置的相同模式.
通過這兩個簡化, 可以大幅減少參數的數量.
[卷積]
根據上面兩個假設, 第 d_l 個輸出映射的 i_l , j_l 位置的神經元將是輸入神經元張量和第 d l 個濾波器的卷積 (convolution) 卷積層的名字也因此得來,?每個 W_{d_l} 稱為濾波器 (filter) 或核 (kernel).
寫成求和的形式是
一個二維卷積的例子見圖.
A 的維數 H_l × W_l × D_l 的計算方法是: D_l 是第 l 使用的濾波器個數;?H_l 和 W_l 由下式計算:
[描述卷積層的四個量]
之前已經討論過其中的兩個量: 濾波器數目 D_l , 和濾波器的感受野?F_1 × F_2 . 還有兩個量將在這里討論.?
步幅 (stride)S 表示在一個激活映射中, 在空間上, 每跳過 S 個位置計算一個輸出神經元, 見圖. 因此, 大的 S 可以使輸出映射的尺寸變小.
可以看出, 式5.10是 S = 1 的特殊情況.
0-填充 (zero-padding)P . 有時在輸入進行卷積之前, 我們會在輸入的四周填充一些 0, 高和寬分別填充的大小是 P 1 , P 2 . 通過 0-填充, 可以使我們控制輸出特征映射的大小.
當考慮到步幅和 0-填充后, 輸出 A 寬和高的計算方法有所變化.
當 S = 1 時, 通過設定
將保證
2.2 匯合層 (pool)
匯合層根據神經元空間上的局部統計信息進行采樣, 在保留有用信息的同時減少神經元的空間大小, 進一步使參數量減少并降低過擬合的可能.
pool 操作在各深度分量上獨立進行, 常用的是最大匯合 (max-pooling).
常用的是每個濾波器的大小是 2 × 2, 步幅 S = 2, 在每個局部空間采用 max?操作, 舍棄 75% 的信息, 見圖.
2.3?線性整流層 (relu)
和在普通神經網絡中 relu 操作相同, 線性整流層是逐元素的進行 relu 操作, 不會改變維度.
2.4 全連接層 (fc)
和在普通神經網絡中全連接操作相同, 每個輸出神經元和所有的輸入神經元保持連接, 在此不再贅述.
3 損失函數
損失函數和普通神經網絡中損失函數相同, 只不過
中 h 是由多個卷積層, 匯合層, relu 層, 和全連接層組合而成的.
4 優化
和普通神經網絡中優化過程相同, 都是基于 BP 算法的梯度下降規則.?因此問題的關鍵是對四種不同結構如何計算出對參數和對上一層神經元的導數. 由于 relu 層和全連接層的計算方法和上文中相同, 因此下面將介紹卷積層和匯合層的反向傳播操作.
4.1 卷積層的反向傳播
卷積層完成的操作是
假設已知, 需要計算和用于更新參數,?用于將誤差向上一層傳播.
注意到, 卷積操作的反向傳播還是卷積操作, 只不過需要將濾波器空間翻轉.
4.2?匯合層的反向傳播
匯合層沒有參數, 不需要進行參數更新, 因此匯合層在反向傳播時需要完成的工作是將第 l 層的導數傳播到第 l ? 1 層.
首先討論 max 操作在反向傳播中的作用. 考慮一個簡單的運算
假設我們知道了,?要計算和.
直觀上講, max 操作就像是導數的路由. 它會把導數保持不變地只傳給一個輸入, 這個輸入是所有輸入變量中最大的一個, 其他輸入變量得到的導數為 0.
匯合層前向傳播是
在前向傳播時, 需要記錄下每個 F 1 × F 2 局部區域最大值所對應的索引. 反向傳播時, 直接將第 l 層導數傳播到這些索引位置, 第 l ? 1 層其他位置導數置 0 即可. 因此, 匯合層的反向傳播操作會十分高效.
5 預測和評估
CNN 的預測和評估方法和上一章討論的神經網絡的預測和評估方法相同, 在此不再贅述.
總結
以上是生活随笔為你收集整理的[深度学习基础] 4. 卷积神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [深度学习基础] 深度学习基础及数学原理
- 下一篇: 深度学习方法(五):卷积神经网络CNN经