本文的思路如下:
偏微分 -> 梯度下降 -> 矩陣求導 -> 反向傳播
1 梯度下降
1.1 偏微分
下圖是一個
的函式影象,假設有一個點
,求在p1點處關於x的偏微分
的思路如下:
圖1 z函式3D影象
取一個平行於
的平面a要求這個平面過p1,與函式相交於上圖中的綠色曲線
畫出平面a的正檢視,視角沿著上圖中的視角箭頭,得到下圖(注意座標值)。
圖2 z函式2D投影
3。 在上述影象中求解曲線在p1點處的導數,即我們要求的
透過圖2,在p1處的導數<0;在p2處的導數>0。從而:
沿著x增大的方向,下坡方向,那麼導數<0;如果要到達谷底,需要
沿著x增大的方向,上坡方向,那麼導數>0;如果要到達谷底,需要
即:無論在哪裡,偏導數值相反方向,都是到達谷底的方向。
其中
應為一個小數,偏導數只是指明瞭谷底的方向,但是要是邁步過大,容易直接跨過谷底到達另一個山坡位置
1.2 梯度下降
總結偏微分的原理,得到梯度下降公式如下:
其中
控制步伐大小,不斷重複上述更新,直到擬合,即到達圖3的山谷位置,過程如下圖所示:
圖3 梯度更新過程
即:梯度更新的演算法核心在於求目標函式關於變數
偏微分
2 反向傳播演算法
2.1 矩陣乘法求導
常見的矩陣乘法有兩種,一種是數學上的乘法,另一種是對應位置相乘,例如:
數學上的乘法,這裡我們記為
,例如:
2。 numpy中的預設乘法,為對應位置相乘,這裡我們記為
,例如:
2.1.1 數學中的乘法( #FormatImgID_22# )求導
假設有如下計算矩陣:
且上述運算只是鏈式計算中的一環,即有
,如果對z矩陣的每個元素求偏導,那麼組合起來的矩陣一定是和z矩陣一樣,即有:
在此基礎上求解:
由於:
所以:
於是:
也就是說:
透過同樣的推導方式可得到如下結論:
如果:
那麼(要注意左乘和右乘的區別):
這裡為什麼要乘以
numpy。oneslike(Z)
(numpy函式,shape和Z相同,但全為1),可以理解成上述
作用,目的是為了保證形狀
上面是比較直觀的矩陣展開推導過程,現在用矩陣乘法公式進行求導過程。條件和上面一致,所以
,令
分別為對應的元素,則:
因此:
所以:
同理:
所以:
從上面展開式發現:
所以:
這也就是矩陣鏈式求導使用
numpy。oneslike
的原因
2.1.2 numpy中的預設乘法,對應位置相乘( #FormatImgID_43# )求導
假設有一個運算:
且上述運算只是鏈式計算中的一環,即有
,如果對 a 矩陣的每個元素求偏導,那麼組合起來的矩陣一定是和z矩陣一樣shape,即有:
在此基礎上求解:
由於:
所以:
於是:
其中
表示
對應的矩陣,透過同樣的推導方式可以得到:
如果:
那麼:
2.2 反向傳播演算法
反向傳播演算法本質是梯度更新,只不過它為了更方便計算機計算,先求出每一層的誤差並快取,然後再梯度更新
2.2.1 求每一層的誤差
假設如下神經網路結構,包含2個hidden layer,3個輸入feature,4個輸出result,啟用函式都是sigmoid,loss function使用cross entropy
圖4 神經網路結構
分解後如圖5所示:
圖5 神經網路引數分解圖
其中各個引數意義如下:
:表示第 i 層啟用值,其中
為網路輸入資料,
為網路輸出值
:表示第 i-1 層(上一層)網路輸出值
:表示第 i 層網路引數
:表示第 i 層網路的誤差,我們定義誤差為
:表示第 i 層的啟用函式
由於採用cross entropy為損失函式,所以損失函式 J 有:
又因為使用啟用函式都是
,所以
上述神經網路涉及兩種運算:
1。 點積
:
2。 點乘
:
因此:
根據鏈式求導:
根據2。1的矩陣求導法則,因為
,所以:
同理:
所以:
2.2.2 求每一層權重的偏導數
求解了每一層的誤差,接下來需要求我們需要更新的權重的梯度:
根據2。1矩陣求導公式,因為
,所以:
同理:
所以:
從而就可以應用梯度更新公式了
2.2.3 反向傳播演算法總結
第 i 層的誤差,與對應層使用的啟用函式相關:
最後一層誤差,需要結合損失函式求導得到
第 i 層的梯度:
3 梯度爆炸和梯度消失
3.1 梯度爆炸消失對反向傳播的影響
梯度消失和梯度爆炸問題,字面上理解就是
中的
梯度項,接近0或者接近無窮。下面特例說明梯度消失梯度爆炸在反向傳播中的表現。
因為:
假設網路採用線性啟用,即不採用啟用函式,即:
令每一層為權重
,
那麼:
其中 L 表示網路層數,當網路很深時,
,且
在計算梯度時,做常數處理,所以梯度的值和上一層的誤差成正相關所以:
小結:當網路很深時,深層網路的梯度更新與輸出層誤差無關,即梯度不一定朝著梯度變小的方向更新。
3.2 梯度爆炸消失對前饋網路的影響
條件還是和上述一致,那麼:
當網路很深,
,所以:
小結:當存在梯度爆炸或梯度消失時,網路的輸出和網路的輸入X不相關。
3.3 梯度爆炸、梯度消失原因總結
透過3。1、3。2的總結,我們發現如果權重矩陣設定不當,即:
所有權重
,容易產生梯度爆炸問題
所有權重
,容易產生梯度消失問題
所以權重初始化很重要,至於怎麼初始化,我們後續再講解#