農林漁牧網

您現在的位置是:首頁 > 畜牧業

神經網路背後的數學原理:反向傳播過程及公式推導

2022-03-18由 資料派THU 發表于 畜牧業

網路圖總時差如何計算

清華大資料軟體團隊官方微信公眾號

本文

約3500字

,建議閱讀

5分鐘

如何計算隱藏層中的誤差?微積分和這些有什麼關係?

反向傳播是神經網路透過調整神經元的權重和偏差來最小化其預測輸出誤差的過程。但是這些變化是如何發生的呢?如何計算隱藏層中的誤差?微積分和這些有什麼關係?在本文中,你將得到所有問題的回答。讓我們開始吧。

在瞭解反向傳播的細節之前,讓我們先瀏覽一下整個神經網路學習過程:

神經網路是如何進行學習的?

神經網路中的學習過程分為三個步驟。

第 1 步:將資料輸入神經網路。該輸入資料順序透過神經網路的不同層,並在最終輸出層產生輸出或預測。資料從輸入層流向輸出層的整個過程稱為前向傳播。我們將在下面看到前向傳播的細節。

第 2 步:現在有了輸出,我們計算輸出中的損失。我們有很多計算損失的選項,例如均方誤差、二元交叉熵等,如何計算損失是根據不同的目標來定義的。

第 3 步:計算損失後,我們必須告訴神經網路如何改變它的引數(權重和偏差)以最小化損失。這個過程稱為反向傳播。

神經網路中的前向傳播

NN 基本上由三種類型的層組成。輸入層、隱藏層和輸出層。透過 NN 的資料流是這樣的:

資料第一次在網路中向前流動時,將需要訓練神經網路的輸入或特徵輸入到輸入層的神經元中。

然後這些輸入值透過隱藏層的神經元,首先乘以神經元中的權重,然後加上一個偏差。我們可以稱之為預啟用函式。

預啟用函式之後就是啟用函式。有很多啟用函式,例如 sigmoid、tanh、relu 等,啟用函式的作用是加入非線性的因素。

最後一層是輸出層,其中顯示了神經網路的計算輸出。

損失函式

當輸入透過向前傳播產生輸出後,我們可以在輸出中找出誤差。誤差是預測輸出和期望的真實值之間的差異。但在神經網路中通常不計算輸出中的誤差,而是使用特定的損失函式來計算損失,並隨後在最佳化演算法中使用該函式來將損失降低到最小值。

計算損失的方法有很多,如均方誤差、二元交叉熵等。這些使用那個損失是根據我們要解決的問題來選擇的。

梯度下降演算法

反向傳播的全部思想是最小化損失。我們有很多最佳化演算法來做到這一點。但為了簡單起見,讓我們從一個基本但強大的最佳化演算法開始,梯度下降演算法。

這裡的想法是計算相對於每個引數的損失變化率,並在減少損失的方向上修改每個引數。任何引數的變化都會導致損失發生改變。如果變化為負,那麼我們需要增加權重以減少損失,而如果變化為正,我們需要減少權重。我們可以用數學方式將其寫為,

其中梯度是損失函式相對於權重的偏導數。學習率只是一個縮放因子,用於放大或縮小梯度。在接下來的文字中更詳細地解釋了它。相同的公式適用於偏差:

new_bias = old_bias - learning_rate * gradient

其中梯度是損失函式相對於偏差的偏導數。

看看下面的圖表。我們繪製了神經網路的損失與單個神經元權重變化的關係圖。

神經網路背後的數學原理:反向傳播過程及公式推導

現在我們可以看到曲線中有很多區域性最小值(所有下凹曲線),但我們感興趣的是將損失降低到全域性最小值(最大的下凹曲線)。假設我們的權重值現在接近示例圖中的原點(假設為 1,因此我們的損失接近 4)。

神經網路背後的數學原理:反向傳播過程及公式推導

在上圖中權重值約為3的時候損失最小。

所以我們的演算法必須能夠找到這個權重值(3),來使得損失最小。所以權重的改變應該與損失成某個比例。這就是為什麼梯度是由損失相對於權重的偏導數給出的。所以梯度下降演算法的步驟是:

計算梯度(損失函式相對於權重/偏差的偏導數)

梯度乘以學習速率。

然後從權重/偏差中減去梯度乘以學習速率。

對以上操作進行迭代,直到損失收斂到全域性最小值。

神經網路背後的數學原理:反向傳播過程及公式推導

關於梯度的更多資訊

由於直線的斜率可以使用通用斜率公式計算:

神經網路背後的數學原理:反向傳播過程及公式推導

取直線上相距一定距離的兩點,計算斜率。當圖形是一條直線時,這種計算梯度的方法給出了精確的計算。但是當我們有不均勻的曲線時,使用這種方式計算梯度一個好主意。因為這些圖中的每個點的損失都在不斷變化,尤其是當曲線不規則時,如果我們可以使我們計算斜率的鄰域或距離無限小呢?這樣不就可以計算最準確的梯度值了嗎?

對,這正是透過計算 y 相對於 x 的導數所做的。這為我們提供了 y 相對於 x 的瞬時變化率。瞬時變化率為我們提供了比我們之前的執行遞增法方更精確的梯度,因為這個梯度是瞬時的。在計算相對於權重或偏差的損失變化率時,應遵循相同的方法。損失函式相對於權重的導數為我們提供了損失相對於權重的瞬時變化率。

學習率

在計算完梯度之後需要一些東西來縮放梯度。因為有時候神經網路試圖朝著損耗曲線的最低點前進時,它可能會在每次調整其權重時採取很大的調整,調整過大可能永遠不會真正收斂到全域性最小值。你可以在下面的圖表中看到:

神經網路背後的數學原理:反向傳播過程及公式推導

