所謂模型訓練的損失是指預測和實際的差異,也就是統計上的殘差。在機器學習中損失函數其實有很多種,有我們常見的均方誤差(mean squared error) 交叉熵(Cross Entropy)等。
梯度下降演算法可以透過更新模型參數來降低損失,在調整w值和b值的過程中,距離最佳值很遠的時候,損失值會急劇下降,但越接進最佳值下降幅度會越小,到一定程度後損失值不減反增時,可能就是過度訓練了。
梯度下降就是模型參數的變化率,然後再跟著下降的方向更新參數,我們可以針對w或b加減一個正數值x,並計算損失對其的變化率。
損失對w的變化率=(w+x)時的損失 - (w-x) 時的損失 /2x
若算出來的是負數,代表損失減少,應該要將w加大,而算出是正數時則相反。損失變化率在改變前後可能會差異較大,所以會我們會乘上一個很小的數字縮小他的影響,使其不會一次改變急遽,而我們通常稱他為學習率。
learning rate = 1e-2
是以科學記號表示,e是10而跟在後面的數字是指數,e-2 = 0.01。
我們將損失變化率的計算式寫成程式碼可以表示為:
x = 0.2
loss_rate = (loss_fn(model(t_u, w+x, b),t_c)-loss_fn(model(t_u, w-x, b),t_c))/2*x
w = w - learning_rate * loss_rate
重複執行以上步驟,最終會得出一組讓損失達到最小的值。
若要將w和b的區間變成無限小,以免變動太快時,變化率就相當於計算損失對模型參數的微分導數,而將微分導數放入向量中就是梯度。
對於有大量參數的模型而言,給每個參數個制訂一個學習率會非常耗時,所以若要尋求一個簡單的做法,我們可以透過調整輸入資料,將它固定在一個範圍之中,如此一來就可以降低梯度之間的差異,讓他們共用一個學習率。
但若經過調整,損失仍然沒有降成零,可能是因為有雜訊,除此之外也很難預測的完全準確,但我們能避免的就是因為訓練不足而造成的。