1. 程式人生 > >Machine Learning第十講【大規模機器學習】

Machine Learning第十講【大規模機器學習】

本部分主要包括如下內容:

      Learning With Large Datasets (大資料集訓練模型)

      Stochastic Gradient Descent (隨機梯度下降演算法)

      Mini-Batch Gradient Descent (小批量梯度下降演算法)

      Stochastic Gradient Descent Convergence (隨機梯度下降演算法的收斂)

      Online Learning (線上學習機制)

 

一、Learning With Large Datasets(大資料集訓練模型)

這部分內容和之前的 Machine Learning第六講[應用機器學習的建議] --(二)診斷偏差和方差有重合部分,這裡不再展開,引一個題目再次說明一下:

 

這個題目對應的點,也就是高方差和高偏差的情況,應該使用什麼解決方案,這個之前的那篇部落格有詳細方案:

二、Stochastic Gradient Descent(隨機梯度下降演算法)

下面是隨機梯度下降演算法的過程以及和批量梯度下降演算法的異同:

 

隨機梯度下降演算法是先只對第1個訓練樣本計算一小步的梯度下降,即這個過程包括調參過程

樣本,對第2個訓練樣本計算一小步的梯度下降,這個過程也包括調參,接著轉向第3個訓練

樣本......

批量梯度下降和隨機下降演算法的收斂過程是不同的,實際上,隨機梯度下降是在某個靠近全域性

最小值得區域內徘徊,而不是真的逼近全域性最小值並停留在那個點,不過其最終也會得到一個很接近全域性

最小值的引數。這對於絕對大多數的實際 應用的目的來說,已經足夠了。

隨機梯度下降演算法收斂比較快。

 

三、Mini-Batch Gradient Descent(小批量梯度下降演算法)

小批量梯度下降演算法是介於批量梯度下降演算法和隨機梯度下降演算法之間的 一個演算法。

  • 批量梯度下降演算法:每次迭代中使用所有(m個)樣本
  • 隨機梯度下降演算法:每次迭代中使用1個樣本
  • 小批量梯度下降演算法:每次迭代中使用b個樣本(b在2~100之間)

假設b取10,則小批量梯度下降演算法如下:

 

使用小批量梯度下降演算法,在處理了前10個樣本之後,就可以開始優化引數θ,因此不需要掃描整個訓練集,因此小批量梯度下降演算法比批量梯度下降演算法快。

小批量梯度下降演算法在有好的向量化實現時,比隨機梯度下降演算法好,在這種情況下,10個樣本求和可以使用一種更向量化的方法實現,允許部分平行計算10個樣本的和。
 

四、Stochastic Gradient Descent Convergence(隨機梯度下降演算法的收斂)

先來看一下,我們在批量梯度下降和隨機梯度下降中應該怎麼判斷演算法是否收斂:

在批量梯度下降演算法中,根據J的收斂判斷,在隨機梯度下降演算法中,若是1000次迭代,我們使用每次迭代的最後1000個樣本的平均值為點作圖,對於圖形對應的分析如下:

 

圖①中:

藍色的曲線在A點,說明演算法已經趨於收斂,因隨機梯度下降演算法不直接收斂於最小值,因此最後會來回震盪。

若減小學習速率α的值,則可能會出現紅色的曲線,其收斂於B點,因α變小,所以收斂速度變慢,且因為α較小,最後震盪的幅度也比較小。

圖②中:
1000個訓練樣本得到了藍色的曲線,若將樣本數從1000增加到5000,則會出現紅色的更加平滑的曲線。。

圖③中:

藍色的直線一直很平坦,說明演算法並沒有很好地學習。

若增大樣本數量到5000,可能會出現紅色曲線。若增大樣本數量,仍然得到紫色曲線(即仍然是平坦的),則說明演算法確實沒有學習好,需要調整α或者改變特徵等。

圖④中:

若出現不降反增的情況,說明演算法正在發散,需要減小α的值

總結:

         之所以曲線是來回震盪的,是因為有噪音

         若曲線看起來噪音很大,或是老 是上下波動,則試試增大你要平均的樣本數量

         若發現代價值在上升,那就換一個小點的α值

