前言:本文介紹神經網絡中通過反向傳播計算梯度的原理,並通過代碼演示計算正向和反向傳播中的矩陣相乘得出梯度。
反向傳播中的梯度
反向傳播(backpropagation)中的梯度
神經網絡的基本結構有三層,輸入、中間層和輸出層。正向傳播計算出來的結果,誤差較大,因此通過反向傳播不斷迭代修改參數,使得誤差降低。
反向傳播從輸出層傳到輸入層,逐層自頂向下計算損失函數,計算神經元權值的梯度,作為修改神經元的依據。當誤差達到期望值時,或者迭代次數超過預設的閾值時學習結束。
梯度的簡單解釋
計算誤差時,對於複雜的函數無法直接求得誤差最小時的參數取值,採用梯度下降的辦法更新梯度計算。在梯度的簡單解釋例2中,af/ax = 1, 這裡的1是邏輯判斷,即右邊括號裡的條件(x >= y)成立時為1,否則為0。
舉例:反向傳播中的梯度傳播和計算-使用鏈規則對複合表達式求導
複合表達式f(u,v,w)表示為神經網絡的損失函數,u和v是輸入的訓練數據,w是權重參數,是機器學習算法需要通過學習來調節。鏈式法則是對複合函數求導的一種方法。
正向傳播中 q = u + v =3 ;f = qw = 3* -3 = -9
每個變量的導數的含義是表示整個表達式對預期值的敏感性,反向傳播中為紅色字體,從右往左看,f 梯度為 1, af/aq = w =-3 q 梯度=-3 ....... 傳到最左邊,求得三個變量的梯度。
Sigmoid 門的反向傳播
Sigmoid的作用是對變量進行規範化處理,使其值落在[0,1],反向傳播計算梯度,分別對變量w和x求導。
矩陣‐矩陣相乘的梯度
反向傳播中的梯度計算不僅使用於單個變量,也適用於矩陣和向量。
矩陣D= 矩陣 W 點乘dot 矩陣 X,W 通常為權值矩陣,X 為樣本的特徵向量矩陣。隨機產生 W 和 X,矩陣相乘時,X 的列數必須和 W 的行數相同,都設置為10。
反向傳播過程中,首先隨機初始化模擬dD梯度,dD與D 的shape相同;然後分別計算矩陣D對 W 和 X 的偏導,注意矩陣的相乘時的維度和轉置即可求得表達式的對參數的偏導數,也就是梯度。
代碼演示-正向傳播和反向傳播
# 演示內容: 正向傳播和反向傳播 -矩陣的相乘:D = W dot X
import numpy as np
# 正向傳播
# X 10 行數 與 W 列數相同,2 兩行意味著分類為兩類
D = W.dot(X)
print(D) # D也是分類的結果
'''
'''
# 反向傳播
dDdW = dD.dot(X.T) # D 對參數 W 求偏導也就是梯度;D是五行兩列, X是十行兩列,矩陣相乘行列數要相等,X.T 轉置
dDdX= W.T.dot(dD)
print(dDdW)
print(dDdX)