天天看點

李宏毅機器學習——深度學習反向傳播算法

引言

在神經網絡中,為了更有效的計算梯度,需要用到反向傳播算法。我們先從鍊式求導法則開始。

鍊式求導法

先介紹下鍊式求導法則,在後面的反向傳播算法中會用到。

那麼;

李宏毅機器學習——深度學習反向傳播算法

改變了s會改變x和y,進而改變了z。

注意,如果改變s會改變多個變量,它們的關系也是成立的。

損失函數

李宏毅機器學習——深度學習反向傳播算法

假設給定一組參數,把一個訓練資料代入NN(神經網絡)中,會得到輸出。

是輸出和實際距離函數,值越大代表越距離遠,也就是效果越不好。

那在神經網絡訓練算法中,損失函數定義為:

如果把損失函數對參數做微分的話,得到

隻要計算出某一筆資料對的微分,就可以得到對的微分。

李宏毅機器學習——深度學習反向傳播算法

假設我們先考慮這個神經元。

李宏毅機器學習——深度學習反向傳播算法

假設隻有兩個輸入,計算得到後再代入激活函數,經過多次運算會得到最終的輸出。

李宏毅機器學習——深度學習反向傳播算法

現在問題是如何計算損失(距離函數)對的偏微分

利用鍊式求導法

計算的過程叫做正向過程(Forward pass);計算的過程叫做反向過程(Backward pass)。

正向過程

李宏毅機器學習——深度學習反向傳播算法

如上圖所示,假設輸入是,上面藍色神經元的參數:,激活函數是​​

​Sigmoid​

​​函數;

下面藍色神經元的參數:

對下面的神經元來說,計算的偏微分,可以很快得出,也就是輸入,随着從前往後計算每個神經元的輸出,整個過程就可以很快結束,是以叫正向過程。

反向過程

李宏毅機器學習——深度學習反向傳播算法

困難的是如何計算

假設激活函數是​

​Sigmoid​

​​函數,然後得到的函數值會乘上某個權重(比如)再加上其他值得到(注意這裡隻是一個符号,不是的導數);也會乘上權重(比如)再加上其他東西得到(注意這裡隻是一個符号,不是的二階導數);

李宏毅機器學習——深度學習反向傳播算法

可以這樣了解,通過影響來影響。

那就剩下

改變了會改變和,進而改變了

我們先計算簡單的

同理

現在難點就是和

我們這裡先假裝我們知道這兩項的值。然後整理下原來的式子:

李宏毅機器學習——深度學習反向傳播算法

假設有另外一個特殊的神經元,它是上圖的樣子,輸入就是和,它們分别乘以和,然後求和得到的結果再乘上

就得到了

在正向傳播的過程中已經知道了,是以這裡的是一個常數。

說了這麼多,還是沒說怎麼計算和啊。别急,下面就開始計算。

這裡要分兩種情況考慮:

李宏毅機器學習——深度學習反向傳播算法

情形一: 紅色的兩個神經元就是輸出層,它們能直接得到輸出。

根據鍊式法則有:

隻要知道激活函數是啥就能計算出

也可以根據我們選取的損失函數簡單的計算出來。

同理的計算也一樣

情形二:紅色的不是輸出層

李宏毅機器學習——深度學習反向傳播算法

紅色的是中間層,它們的激活函數的值會當成下一層的輸入繼續參數計算。

李宏毅機器學習——深度學習反向傳播算法

如果我們知道和

同理(回顧一下上面那個特殊的神經元)我們就可以計算

李宏毅機器學習——深度學習反向傳播算法

問題就會這樣反複循環下去,我們不停的看下一層,直到遇到了輸出層。然後就可以由輸出層往前計算出整個NN的所有的參數。

那我們為何不換個角度考慮問題,我們直接先算輸出層的偏微分,然後依次往前計算。

繼續閱讀