卷積神經網絡 CNN BP算法推導


重點在對CNN的理解后, 理解對卷積層的的 梯度(導數) 推演.

回顧 CNN

首先是對神經網絡, 前向, 后向的基本認識.

神經網絡初步認識來看, 跟傳統的 ML 理論的區別在於, 它更像一個經驗的過程, 即debug. 它將一個樣本輸入(向量) 的每個分量, 進行一些 奇怪 的線性處理 (加權, 求和), 然后進行壓縮投影 (0-1), 這樣一層層地處理數據, 最后再來個 歸一化 為一個向量(近似概率) 的輸出. 這個過程呢, 稱為 前向, 得到結果跟真實值之間的誤差, 通過 反向 傳遞的方式來 動態調整權值參數 直到每個節點的 梯度接近0 就停止了調整了, 也就意味着, 網絡基本構建完成了.

而 反向調整權值的 BP算法的核心, 就是多元函數求偏導, 利用鏈式法則而已.

學界已經證明, 一個3層的網絡結構, 是可以模擬出任何的函數的, 只要中間層的節點夠多. 但這樣一來需要的計算量和內存非常大. 於是想着可以適當將網絡變為復雜一點, 從層次上增加 (卷積層), 再加上一個濾波器, 實現對 輸入的數據的特征提取 大幅度降低了計算復雜度.

CNN 的卷積過程, 一般會這樣處理:

  • 卷積核: 也是一個矩陣, 或者從數學上稱為算子(option), 對輸入矩陣進行變換, 通常, 輸入,輸出的維數沒變, 但數值變了.
  • 池化: 類似對卷積后的矩陣, 進行一個過濾, 分塊 這樣的(濾波器) 操作, 實現對對輸入的 主特征提取.

池化的過程:

而網絡的基本結構為: (以黑白圖像, 單通道舉例). 如果是彩色圖像, 多通道, 則輸入根據 R, G, B 三個矩陣而已.

回顧就到這了, 現重點來關注卷積層的梯度推演.

卷積層梯度 BP推導

變量聲明

輸入:

  • 圖像, 尺寸 H, W
  • 卷積核, 尺寸 R, S

H, W 分別表示圖片的高和寬, 如 100 x 200 px; R, S 表示卷積核的 垂直方向, 水平方向的 px, 跟 圖片類似概念

參數:

  • u, v 為縱向和橫向的步長 (strides)
  • a, b 為縱向和橫向的填充 (padding) 這是為了, 卷積和對 圖片區沒有能對應上的地方(邊界) 填充

輸出:

  • 特征圖 (大小) : P, Q (P是縱向, Q是橫向)

P, Q 呢, 作為 輸入圖像 H, W 與卷積核 R, S 卷積后的輸出尺寸, 其關系為:

\(P = \frac {H-R +1+2a} {u}\)

\(Q = \frac {W-S +1+2b} {v}\)

2a, 2b 因為有兩端嘛, 畫圖就能形象理解.

默認上對 P, Q 進行了 ceiling 操作, 使其為整數.

卷積的定義

對於給定的圖像矩 I 和卷積核矩陣 K (卷積和尺寸為 k1 x k2)

Cross-correlation:

\((I \otimes K)_{ij} = \sum\limits_{m=0}^{k_1-1} \sum\limits_{n=0}^{k_2-1} I(i+m, j+n)K(m,n)\)

這就跟咱直觀理解的"卷積" 的那個圖移動操作是相符合的呀, 對應元素相乘, 然后再求和.

而在數學上的卷積概念, 跟我們上邊這個直接對應元素相乘再求和有些不太一樣:

\((I \otimes K)_{ij} = \sum\limits_{m=0}^{k_1-1} \sum\limits_{n=0}^{k_2-1} I(i-m, j-n)K(m,n)\)

\(=(I \otimes K)_{ij} = \sum\limits_{m=0}^{k_1-1} \sum\limits_{n=0}^{k_2-1} I(i+m, j+n)K(-m,-n)\)

即 卷積 Convolution 相當於將一個卷積核 旋轉180度, 以后再來做 Cross-correlation

旋轉這個操作, 即對應於某個的矩陣. 或者可理解為, 矩陣就是一個函數.

卷積前向

也是要線聲明一波變量.

  • l 為層的下標, 第一層為 l=1,最后一層為 l = L

  • 輸入x 的尺寸為 H, W 並用 i, j 表示其下標

  • 卷積核 w 的尺寸 k1, k2 並用 m, n 表示其下標

  • \(w^l_{mn}\) 為連接 l-1 層 和 l 層的卷積核

  • \(b^l\) 為 l 層的 bias

  • \(x^l_{i,j}\) 為 l 層激活函數的輸入

  • \(o^l_{i,j}\) 為 l 層的輸出

  • f(*) 為激活函數

暫時不細寫了, 感覺好難去描述這種多層多維度的東西哦, 還是調api吧, 暫時, 太難弄了.

繼續,

小結

還是留了一個推導的 Todo 在這里, 就關於BP推導的部分, 細節還有待考量, 太難弄覺得, 深度學習果然不一般, 目前覺得已到了我的知識上限了, 前面的BP還好, 偏導數而已, 而CNN的BP, 是有一下難度. 不過總體上, 這幾篇算是理解了卷積的大致過程, 卷積無非是做了一個特征提取, 降低計算復雜度的這樣一個往深度發展的網絡結構而已. 原理並不算復雜, 但要從數學符號來描述, 我感覺我目前還是有點難, 放一放先, 至少概念基本清楚, 能調api即可.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM