由於神經網絡覆蓋的內容比較多,一時提筆不知從何開始說起,剛好看到這一章以公式爲主,因此先入手這一章。本章參考書籍《神經網絡與深度學習》以及三藍一棕的B站視頻。
1.預備知識
我們先來看一張圖,瞭解一下我們的符號定義:
我們首先給出網絡中權重的定義: 表示從第 層的的 個神經元到 層的第 個神經元的連接的權重,可能大家會覺得這裏權重的下標 和 應該調換,但是在之後的表達中,這樣寫會有一些好處。
我們繼續來看一張圖:
我們對網絡的偏置和激活值也使用類似的表達。我們使用 表示在第 層第 個神經元的偏置,使用 表示第 層第 個神經元的激活值。
有了這些符號表示,第 層第 個神經元的激活值 就和第 層的激活值關聯起來了:
我相信你能看懂這個公式,舉個例子,就是第二層的第一個神經元的激活值(值在0-1之間),是由第一層所有神經元的激活值乘上對應的權重矩陣(即每個激活值的重要程度)求和,然後加上第二層第一個神經元的偏置,最後通過整體利用sigmoid函數壓縮到0-1的範圍內。
但是一直看這個公式相信大家也會覺得很麻煩,畢竟太多的上標和下標要去思考含義,那我們就簡化一下:
這樣就簡潔多了,爲了在後面介紹四個方程時方便,我們引入一箇中間量 ,我們稱 稱爲 層的帶權輸入。則上面的式子有時也可以寫成 。同樣要指出的是 的每個元素是:
2. 反向傳播的四個基本方程
我們要始終明確反向傳播的目的是什麼:反向傳播算法是單個訓練樣本修改權重與偏置,影響代價函數的過程。最終極的含義就是計算偏導數: 和 ,也就是告訴我們在改變權重和偏置時,代價函數變化的快慢,我們希望沿着速度最快的方向改變代價函數。注意,爲了方便計算,我們還是引入一箇中間量 ,這個我們稱爲在第 層第 個神經元上的誤差。
這個誤差是什麼,如何來理解呢?我們先來看一下它的定義: ,其實我們可以發現它其實是一個誤差的度量,是一個變化率。假設在第 層第 個神經元上有一個微小的變化 ,使得神經元輸出由 變成了 。這個變換會向網絡後面的層進行傳播,最終導致整個代價產生 。如果我們能找到使代價函數減小的 ,並且使它與 變化率的符號相反,那麼最終會使代價函數更小。
可能大家會疑惑爲什麼這裏要用 ,如果用激活值 表示度量誤差的方法可能會更好理解。大家不要過於糾結這裏,用前一種方法來表示會在後面公式推導的過程中更加方便,同樣對這裏誤差的含義也不用太過糾結,我們就把它看成中間量。
2.1 四個方程的定義
1. 輸出層誤差的方程, ,每個元素定義如下:
右式第一項 表示代價隨着第j個輸出激活值的變化而變化的速度。假設C不太依賴一個特定的輸出神經元j,即變化率很小,那麼 就會很小,這也是我們想要的效果。右式第二項 爲在 處激活函數 變化的速度。
以上是按每個元素分量定義的公式,如果以矩陣形式來表示,則爲:
這裏 被定義成一個向量,其元素是偏導數 。你可以將 看成是代價函數C關於輸出激活值的改變速度。中間的那個符號表示爲Hadamard乘積,其含義如下:
(BP1)和(BP1a)是等價的。
2. 使用下一層的誤差 來表示當前層的誤差 :
3. 代價函數關於網絡中任意偏置的變化率:
神奇的發現誤差 和偏導 結果完全一樣,這裏可以發現,我們定義誤差爲z的好處了。
4. 代價函數關於任何一個權重的變化率:
回憶一下sigmoid函數的形狀,結合(BP1)中的項 ,當 近似爲0或者1的時候, 函數非常平緩,則 近似爲0。所以如果輸出神經元處於低激活值或者高激活值狀態時,最終層的權重學習緩慢,這樣我們稱神經元已經飽和了。
總結一下4個公式:
2.2 四個方程的證明
爲了給大家更直觀的證明,我們先進行單個參數的公式證明,假設一些內容:
所有的證明都是基於多元微積分的鏈式法則:首先是BP1
這就是鏈式法則,來,我們繼續BP2:
繼續,相信你也差不多知道BP3和BP4怎麼證明了:BP3
最後一個BP4:
3.總結
上述雖然是說的4個方程,但是還是提醒大家注意反向傳播的目的究竟是什麼,最後要得到的還是代價函數對偏置和權重的求偏導(即是讓單個訓練樣本代價函數能夠改變的最快),因此(BP3)和(BP4)是我們最終要求的,(BP1)和(BP2)是幫助我們理解反向傳播和計算方便的中間量。
鍵盤不靈了,打字賊痛苦。之後會出神經網絡1的講解