格言
決定機器學習效果好壞的不是算法,而是數據。
準則
大道至簡
首先採用使用少量樣本訓練算法,如果不能達到效果的情況下,再考慮是否可以通過增加樣本的數量,來提升算法:
- 高方差:說明擬合度過高,可以通過增加訓練樣本的方式訓練模型。
- 高偏差:說明擬合度太低,可以通過增加特徵的方式來提升算法。
隨機梯度下降法
batch梯度下降法的問題
之前使用的梯度下降法,每次參數的優化,都需要遍歷所有的訓練樣本,也稱之爲”batch梯度下降法“。
repeat{
(for j=0....n)
}
如果樣本數量非常大的情況下,這種方式的效率會就會變低,相對而言,隨機梯度下降法的效率會更高一些。
隨機梯度下降法的原理
隨機梯度下降法只需要遍歷一次樣本,每次使用一個樣本來更新參數,每個樣本使用一次後就丟失掉,這樣就大大減少了訪問樣本的次數:
for( i=1;i<=m;i++){
(for j=0....n)
}
前提是訓練之前,需要把樣本隨機打亂,否則可能會對隨機梯度下降的效果造成影響。
batch vs 隨機
如上圖所示,紅色的線代表batch梯度下降,粉色的線代表隨機梯度下降,從圖上可以看出兩者的不同:
- batch梯度下降:由於每次優化都對所有樣本進行計算,優化的路徑體現出來的是一個非常合理的路徑。
- 隨機梯度下降:由於每次優化只對一個樣本進行計算,優化的路徑提現出來一種迂迴、徘徊的形態,但是總體趨勢也是向中心走的。
隨機梯度下降,有時候接近中心後,一直在中心周圍徘徊,卻無法收斂,怎麼辦呢,請看下節。
隨機梯度下降的收斂
本節介紹隨機梯度下降收斂的一種方式:圖形法。
回憶一下代價函數:
爲了書寫方便,簡寫爲:
然後就是計算一批值,比如1000個樣本,然後取平均值來繪圖,注意,要先計算再更新。
這個通過多個批次的計算後就能形成一條曲線,觀察曲線的趨勢,對算法進行調優。下面看看不同的曲線,該如何調優:
- 圖1:藍色原始曲線已經收斂的很好了,只不過看上去抖動比較大,在最小值周邊徘徊;減少學習率之後,曲線更爲平滑。
- 圖2:藍色原始曲線已經收斂的很好了,只不過看上去抖動比較大;增大每個批次樣本的數量後,曲線變得更爲平滑。
- 圖3:藍色原始曲線近似平行,沒有進行收斂。在調整了樣本數量後,曲線更爲平滑,但是仍然沒有收斂。這種情況下,說明算法本身出現了問題,需要嘗試減少學習率,或增加特徵數量來優化算法。
- 圖四:藍色原始曲線是上升的,完全沒有收斂,這時候需要減少學習率。
的優化
學習率的優化,是隨機梯度優化的很重要的一個環節。如果發現曲線開始收斂的效果不錯,但是曲線在臨近全局最小點時不斷徘徊,無法收斂,這種情況下,使用動態變化的效果會比較好:隨時間不斷減少:
其中,是常量,指的是迭代次數,這樣就會隨着迭代次數的增加而不斷減小。
缺點是需要額外計算的值。
min-batch 梯度下降法
min-batch梯度下降是界於batch梯度下降和隨機梯度下降之間的一種算法,每次更新參數的時候,需要計算一個小批次的樣本,不是一個(隨機梯度),也不是所有(batch梯度)。
min-batch梯度下降擁有隨機梯度下降同樣的優點,同時要比隨機梯度下降效率更快。計算公式爲:
如上圖所示,每次更新,需要計算10個樣本的值。當數據擁有更好的向量話的方式時,一個批次的樣本可以並行計算,從而提高計算的效率。
缺點就是因爲多了一個參數b(批次大小),增加了算法的複雜度。
在線學習
隨機梯度的一個應用場景就是在線學習。
假設有一個物流網站,用戶輸入起點、終點,網站給出價格,用戶決定是否需要選擇該物流服務,y=1表示選擇,y=0表示不選擇。
由於這種諮詢的次數會非常多,網站不希望把這些數據存儲下來,然後使用支持固定樣本集的學習算法進行處理。在線學習提供了另一種思路:每次使用一個樣本對模型進行優化,優化完成後拋棄該樣本,然後試用下一個樣本進行優化…。這樣就實現了一個動態改變的模型,會根據樣本的不同而實現模型的自動更新。
Repeat forever (as long as the website is running) {
Get (𝑥, 𝑦) corresponding to the current user
(for 𝑗=0:𝑛)
}
MapReduce
只要機器學習算法能夠表達爲對數據集的求和等線性計算,就可以使用map-reduce來提升效率。
map-reduce可以把求和操作,分佈到多臺設備上並行計算,然後通過一臺設備對計算結果進行彙總,從而達到提升學習效率的目的。目前機器cpu都是多核的,map-reduce也可以在多個核心上進行並行處理,提升效率。