吳恩達機器學習——第18章 大規模機器學習

格言

決定機器學習效果好壞的不是算法,而是數據。

準則

大道至簡

首先採用使用少量樣本訓練算法,如果不能達到效果的情況下,再考慮是否可以通過增加樣本的數量,來提升算法:

  • 高方差:說明擬合度過高,可以通過增加訓練樣本的方式訓練模型。
  • 高偏差:說明擬合度太低,可以通過增加特徵的方式來提升算法。

隨機梯度下降法

batch梯度下降法的問題

之前使用的梯度下降法,每次θ\theta參數的優化,都需要遍歷所有的訓練樣本,也稱之爲”batch梯度下降法“。

repeat{
θj:=θjα1mi=1m(hθ(x(i)y(i))xj(i)\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})x_j^{(i)}

(for j=0....n)

}

如果樣本數量非常大的情況下,這種方式的效率會就會變低,相對而言,隨機梯度下降法的效率會更高一些。

隨機梯度下降法的原理

隨機梯度下降法只需要遍歷一次樣本,每次使用一個樣本來更新θ\theta參數,每個樣本使用一次後就丟失掉,這樣就大大減少了訪問樣本的次數:
for( i=1;i<=m;i++){
θj:=θjα1m(hθ(x(i)y(i))xj(i)\theta_j:=\theta_j-\alpha\frac{1}{m}(h_\theta(x^{(i)}-y^{(i)})x_j^{(i)}

(for j=0....n)

}
前提是訓練之前,需要把樣本隨機打亂,否則可能會對隨機梯度下降的效果造成影響。

batch vs 隨機

在這裏插入圖片描述
如上圖所示,紅色的線代表batch梯度下降,粉色的線代表隨機梯度下降,從圖上可以看出兩者的不同:

  • batch梯度下降:由於每次θ\theta優化都對所有樣本進行計算,優化的路徑體現出來的是一個非常合理的路徑。
  • 隨機梯度下降:由於每次θ\theta優化只對一個樣本進行計算,優化的路徑提現出來一種迂迴、徘徊的形態,但是總體趨勢也是向中心走的。

隨機梯度下降,有時候接近中心後,一直在中心周圍徘徊,卻無法收斂,怎麼辦呢,請看下節。

隨機梯度下降的收斂

本節介紹隨機梯度下降收斂的一種方式:圖形法。
回憶一下代價函數:
J(θ)=12mi=1m(h(xi)yi)2J(θ)=\frac{1}{2m}\sum_{i=1}^{m}{(h(x_i)-y_i)}^2

爲了書寫方便,簡寫爲:

cost(θ,(x(i),y(i)))=i=1m(h(xi)yi)2cost(\theta,(x^{(i)},y^{(i)}))=\sum_{i=1}^{m}{(h(x_i)-y_i)}^2
然後就是計算一批cost(θ,(x(i),y(i)))cost(\theta,(x^{(i)},y^{(i)}))值,比如1000個樣本,然後取平均值來繪圖,注意,要先計算cost(θ,(x(i),y(i)))cost(\theta,(x^{(i)},y^{(i)}))再更新θ\theta

這個通過多個批次的計算後cost(θ,(x(i),y(i)))cost(\theta,(x^{(i)},y^{(i)}))就能形成一條曲線,觀察曲線的趨勢,對算法進行調優。下面看看不同的曲線,該如何調優:
在這裏插入圖片描述

  • 圖1:藍色原始曲線已經收斂的很好了,只不過看上去抖動比較大,在最小值周邊徘徊;減少學習率α\alpha之後,曲線更爲平滑。
  • 圖2:藍色原始曲線已經收斂的很好了,只不過看上去抖動比較大;增大每個批次樣本的數量後,曲線變得更爲平滑。
  • 圖3:藍色原始曲線近似平行,沒有進行收斂。在調整了樣本數量後,曲線更爲平滑,但是仍然沒有收斂。這種情況下,說明算法本身出現了問題,需要嘗試減少學習率,或增加特徵數量來優化算法。
  • 圖四:藍色原始曲線是上升的,完全沒有收斂,這時候需要減少學習率。

α\alpha的優化

學習率α\alpha的優化,是隨機梯度優化的很重要的一個環節。如果發現曲線開始收斂的效果不錯,但是曲線在臨近全局最小點時不斷徘徊,無法收斂,這種情況下,使用動態變化的α\alpha效果會比較好:隨時間不斷減少:

α=C1ite1+C2\alpha=\frac{C_1}{ite_1+C_2}

其中,C1,C2C_1,C_2是常量,ite1ite_1指的是迭代次數,這樣α\alpha就會隨着迭代次數的增加而不斷減小。

缺點是需要額外計算C1,C2C_1, C_2的值。

min-batch 梯度下降法

min-batch梯度下降是界於batch梯度下降和隨機梯度下降之間的一種算法,每次更新參數的時候,需要計算一個小批次的樣本,不是一個(隨機梯度),也不是所有(batch梯度)。

min-batch梯度下降擁有隨機梯度下降同樣的優點,同時要比隨機梯度下降效率更快。計算公式爲:
在這裏插入圖片描述
如上圖所示,每次更新θ\theta,需要計算10個樣本的值。當數據擁有更好的向量話的方式時,一個批次的樣本可以並行計算,從而提高計算的效率。

缺點就是因爲多了一個參數b(批次大小),增加了算法的複雜度。

在線學習

隨機梯度的一個應用場景就是在線學習。

假設有一個物流網站,用戶輸入起點、終點,網站給出價格,用戶決定是否需要選擇該物流服務,y=1表示選擇,y=0表示不選擇。

由於這種諮詢的次數會非常多,網站不希望把這些數據存儲下來,然後使用支持固定樣本集的學習算法進行處理。在線學習提供了另一種思路:每次使用一個樣本對模型進行優化,優化完成後拋棄該樣本,然後試用下一個樣本進行優化…。這樣就實現了一個動態改變的模型,會根據樣本的不同而實現模型的自動更新。
Repeat forever (as long as the website is running) {
Get (𝑥, 𝑦) corresponding to the current user
θ:=θjα(hθ(x)y)xj\theta:=\theta_j-\alpha(h_\theta(x)-y)x_j
(for 𝑗=0:𝑛)
}

MapReduce

只要機器學習算法能夠表達爲對數據集的求和等線性計算,就可以使用map-reduce來提升效率。

map-reduce可以把求和操作,分佈到多臺設備上並行計算,然後通過一臺設備對計算結果進行彙總,從而達到提升學習效率的目的。目前機器cpu都是多核的,map-reduce也可以在多個核心上進行並行處理,提升效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章