我們知道,隨機梯度下降演算法最後不會收斂於某一個最優值,而是會在最優值邊緣來回震盪,在大多數的隨機梯度下降演算法中,學習速率α一般是保持不變的,若你確實想要隨機梯度演算法收斂於全域性最優值,可以隨時間的變化減小學習速率α的值,所以,一種典型的方法設定α的值是:

α=const1/(iterationNumber+const2),其中iterationNumber是指梯度下降的迭代次數。在這個公式中,隨著迭代次數的增加,α的值越來越小,因此每一步越來越小,直到最終收斂到全域性最小值。但是調整const1和const2比較繁瑣,若能夠得到一個很好的結果,則演算法在最小值處的震盪越來越小。

一般情況下,我們會直接給α一個常數,而不是給出const1和const2,因為確定const1和const2這2個常數比較繁瑣,而且在平時的實踐應用中,結果在最小值處震盪的情況我們能接受,能夠滿足我們的需要。

 

五、Online Learning(線上學習機制)

例項1:

假設有一個線上包裹系統,使用者將包裹從A地運往B地,網站會給出一個價格,使用者可能會接受此價格(y=1)或者不接受(y=0)。

特徵x用於儲存使用者的屬性、出發地、目的地和網站給出的價格,我們希望去學習P(y=1|x;θ)去優化價格,我們可以使用Logistic迴歸或者神經網路來學習,先來考慮logistic迴歸。

假設你有一個連續執行的網站,則線上學習的流程如下:

Repeat forever{

Get (x, y) corresponding to user

Update θ using (x, y)

   ( j = 0, ... , n)               

}

演算法之所以沒有使用,是因為線上學習機制將某一樣本完之後,就丟棄這個樣本。因此若你有很多連續的資料流,線上學習機制將會非常有效,而若你只有少量資料,則選擇其他的演算法而不選擇線上學習。

線上學習演算法可以對正在變化的使用者偏好進行調適,特別地,隨著時間的變化,大的經濟環境發生變化,使用者們可能會對價格變得非常敏感,然後願意

支付更高的價格,又或者,有一批新的型別的使用者湧入網站,線上學習演算法可以根據變化著的使用者偏好進行調適,而且從某種程度上可以跟進變化著的

使用者群體所願意支付的價格。


線上學習系統能夠產生這種作用的原因是隨著時間的變化,引數θ不斷變化和更新,會逐漸調適到最新的使用者群體所應該體現出來的引數。

例項2:

產品搜尋:通過使用者搜尋的關鍵詞推薦使用者最有可能點選的10部手機。

x用於儲存手機的的特徵、使用者搜尋匹配這部手機名稱的詞數、使用者搜尋匹配這部手機描述的詞數等。

若使用者點選這部手機, y=1;否則,y=0。

學習P(y=1|x; θ)。

例項3:

學習應該展示給使用者什麼特別地優惠資訊、選擇使用者感興趣的新聞文章......

線上學習機制與隨機梯度下降演算法非常相似,只是在線學習不是使用一個固定的資料集,而是從一個樣本中學習之後丟棄這個樣本,如果你有一個連續的資料流,那麼這個演算法非常值得考慮。

線上學習的優點:若你有一個變化的使用者群,又或者你正在預測變化的事情,線上學習可以慢慢調適到好的假設以便適應使用者的最新行為。

 

六、Map Reduce and Data Parallelism(對映約減和資料並行)

對映約減即利用並行的原理,將資料的計算分散到若干臺機器上,以增加速度:

 

上述例子是將資料分散到4臺機器上,這樣執行效率理論上會增加4倍,但是實際上因為網路延遲等一些其他原因,

效率增加不到4倍。

上面的情況是利用若干臺機器,將資料的計算分散到各臺機器上,實際上,我們也可以在一臺計算機上實現

Map Reduce,即利用現代計算機的多核系統,將訓練樣本分成幾份,每個核處理其中一部分,也能實現並行的效果,

而且因為資料始終還是在一臺機器上執行的,因此不存在網路延遲的影響。