臺大李巨集毅--梯度下降Gradient Descent
一:簡單梯度下降
1. 概述
預測模型為
,真實標籤為
,則損失函式loss function為
我們目的是最小化 損失函式L(w,b),即找出最佳的
即
處理方法 : 梯度下降法
2. 僅含一個引數的梯度下降
對某一個引數的偏導數,就是對損失函式在這個引數的方向的斜率
即,就是
然後,不對向極點逼近
3. 含多個引數的梯度下降
我們可以多個引數 列在一起,變成一個列向量。
同時,通過鏈式法則,直接可以求出每一個點的偏導數的值
梯度下降可能會出現一些問題。
1. 我們下降到一個區域性最優值,但是不是全域性最優值。
2. 下降到下圖中第二種情況。這個地方的導數也是為0。但是也不在最優點,而且可能離最優點很遠
3. 下降到下圖中第一種情況。這個地方的導數約為0。而且離最優點更遠
以上三種情況,都會對結果產生影響。
但是,線上性迴歸中,不用考慮這種問題。因為,線性迴歸的loss fuanction 損失函式是
,即是平方。所以是個凸函式,呈現一個碗狀。有且僅有一個最優值。上面三種情況不會出現。
二: Tuning your learning rates 與 Adagrad演算法
1. 回顧
問題 最小化L , 求對應的引數
方法:梯度下降,如下
2. 使用可變 learning rates
在多個變數情況下,我們畫不出左圖的情況,但是可以畫出右圖的情況。所以,編程式碼時,要畫出右圖,時時關注曲線變化,才能夠找到自己的learning rates是否設定的合理
如上圖所示,左右兩圖對照著看
1. 紅色表示learning rates 正好
2. 藍色表示learning rates 過小,可以到達谷底,但是速度太慢,如右圖
3. 綠色表示learning rates過大,先下降很快,但是最後卡在了一個地方,就是下降不下來
4. 黃色表示learning rates太大,直接飛出去了,損失函式不僅沒降下來,還增大了
發現,learning rates 的不同,直接影響了最終結果的好壞。因此有了,時時改變learning rates的想法。
基本想法:
learning rates 不能一成不變。根據引數的不同,給出不同的learning rates
1. 一開始, 離目的地遠,所以learning rates可以大一些。即,一次跨大步子大。
2. 幾個回合後,離得目的地近,調小learning rates,避免出現上圖中綠色線一樣,最終卡得不能走下去。
比如
3. Adagrad 演算法
普通梯度下降
Adagrad 演算法
其中:
所以,最終Adagad演算法核心為:
三: Stochastic Gradient Descent 隨機梯度下降
Make the training faster
訓練速度明顯優於上面的梯度下降
原理: 一次僅僅處理一個數據,進行更新引數。等每個資料都處理了一遍,引數也就更新完了。
實驗表明,
1. 假如有20個數據,每次僅僅處理一次資料,處理20次 ——————隨機梯度下降
2. 直接20個數據一次處理完,僅處理一次——————————普通梯度下降
以上兩種情況,第一次的速度明顯優於第二次。
四: Feature Scaling 特徵標準化
比如:
為什麼要將特徵標準化???
如上圖所示,左圖特徵不在一個量級,右圖特徵在一個量級。那麼左圖等高線影象為不規則橢圓,右圖等高線影象接近與圓。
對二者都進行梯度下降。如圖所示,你會發現,
左圖梯度下降很曲折,走了很多彎路,且很容易到達區域性最優,且當learning rates取得不合適時,根本走不到谷底。
但是右圖就很容易達到最優值,達到谷底。
一種標準化的方法:
對於每一個特徵:
此時每一個維度 平均值都為0 。方差都為1。
四: 梯度下降數學解釋(梯度下降與泰勒級數)
一元泰勒級數
多元泰勒級數(二元)
僅僅保留一階導數叫做 梯度下降。
用二階導數 就是 Hessian矩陣。
多元泰勒級數與梯度下降
那麼梯度下降,就是梯度方向一小步一小步向下走,走到最低端。如下圖。
在二元泰勒級數上,我們去掉高階導數,僅僅留一階導數
要找到最小的
最小化L
同時點
要在紅色小圓內,所以
令
則
其中s是常數,不變,那麼就是怎樣最小化
與(u,v)兩個向量的點積。
兩個向量的點積什麼時候最小?
=
則,兩個向量的模值最大,且方向相反(即180度)。此時兩個向量的點積最小。
有
方向必須在圓內,所以點最佳在圓上。
所以
則
即
綜上: