深度學習之反向傳播演算法

2022-05-02 10:54:06 字數 2608 閱讀 1194

反向傳播演算法是用來求那個複雜到爆的梯度的。

上一集中提到一點,13000維的梯度向量是難以想象的。換個思路,梯度向量每一項的大小,是在說代價函式對每個引數有多敏感。

如上圖,我們可以這樣裡理解,第乙個權重對代價函式的影響是是第二個的32倍。

我們來考慮乙個還沒有被訓練好的網路。我們並不能直接改動這些啟用值,只能改變權重和偏置值。但記住,我們想要輸出層出現怎樣的變動,還是有用的。

我們希望影象的最後分類結果是2,我們期望第3個輸出值變大,其餘輸出值變小,並且變動的大小應該與現在值和目標值之間的差成正比。舉個例子,增大數字2神經元的啟用值,就應該『比減少數字8神經元的啟用值來得重要,因為後者已經很接近它的目標了。

進一步,就來關注數字2這個神經元,想讓它的啟用值變大,而這個啟用值是把前一層所有啟用值的加權和加上偏置值。

所以要增加啟用值,我們有3條路可以走,一增加偏置,二增加權重,或者三改變上一層的啟用值。

先來看如何調整權重,各個權重它們的影響力各不相同,連線前一層最亮的神經元的權重,影響力也最大,因為這些權重與大的啟用值相乘。增大這幾個權重,對最終代價函式造成的影響,就比增大連線黯淡神經元的權重所造成的影響,要大上好多倍。

請記住,說到梯度下降的時候,我們並不只看每個引數是增大還是變小,我們還看改變哪個引數的價效比最大。

不過別忘了,從全域性上看,只只不過是數字2的神經元所期待的變化,我們還需要最後一層其餘的每個輸出神經元,對於如何改變倒數第二層都有各自的想法。

我們會把數字2神經元的期待,和別的輸出神經元的期待全部加起來,作為如何改變倒數第二層的指示。這些期待變化不僅是對應的權重的倍數,也是每個神經元啟用值改變量的倍數。

我們對其他的訓練樣本,同樣的過一遍反向傳播,記錄下每個樣本想怎樣修改權重和偏置,最後再去乙個平均值。

這裡一系列的權重偏置的平均微調大小,不嚴格地說,就是代價函式的負梯度,至少是其標量的倍數。

實際操作中,我們經常使用隨機梯度下降法。

首先把訓練樣本打亂,然後分成很多組minibatch,每個minibatch就當包含了100個訓練樣本好了。然後你算出這個minibatch下降的一步,這不是代價函式真正的梯度,然而每個minibatch會給乙個不錯的近似,計算量會減輕不少。

我們從乙個最簡單的網路講起,每層只有乙個神經元,圖上這個網路就是由三個權重和三個偏置決定的,我們的目標是理解代價函式對這些變數有多敏感。這樣我們就知道怎麼調整這些變數,才能使代價函式下降的最快。

我們先來關注最後兩個神經元,我們給最後乙個神經元乙個上標l,表示它處在第l層。

給定乙個訓練樣本,我們把這個最終層啟用值要接近的目標叫做y,y的值為0/1。那麼這個簡易網路對於單個訓練樣本的代價就等於$(a^-y)^2$。對於這個樣本,我們把這個代價值標記為$c_0$。

之前講過,最終層的啟用值公式:$a^ = \sigma (w^a^+b^)$

換個標記方法:

$$z^ = (w^a^+b^)$$

$$a^ = \sigma (z^)$$

整個流程就是這樣的:

當然了,$a^$還可以再向上推一層,不過這不重要。

這些東西都是數字,我們可以想象,每個數字都對應數軸上的乙個位置。我們第乙個目標是來理解代價函式對權重$w^$的微小變化有多敏感。換句話說,求$c_0$對$w^$的導數。

根據鏈式法則:

$$\frac} = \frac}}\frac}}\frac}\\\frac}=2(a^-y)\\\frac}}=' (z^)\\\frac}}=a^\\$$

所以$$\frac}}\frac}}\frac}=a^' (z^)2(a^-y)\\$$

$$\frac} = \frac\sum _^\frac}$$

當然了,對偏置求導數也是同樣的步驟。

$$\frac} = \frac}}\frac}}\frac}=1' (z^)2(a^-y)\\$$

到這裡,我們可以看每層不止乙個神經元的情況了。

深度學習筆記(三 之反向傳播

老規矩 妹妹鎮樓 得到損失函式以後,我們要根據損失函式來優化我們的模型,即優化w引數,更新w引數,使得損失值越低越好。這是反向傳播的過程。那麼,我們如何來優化w引數呢?這裡,我們就要計算每個w引數對於最終的損失值的重要程度。若某個w引數越大,損失值也越大,則說明應該將w引數減小。若某個w引數越大,損...

三 PyTorch 深度學習 反向傳播

import torch x data 1.0 2.0 3.0 y data 2.0 4.0 6.0 w torch.tensor 1.0 w的初值為1.0 w.requires grad true 需要計算梯度 defforward x return x w w是乙個tensor defloss ...

PyTorch深度學習實踐 反向傳播

pytorch深度學習實踐 完結合集 嗶哩嗶哩 bilibili 目錄在之前課程中介紹的線性模型就是乙個最簡單的神經網路的結構,其內部引數的更新過程如下 對於簡單的模型來說可以直接使用表示式的方式來更新權重,但是如果網路結構比較複雜 如下圖 直接使用解析式的方式來更新顯然有些複雜且不太可能實現。反向...