正如你所看到的,損失會持續朝任何方向移動,並且永遠不會真正收斂到最小值。如果學習速度太小,損失可能需要數年的時間才能收斂到最小。因此最佳學習率對於任何神經網路的學習都是至關重要的。

因此,每次引數更新時,我們使用學習速率來控制梯度的大小。讓我重申一下上面看到的更新引數的公式。

new_weight = old_weight - learning_rate * gradient

所以學習速率決定了每一步的大小同時收斂到最小值。

計算梯度

計算的損失是由於網路中所有神經元的權重和偏差造成的。有些權重可能比其他權重對輸出的影響更大,而有些權重可能根本沒有影響輸出。

前面已經說了我們訓練的目標是減少輸出中的誤差。要做到這一點必須計算每個神經元的梯度。然後將這個梯度與學習速率相乘,並從當前的權重(或偏差)中減去這個值。這種調整發生在網路中的每一個神經元中。現在讓我們考慮只有一個神經元的神經網路。

神經網路背後的數學原理:反向傳播過程及公式推導

L-層數

w-權重

z- 預啟用函式

a- 啟用函式

y-輸出

預啟用 z 可以寫為,

神經網路背後的數學原理:反向傳播過程及公式推導

為了簡單起見,讓我們暫時忽略偏差b。

然後 z 的值由啟用函式啟用。這個例子中我們使用 sigmoid 啟用函式。sigmoid 啟用函式由符號 σ 表示。

神經網路背後的數學原理:反向傳播過程及公式推導

這個網路的輸出是 y-hat。透過使用可用的各種損失函式之一來完成計算損失。讓我們用字母 C 表示損失函式。現在該進行反向傳播了,計算損失函式的梯度:

神經網路背後的數學原理:反向傳播過程及公式推導

這個值告訴我們權重的任何變化如何影響損失。

為了計算梯度,我們使用鏈式法則來尋找導數。我們使用鏈式法則是因為誤差不受權重的直接影響, 權重影響預啟用函式,進而影響啟用函式,進而影響輸出,最後影響損失。下面的樹顯示了每個術語如何依賴於上面網路中的另一個術語。

神經網路背後的數學原理:反向傳播過程及公式推導

預啟用函式取決於輸入、權重和偏差、啟用函式依賴於預啟用函式、損失取決於啟用函式

影象右上角的 y 是與預測輸出進行比較並計算損失的真實值。

所以當我們應用鏈式法則時,我們得到:

神經網路背後的數學原理:反向傳播過程及公式推導

我們有另一個詞來指代這個梯度,即損失相對於權重的瞬時變化率。將這些從單個神經元網路的梯度計算中獲得的知識外推到具有四層的真正神經網路:一個輸入層、兩個隱藏層和一個輸出層。

神經網路背後的數學原理:反向傳播過程及公式推導

每個神經元的預啟用函式由下式給出

神經網路背後的數學原理:反向傳播過程及公式推導

L-層數

j- 計算預啟用函式的神經元的索引

z- 預啟用函式

w-神經元的權重

a- 前一個神經元的啟用輸出

除了我們沒有啟用函式的輸入層之外的所有神經元都是如此。因為在輸入層中z 只是輸入與其權重相乘的總和(不是前一個神經元的啟用輸出)。

這裡的梯度由下式給出,

神經網路背後的數學原理:反向傳播過程及公式推導

其中 w 是分別連線 L-1 層和 L 層節點 k 和 j 的權重。k 是前一個節點,j 是後繼節點。但是這可能會引發一個新的問題:為什麼是wjk而不是wkj呢?這只是在使用矩陣將權重與輸入相乘時要遵循的命名約定。(所以暫時先不管他)

下面的樹可以看到它們之間相互依賴

神經網路背後的數學原理:反向傳播過程及公式推導

可以看到,前一層節點的啟用函式的輸出作為後一層節點的輸入。如果知道以下項的值,就可以輕鬆計算輸出節點中的梯度:

誤差對啟用函式的導數

啟用函式相對於預啟用函式的導數

預啟用函式相對於權重的導數。

但是當我們在隱藏層計算梯度時,我們必須單獨計算損失函式相對於啟用函式的導數,然後才能在上面的公式中使用它。

神經網路背後的數學原理:反向傳播過程及公式推導

這個方程與第一個方程幾乎相同(損失函式相對於權重的推導)。但在這裡有一個總結。這是因為與權重不同,一個神經元的啟用函式可以影響它所連線的下一層中所有神經元的結果。

需要說明的是 :這裡沒有編寫用於推導與輸出層中的啟用函式相關的損失函式的鏈式法則的單獨方程。那是因為輸出層的啟用函式直接影響誤差。但隱藏層和輸入層的啟用函式並非如此。它們透過網路中的不同路徑間接影響最終輸出。

透過以上的計算,在計算網路中所有節點的梯度後,乘以學習率並從相應的權重中減去。

這就是反向傳播和權重調整的方式。經過多次迭代這個過程,將損失減少到全域性最小值,最終訓練結束。

還差一個偏差

偏差也以與重量相同的方式經歷一切!

與權重一樣,偏差也會影響網路的輸出。因此在每次訓練迭代中,當針對權重的損失計算梯度時,同時計算相對於偏差的損失的梯度。

神經網路背後的數學原理:反向傳播過程及公式推導

對於隱藏層,損失函式相對於前一層啟用函式的推導也將使用鏈式法則單獨計算。因此梯度被反向傳播並且每個節點的偏差被調整。

總結

當損失被反向傳播和最小化時,這就是在每個訓練迴圈期間發生的所有事情。我希望這篇文章已經消除了數學中的晦澀難懂的概念,並使用了一種簡單的方式將整個反向傳播的過程描述清楚了。如果你有什麼建議,歡迎留言。