1. 如何理解后向傳播
參考CNN卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)筆記3:權(quán)值更新公式推導(dǎo)
后向傳播的過程就是梯度向回傳遞,在CNN中,梯度的計算主要涉及三種情形
- 卷積層
- 池化層
- 全連接層
其中笨鸡,卷積層涉及3種操作下的梯度計算
- 卷積操作
- 偏置
- 激活操作
池化層則有兩種情形:
- 平均池化
- 最大池化
而全連接層的后向傳播與全連接神經(jīng)網(wǎng)絡(luò)的后向傳播原理一致戚啥。涉及:
- 權(quán)重的相乘與偏置
- 激活操作
本文先討論全連接層的后向傳播盹兢,再討論卷積層砂轻、池化層的梯度傳遞。
2. 全連接層的梯度計算
知乎的如何理解神經(jīng)網(wǎng)絡(luò)里面的反向傳播算法講的很好然爆。
主要是輸出層與隱藏層的梯度傳遞
2.1 輸出層的梯度傳遞
這個就是關(guān)于節(jié)點(diǎn)的梯度的計算(相對于權(quán)重的梯度的計算顽分。因為我們是要用梯度下降改變權(quán)值,所以要求權(quán)重的梯度施蜜,但在過程中總是要得到關(guān)于每一層的節(jié)點(diǎn)的梯度),又稱靈敏度雌隅,表示了對最終誤差造成的影響翻默。正因為它的這個意義缸沃,關(guān)于一個權(quán)重的梯度可以由該權(quán)重的上的輸出乘以節(jié)點(diǎn)的靈敏度得到,也就是
這個公式同樣適用于隱藏層修械。
2.2 隱藏層的梯度傳遞
這里同樣印證了上文的公式:權(quán)重的梯度=輸出節(jié)點(diǎn)的靈敏度 * 權(quán)重上的值
3. 卷積層
3.1 卷積操作
3.1.1 卷積操作的各個梯度
參考 Forward And Backpropagation in Convolutional Neural Network.
假如有特征圖與卷積核如下:
且輸出與這兩個矩陣的關(guān)系如下:
那么趾牧,關(guān)于卷積核F的每一項F_ij的梯度計算公式如下:
也就等于:
當(dāng)我們仔細(xì)觀察上圖這幾個式子的規(guī)律,可以發(fā)現(xiàn)肯污,卷積核的梯度可以這樣得來:
然后卷積核各項都可以根據(jù)此梯度進(jìn)行調(diào)整翘单。但是,我們還要把梯度傳遞給上一層蹦渣,就需要計算關(guān)于輸入的梯度哄芜。通過與計算卷積核的梯度同樣的方法,我們可以得到關(guān)于各個X_ij的梯度:
仔細(xì)觀察上圖這幾個式子的規(guī)律柬唯,可以發(fā)現(xiàn)认臊,輸入的梯度可以化為全卷積操作:
全卷積的具體操作如下:
3.1.2 關(guān)于輸入的梯度的用途
本來我感覺奇怪,如果關(guān)于卷積核的梯度是用于調(diào)整卷積核各項的值的話锄奢,那關(guān)于輸入的梯度是用來做什么的呢失晴?我看到了文章評論區(qū)有人剛好問了這個問題:
原來,它是用于計算上一層的梯度用的拘央。其實涂屁,這一層對輸入的梯度
這篇文章Back Propagation in Convolutional Neural Networks?—?Intuition and Code也提到了它的用處:
It is important to understand that ??x (or ??h for previous layer) would be the input for the backward pass of the previous layer. This is the core principle behind the success of back propagation.
3.1.3 概括
也就是說,卷積操作主要是求出兩個:關(guān)于卷積核的梯度以及關(guān)于輸入的梯度灰伟。其中拆又。關(guān)于卷積核的梯度是用于調(diào)整卷積核各項的值的,關(guān)于輸入的梯度則是用于給更上一層作為輸出梯度的袱箱。
3.2 偏置與激活
梯度的傳遞在經(jīng)過偏置操作與激活操作時的變化都在2. 全連接層的梯度計算里講解了遏乔,卷積層的處理與全連接層在此方向的處理是一致的。
4. 池化層
4.1 average-pooling
平均池化的操作可以轉(zhuǎn)化為卷積操作发笔。比如盟萨,2 * 2的平均池化可以轉(zhuǎn)化為卷積核為2 * 2,每項為1/4 的卷積操作了讨。
4.2 max-pooling
知乎的 卷積神經(jīng)網(wǎng)絡(luò)(CNN)中卷積層與池化層如何進(jìn)行BP殘差傳遞與參數(shù)更新捻激?中提到的 Backpropagation in Convolutional Neural Network 解釋了平均池化與最大池化的梯度傳遞
假如某個矩陣被圈中的部分是最大項:
它們對應(yīng)的梯度就是:
當(dāng)該項被選取為最大項時,它的對應(yīng)梯度為1前计,否則為0.
此文同樣表達(dá)了這一點(diǎn) Backpropagation in Pooling Layer (Subsamplig layer) in CNN
加入矩陣M有4個元素
a b
c d
而且maxpool(M)返回d. 那么胞谭,maxpool函數(shù)就只依賴于d了. 那么,關(guān)于d的導(dǎo)數(shù)為1男杈,關(guān)于a,b,c的導(dǎo)數(shù)為0. 所以丈屹,在計算關(guān)于d的梯度時,就是乘上1, 對其它的梯度乘上0.
參考
- CNN卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)筆記3:權(quán)值更新公式推導(dǎo)
- BP神經(jīng)網(wǎng)絡(luò)后向傳播算法
- Only Numpy: Understanding Back Propagation for Max Pooling Layer in Multi Layer CNN with Example and Interactive Code. (With and Without Activation Layer)
- 卷積神經(jīng)網(wǎng)絡(luò)(CNN)中卷積層與池化層如何進(jìn)行BP殘差傳遞與參數(shù)更新?
- Backpropagation in Convolutional Neural Network