2017年5月23日 星期二

[ML] 隨機梯度下降法 Stochastic Gradient Descent

本文介紹主要分成兩部份,分別是梯度下降法,以及它的變形隨機梯度下降法

這邊推薦台大李宏毅教授的 ML Lecture 3: Gradient Descent

有詳細且深入淺出的教學

Part 1 - 梯度下降法 Gradient Descent


公式  新的權重值 = 舊的權重值 - 學習速率 * 偏微分後的梯度值  (梯度值 可以看作斜率)

Adaptive Learning Rate  演算法 Adagrad - 可以隨著訓練的週期調整學習速率(learning rate)參數


 「Gradient Descent」的圖片搜尋結果
圖一[1]

補充知識

若把 loss function 用圖二中下方的泰勒級數作簡化

圖二(擷取自上課影片)


我們可以得到圖三中的方程式 L(theta)

但是前提是x足夠靠近x0

也就是圖中的紅色圈足夠靠近點(a,b)
(當然足夠小是多小,只能從實務上的試誤法經驗判斷)

圖三(擷取自上課影片)

那怎樣能夠讓 loss function 最小?

圖四(擷取自上課影片)

讓圖五中的藍色箭頭與黑色箭頭平行,並且剛好與紅圈等長

就能夠讓 loss function 最小

圖五(擷取自上課影片)

因此,今天梯度下降法能夠使用的前提條件是圖五中的紅圈足夠小

這樣泰勒級數才會準確

對應到公式的部份,影響自己算出來的數字有沒有在紅圈中,跟學習速率也有關係

所以學習速率本身也要足夠小,不然乘出來的數字會讓兩個平方項比d平方大

因此,之前遇到學習速率參數過大,造成loss function數值突破天際的原因就在這邊

圖六(擷取自上課影片)

目前真正最困難的是,當今天梯度變化非常小的時候

程式怎麽判斷是不是就是我們要找的global min ?

這些問題都還懸而未決...


圖(擷取自上課影片)

Part 2 - 隨機梯度下降法 Stochastic Gradient Descent


如果不是很熟悉,可以從 31: 15 開始看起

為了加速梯度下降法,我們在loss function這邊作一些改變

原本的loss function計算方式如下,他是把所有的輸出與理論值相減得到誤差值e

e經過平方運後

最後把所有的訓練用資料的e平方項數值全部加總起來得到數值L

圖(擷取自上課影片)

隨機梯度下降法則是改變策略

隨機取一個 example,並進行上述公式運算 loss function值 (n = 1)

我們來針對兩者進行比較:

梯度下降法看完所有的訓練用資料才更新一次

隨機梯度下降法卻是看過一次訓練資料就更新一次

所以有n張訓練用資料,就會更新n次參數

相比之下,隨機梯度下降法比起梯度下降法還要快得到較低的loss值,訓練速度較快

(天下武功,唯快不破 ? )

圖(擷取自上課影片)


[1] 圖片來源: http://www.yaldex.com/game-development/1592730043_ch18lev1sec4.html

沒有留言:

張貼留言

/* 載入prettify的autoloader */ /* 載入JQuery */