梯度下降是一種數學技巧,可重複尋找權重和偏誤,產生損失最小的模型。梯度下降法會重複執行以下程序,直到達到使用者定義的疊代次數,藉此找出最佳權重和偏差。
模型會以隨機權重和接近零的偏差開始訓練,然後重複執行下列步驟:
根據目前的權重和偏誤計算損失。
判斷如何調整權重和偏差,以降低損失。
將權重和偏誤值移到較小方向上,以減少損失。
返回步驟 1,重複執行這個程序,直到模型無法再降低損失為止。
下圖概略說明梯度下降演算法執行的疊代步驟,以便找出可產生損失最低模型的權重和偏誤。
圖 12. 梯度下降法是一種反覆進行的程序,可找出產生損失最低模型的權重和偏誤。
按一下加號圖示,進一步瞭解梯度下降法背後的數學原理。
我們可以以具體的層級,使用一個小型資料集,其中包含車輛重度 (磅) 和每加侖里程數的七個範例,來逐步降低梯度下降法:
以 1000 為單位的英鎊 (功能) | 每加侖英里 (標籤) |
---|---|
3.5 | 18 |
3.69 | 15 |
3.44 | 18 |
3.43 | 16 |
4.34 | 15 |
4.42 | 14 |
2.37 | 24 |
- 模型會先將權重和偏誤設為零,開始訓練:
- 使用目前的模型參數計算 MSE 損失:
- 計算每個權重和偏誤點與損失函式的正切斜率:
- 移動負斜率方向的小幅度,取得下一個權重和偏誤。目前,我們任意將「小額」定義為 0.01:
按一下加號圖示,瞭解如何計算斜率。
為了取得與權重和偏誤相關的線條切線斜率,我們會根據權重和偏誤計算損失函式的導數,然後解出方程式。
我們會將預測方程式寫成以下形式:
$ f_{w,b}(x) = (w*x)+b $。
我們會將實際值寫為:$ y $。
我們會使用以下公式計算 MSE:
$ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
其中 $i$ 代表第 $i$ 個訓練範例,$M$ 代表範例數量。
損失函式相對於權重 (weight) 的導數可寫為:
$ \frac{\partial }{\partial w} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
,然後評估為:
$ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2x_{(i)} $
首先,我們會將每個預測值減去實際值,然後乘以兩倍的特徵值。然後將總和除以範例數量。結果是與權重值相切的線條斜率。
如果我們以權重和偏差等於零來解這個方程式,就會得到線條的斜率 -119.7。
偏差導數
與偏誤相關的損失函式導數寫如下:
$ \frac{\partial }{\partial b} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
,然後評估為:
$ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2 $
首先,我們會將每個預測值減去實際值,然後乘以 2。然後將總和除以範例數量。結果是與偏差值相切的線條斜率。
如果我們以權重和偏差等於零來解這個方程式,就會得到線條的斜率 -34.3。
使用新的權重和偏差計算損失,然後重複執行。完成六次迭代程序後,我們會取得下列權重、偏差和損失:
疊代作業 | 重量 | 偏差 | 損失 (MSE) |
---|---|---|---|
1 | 0 | 0 | 303.71 |
2 | 1.2 | 0.34 | 170.67 |
3 | 2.75 | 0.59 | 67.3 |
4 | 3.17 | 0.72 | 50.63 |
5 | 3.47 | 0.82 | 42.1 |
6 | 3.68 | 0.9 | 37.74 |
您可以看到更新後的權重和偏誤值減少了損失。在本例中,我們在六次疊代後停止。實際上,模型會持續訓練,直到「收斂」為止。當模型收斂時,額外的疊代作業不會進一步降低損失,因為梯度下降法已找到可將損失降至最低的權重和偏差。
如果模型持續訓練,直到達到收斂點,損失值就會開始小幅波動,因為模型會持續更新參數,使其維持在最低值附近。這可能會導致難以驗證模型是否已實際收斂。如要確認模型已收斂,請繼續訓練,直到損失值穩定為止。
模型收斂和損失曲線
訓練模型時,您通常會查看損失曲線,判斷模型是否已收斂。損失曲線會顯示模型在訓練過程中損失的變化情形。以下是典型損失曲線的樣貌。Y 軸代表損失,X 軸代表疊代:
圖 13. 顯示模型收斂至 1,000 次的損失曲線。
您可以看到,損失在前幾次疊代期間大幅減少,然後逐漸減少,最後在第 1,000 次疊代處趨於平坦。經過 1,000 次疊代後,我們幾乎可以確定模型已收斂。
在下列圖表中,我們會在訓練過程的三個點繪製模型:開始、中間和結尾。在訓練過程中以圖表呈現模型的快照狀態,可確立更新權重和偏差、減少損失和模型收斂之間的關聯。
在圖表中,我們使用特定疊代中衍生的權重和偏差來表示模型。在包含資料點和模型快照的圖表中,從模型到資料點的藍色損失線會顯示損失的數量。線條越長,損失就越多。
在下圖中,我們可以看到在第二次迭代時,由於損失量過高,模型無法準確做出預測。
圖 14.訓練程序開始時的損失曲線和模型快照。
在第 400 次迭代時,我們可以看到梯度下降法找到了可產生更佳模型的權重和偏差。
圖 15.損失曲線和模型的快照,大約在訓練中途。
在第 1,000 次迭代時,我們可以看到模型已收斂,產生損失最小的模型。
圖 16. 模型即將結束的損失曲線和快照。
練習:檢查您的理解程度
收斂和凸函式
線性模型的損失函式一律會產生凸面。因此,當線性迴歸模型收斂時,我們就知道模型已找到可產生損失最低的權重和偏差。
如果我們為具有一個特徵的模型繪製損失曲面圖,可以看到其凸形。以下是前述範例中使用的每加侖英哩資料集的損失曲面。權重位於 x 軸,偏差位於 y 軸,損失位於 z 軸:
圖 17. 顯示其凸面形狀的損失表面。
在此範例中,權重 -5.44 和偏誤為 35.94,的損失最低為 5.54:
圖 18. 損失曲面,顯示可產生最低損失的權重和偏差值。
線性模型會在找到最小損失時收斂。因此,額外的疊代作業只會導致梯度下降,以非常小的幅度移動權重和偏差值。如果我們繪製梯度下降法時的權重和偏誤點,看起來就像是沿著山丘向下滾動的球,最終在沒有下斜坡的位置停止。
圖 19:損失圖表顯示梯度下降點停在圖表上最低點。
請注意,黑色損失點會產生損失曲線的確切形狀:先急遽下降,然後逐漸下滑,直到達到損失曲面上的最低點為止。
請注意,模型幾乎永遠不會找出每個權重和偏誤的確切最小值,而是找出接近該權重的值。請務必注意,權重和偏差的最小值並非零損失,而是產生該參數最低損失的值。
使用產生損失最低的權重和偏差值 (在本例中為 -5.44 和 35.94),我們可以繪製模式圖表,瞭解模式與資料的吻合程度:
圖 20. 模型以產生最低損失的權重和偏誤值繪製而成。
這將是這個資料集的最佳模型,因為沒有其他權重和偏誤值會產生損失較低的模型。