Loss Function入門解說
前一篇已經介紹完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!
呼!又打完一篇(擦汗),希望能幫助到各位讀者~~
也謝謝各位讀者看我再度展現麻瓜說書的技能
那我們就下次再見囉~~