Loss Function入門解說

Sharon Peng
7 min readJan 12, 2025

--

前一篇已經介紹完Neural Network的架構了,這邊要來解釋,上篇所述的架構,要如何被「訓練」?以下說明皆是來自MIT 6.S191:Introduction to Deep Learning的上課筆記,以及理解思路。如有興趣的話,可以直接到Youtube觀看,得到第一手的資訊!

怕大家看到太多數學符號會很頭痛,因此這篇,只會闡述「觀念」的部分,但還是會把數學符號放上去。如果想要有更近一步的了解,還請參考其他資料~~

損失函數(Loss function, Objective function, Cost function)

損失函數的目的是評估「目前算出來的結果」和「實際的答案」還有多少的「誤差」。

f(x) 代表預測結果、y 代表實際答案

*備註:下方公式最前方除上n,代表計算大家「平均」的Loss。

而計算Loss的方法有很多種,常見的有

Binary Cross Entropy Loss

Mean Squared Error Loss

有了計算「誤差」的方法後,現在就來看要如何「縮小」目前的結果和實際的答案還有多少的「誤差」。也就是最佳化Loss function的方法!!

最佳化誤差(Loss Optimization)

這邊請各位讀者想想喔,神經網絡中,有哪個東西是可以改變、哪些不行呢?
Ans: 輸入(X)不行、其他function也幾乎都是固定的,
對了!「w1, w2, w3, … 可以變!!」,所以就拿它來下手吧。

因此,我們的目標是想要找到一組W(權重值),可以得到最小的Loss Function,更動的方法請參見下圖。

注意:argmin的意思是「使後面這個式子達到最小值時的變量的取值」
J(W)是前面說到的經過Loss function後的「誤差值」

而我們知道其實loss function就只是個function對吧(數學組成)。Divide & Conquer 的精神!從小範圍開始,假設weight只有兩個值,因此可以畫出下面三維的圖形。

好了進入重點,要怎麼尋找「最佳化的loss function呢?」

從圖片看到這張圖是由w0, w1 和loss functionJ(w0, w1) 所組成的,而一開始的w0, w1 都是隨便亂猜的,可想得知最初得到的「誤差值」一定很大。

如何縮小「誤差值」?

我們知道Loss function其實就是數學的函式對吧,所以也用數學的方式來解決,那當然可以用「導數(微分)」的方法來找到極值,或稱梯度值(Gradient),進而移動w0, w1 ,來縮小誤差值。有了以上概念,下方為步驟式的說明。

步驟一:隨機的產生的w0, w1

步驟二:計算loss function的梯度值(Gradient)。然而梯度值所帶有的含義是跟我們說「前往loss function極大值的『方向』」。

步驟三:步驟二告訴我們「前往loss function極大值的『方向』」。由於我們的目的是要縮小誤差值,因此要反方向走才能找到loss function最小的地方。

步驟四,更新weight(w0, w1)值後,再不斷重複2~3的動作。直到慢慢收斂。

尋找損失函數總流程(演算法)

怎麼計算Gradient?

Backpropagation,其實就是逐項「偏微分」。

這邊就不進一步的說明囉,有興趣的讀者可以多喔查資料。

接下來會說明一些訓練會遇到的參數。

學習速率(Learning Rate)

參數目的:決定「梯度方向移動」的快慢。

要怎麼設定這個Learning Rate呢?

假設設置的很大,很有可能會讓梯度值在過程中,不小心就跑過頭了,
如下圖

設固定而且小小的learning rate效果還不錯~

而目前主流的設置方法:

適應性學習速率(Adaptive Learning)隨著模型的訓練而逐漸改變,一開始Learning Rate很大(移動的步伐很大),到後面Learning Rate會設定的越來越小。

接下來會說明兩個在訓練時可能會面臨的問題。

問題一:

更新weight「迭代」方式,也同樣會影響學習的速度(效果)。因此來介紹另一種更新方式 — 隨機梯度下降法(Stochastic Gradient Descent, SGD)和Mini-batch

隨機梯度下降法(Stochastic Gradient descent)

前面所說概念都是「一次把整個資料進行更新(Batch gradient descent)」。如果資料筆數不多,執行效果可能還不錯。假如資料有上百萬筆的話,weight更新速率的效果可能就不會像現在這樣那麼好了。

要換個方法更新weight才行!

而另一種替換Batch gradient descent的方法,就是Stochastic gradient descent(也稱 Iterative or Online gradient descent),比起一次更新一大筆資料的weight值,改成以「單筆單筆資料」,來做更新。

每經過一筆資料後,weight就更新一次。

Mini-Batch gradient descent

方法二,介於「一整批」(Batch gradient descent )和「單個單個」的更新方式 — Mini-batch learning。

比起一般的 Batch gradient descent,需要對「整筆資料」做更新。Mini-batch,則會設定某個數值來做更新。假設是 Mini-batch設定35好了,

代表每經過35筆資料,會更新一次 weight值。

而 Mini-batch會比 Batch gradient descent更容易收斂(convex),因為他更新的次數更多。

問題二:

Overfitting

怎麼解決?

Regularization

Regularization I— Dropout

背景:訓練過程發現,有些neural都沒在工作,而有些neural工作量太大,為了平均大家的工作量,讓那些工作量大的neural休息休息。

怎麼實作?

概念:在訓練過程,將某些neural的activation function設置為0。

Regularization II — Early Stopping

概念:在overfitting前,停止訓練。

That’s All guys!

呼!又打完一篇(擦汗),希望能幫助到各位讀者~~
也謝謝各位讀者看我再度展現麻瓜說書的技能

那我們就下次再見囉~~

--

--

Sharon Peng
Sharon Peng

No responses yet