本文我們通過兩個簡化的例子,展示如何從前向傳播、損失計算,到反向傳播推導梯度,再到參數更新,完整地描述卷積層的參數學習過程。
一、例子一
我們構造一個非常簡單的卷積神經網絡,其結構僅包含一個卷積層和一個輸出(不使用激活函數,為了便于數學推導),損失函數采用均方誤差(MSE)。
1. 設定問題
輸入數據
假設輸入為一幅小的灰度圖像 X:
例如,令
卷積核
使用一個 2×2 的卷積核 W:
并設有偏置 b。
卷積操作
采用“valid”卷積(不填充),在這種情況下,由于輸入和核大小都為2×2,卷積操作僅得到一個輸出標量 O:
O=(w1?x11+w2?x12+w3?x21+w4?x22)+b.
我們為了簡化,不使用激活函數(即線性激活),這樣前向計算就很直觀。
目標輸出
設定目標值為 y(比如標簽值),假設 y=10。
損失函數
我們使用均方誤差(MSE):
2. 前向傳播計算
代入示例數據:
- 初始假設卷積核權重和偏置(假設初始值為):
計算輸出 O:
損失:
3. 梯度推導(反向傳播)
我們需要計算損失 L?關于每個參數的梯度,即
步驟1:計算損失對輸出 O?的梯度
由
有
代入數據:O?y=4.5?10=?5.5.
步驟2:計算輸出 O?關于各參數的梯度
步驟3:鏈式法則計算損失對各參數的梯度
根據鏈式法則:
代入數值:
4. 參數更新(梯度下降)
設定學習率 η,例如 η=0.01,則更新規則為:
更新后的參數:
更新后,新的卷積核參數為:
5. 訓練過程總結
整個訓練過程如下:
- 前向傳播:對輸入圖像進行卷積計算,得到輸出 O。
- 計算損失:利用損失函數(MSE)計算模型輸出與目標值之間的誤差 L。
- 反向傳播:根據鏈式法則計算損失對各參數(卷積核權重和偏置)的梯度。
- 參數更新:使用梯度下降(或其他優化算法)更新參數,向降低損失的方向調整。
- 迭代訓練:重復上述步驟,遍歷整個訓練數據集,直到損失收斂或達到設定的迭代次數。
這個例子雖然非常簡單(只有一個卷積層,一個輸出單元),但它清楚展示了如何從前向傳播計算輸出、如何利用損失函數計算誤差、如何通過反向傳播推導每個參數的梯度,并最終利用梯度下降更新參數。實際的卷積神經網絡通常包含多個卷積層、池化層和全連接層,但每個部分的參數學習原理都是類似的——都是通過不斷地計算梯度并更新參數,使得模型能夠更好地擬合數據,從而實現準確的圖像分類、檢測等任務。
二、例子二
以下是一個具體的卷積神經網絡(CNN)訓練過程示例,詳細展示前向傳播、損失計算、反向傳播、參數更新的每個步驟。我們以簡單的數字識別任務為例,使用極簡網絡結構便于手動驗證。
示例設定
1. 輸入數據
-
輸入圖像:2×2的灰度圖像,表示數字“1”
-
真實標簽:y_true=[1,0](二分類,索引0為“非1”,索引1為“是1”)
2. 網絡結構
-
卷積層:1個2×2卷積核,無填充,步長=1
-
初始權重:
-
激活函數:ReLU(ReLU(x)=max?(0,x))
-
-
全連接層:輸入1個神經元 → 輸出2個神經元
-
初始權重:
-
激活函數:Softmax(輸出概率)
-
3. 超參數
-
學習率:η=0.1
-
損失函數:交叉熵損失(Cross-Entropy Loss)
(一)前向傳播(Forward Pass)
1. 卷積層計算
-
卷積操作:
Conv輸出=(0.2×0.5+0.8×(?0.3)+0.6×0.2+0.1×0.4)+0.1=0.1?0.24+0.12+0.04+0.1=0.12
輸入?X?與卷積核?W_conv 逐元素相乘后求和,加偏置: -
ReLU激活:
Aconv=ReLU(0.12)=0.12
2. 全連接層計算
-
線性變換:
-
Softmax激活:
預測結果:類別1(“是1”)的概率為0.628,類別0為0.372。
(二)損失計算(Loss Calculation)
-
交叉熵損失:
(三)反向傳播(Backward Pass)
1. 全連接層梯度
-
Softmax梯度:
-
權重梯度:
-
偏置梯度:
2. 卷積層梯度
-
ReLU梯度:
-
傳遞到卷積層的梯度:
-
卷積核權重梯度:
-
卷積層偏置梯度:
(四)參數更新(Parameter Update)
1. 全連接層參數
-
權重更新:
-
偏置更新:
2. 卷積層參數
-
權重更新:
-
偏置更新:
(五)更新后效果驗證
1. 前向傳播再計算
-
新卷積輸出:
Conv輸出=(0.2×0.4933+0.8×(?0.3268)+0.6×0.1799+0.1×0.3967)+0.0665≈0.0987ReLU激活后:Aconv=0.0987
-
新全連接輸出:
Softmax概率:
2. 新損失值
New?Loss=?log?(0.581)≈0.542(比原始損失0.465反而增大)
(六)結果分析
-
損失未下降的原因:
-
單步更新局限性:梯度下降可能需要多步迭代才能收斂。
-
學習率過大:學習率?η=0.1 可能跳過最優解,可嘗試更小值(如0.05)。
-
網絡容量限制:極簡模型可能無法有效擬合復雜模式。
-
-
參數學習方向驗證:
(七)關鍵總結
-
前向傳播:數據從輸入到輸出的逐層變換。
-
反向傳播:通過鏈式法則計算梯度,明確參數調整方向。
-
參數更新:沿負梯度方向微調參數,逐步逼近最優解。
-
迭代優化:需多次迭代(Epoch)才能顯著降低損失。
通過這個極簡示例,可直觀理解CNN參數學習的動態過程。實際訓練中需結合批量數據、更復雜網絡結構和優化策略(如Adam、學習率衰減)提升效果。