1. 程式人生 > >大規模機器學習

大規模機器學習

如何 維度 方法 精確 情況 函數 變化 學習 align

第十三講. 大規模機器學習——Large Scale Machine Learning

=============================

(一)、為什麽要大規模機器學習?

(二)、Stochastic和Batch梯度下降

(三)、Mini-Batch梯度下降

(四)、在線學習(Online Learning)

(五)、MapReduce和並行計算原理

=====================================

(一)、為什麽要大規模機器學習?

一、為什麽需要大數據? "We have already seen that, one of the best ways to get a high performance machine learning system is, if you take a low bias learning algorithm and train that on a lot data." 也就是說,"得到一個性能好的機器學習系統的最好方法之一,是確定一個低偏差的學習方法,然後用很多數據來訓練它"。 這麽說是因為,我們在前面的章節(見Rachel Zhang博客)探討過一個好的學習算法需要同時具備低偏差(bias)和低方差(variance)
兩個特點。所以,當我們的學習算法是一個低偏差的方法時,這時我們只需要增加數據盡可能地降低模型的方差,就可以了。 因此,在機器學習領域有這樣一種說法:It‘s not who has the best algorithm that wins. It‘s who has the most data. 二、怎麽確定是時候增加數據量來提高模型性能了? 數據量也並不是一味地增加就好了。 首先,數據量增加,計算量就會隨之增大,這非常影響訓練的效率。 其次,我們需要判斷當前的算法本身、數據特征等因素是否具備增大數據集可以繼續提高算法性能的條件。這在之前章節也有過說明,增大數據集並不是在任何時候都具有提高模型性能的作用。舉例說明如下圖: 技術分享
當數據量m=1000時,如果損失函數的曲線如左圖所示,說明當前的模型具有high variance,右圖則說明是high bias。 當處於右圖high bias的情況時,繼續增大數據量並沒有多大幫助,相反這時候應該增加特征維度、增加神經網絡隱藏單元等等,這可能會使曲線從右圖變成左圖的樣子。 然後,當處於左圖high variance情況時,就適合增加數據量來提高模型性能了。 二、對比二者算法 技術分享 如上圖所示,二者的主要區別在於,Batch是對所有樣本的損失函數和值求相對模型參數的偏導,而Stochastic則是對某個樣本的損失函數求相對模型參數的偏導,每求一個樣本的偏導更新一次模型參數。 三、對比二者收斂方式
技術分享
如上圖的右圖所示,紅色表示Batch Gradient Descent的收斂曲線(即損失函數值的變化趨勢),粉色則表示Stochastic Gradient Descent的。紅色曲線可以保證每次叠代損失函數值都會減小,直至global minimum;粉色曲線則比較“曲折”,它並不能保證每次叠代都使損失函數值減小,但可以保證整體呈減小的趨勢,最後收斂至global minimum附近,而非精確的global minimum。 有一個不常被用到但make sense的做法,可以讓算法在global minimum附近更接近global minimum,即使學習率alpha動態變化而非固定常數,使alpha值隨著叠代次數而遞減,如alpha = A / ( iterationNumber + B )。當模型參數接近global minimum的時候,減小學習率(步子邁小點),可以避免在最優值附近跳變,慢慢收斂至最優值。之所以這個策略不常被用到,是因為它引入了另外兩個參數變量,所以不推薦。 需要額外說明的一點是,Stochastic Gradient Descent的第一步是Randomly shuffle dataset,這樣做是因為Stochastic Gradient Descent是通過逐一計算某個單一樣本的損失函數的導數值來更新模型參數的,且並非每個樣本的計算都會使整體損失函數值J減小,那麽當選取的第一個樣本或樣本的遍歷順序不同時,結果都有可能是不同的。為了使優化結果和這些因素無關,最好計算前先打亂一下數據。 四、如何判斷隨機梯度下降算法的損失函數何時收斂? 技術分享 如上圖所示, Batch Gradient Descent:通過畫損失函數J關於叠代次數的曲線,來判斷J的值是否在不斷下降,判斷算法是否在收斂,或判斷當前是處於high variance還是high bias。 Stochastic Gradient Descent:每1000次叠代(即 The algorithm has seen 1000 new examples)以後,計算這1000個樣本平均的損失函數值;再經過1000次叠代,再計算一次平均值,以此類推,然後將此平均值描繪成曲線,觀察1000個樣本的平均損失函數值是否在遞減。 下面畫幾個例子,闡述一下怎麽通過上述曲線來分析Stochastic Gradient Descent目標函數的收斂性。如下圖所示,逐一分析: 技術分享 右上:藍色曲線表示每1000次叠代描一個點,紅色表示5000。這個對比說明,由於Stochastic Gradient Descent並不能保證每次叠代都下降,所以也就不能保證每1000或5000次叠代的平均損失值都下降,所以曲線不會像Batch Gradient Descent的J曲線那樣平滑,但5000的紅色曲線要比1000的更平滑一些,1000的毛刺更多,這個很好理解(樣本越多,方差自然越小)。 左上:紅色曲線比藍色曲線對應的學習率要小。這個對比表明,學習率較小時,Stochastic Gradient Descent更容易收斂至最優解。這是因為下降得慢時,該算法更容易在global minimum附近緩慢逼近global minimum。簡單理解,步子小一點,到達目的地的誤差就較小。 左下:藍色1000,粉色和紅色都是5000,表示兩種可能性。這個圖表明,當我們畫的1000的結果看起來並不收斂時,畫出來的5000的結果有可能收斂有可能不收斂。粉色表示不收斂,這種情況就說明算法確實有問題,可能需要改變數據特征、減小學習率等措施。紅色表示依舊收斂,只是1000個樣本太少,畫的曲線體現不出來下降的趨勢而已。 右下:藍色曲線表示算法是發散的,應該采取減小學習率等措施。

=====================================

(三)、Mini-Batch梯度下降 一、概念 Batch Gradient Descent:每次叠代用所有的m個樣本 Stochastic Gradient Descent:每次叠代僅用1個樣本 Mini-Batch Gradient Descent:每次叠代用b個樣本,1 < b < m 二、算法 算法如下圖,與上面兩種梯度下降法對比著看就很清晰了,這裏不再做過多闡述。 技術分享 三、優點 主要是Vectorization,即可進行矩陣向量運算,實現並行運算。而Stochastic Gradient Descent每次叠代只有一個樣本計算,向量化不向量化都一樣,無法實現多個樣本並行計算。所以如果Mini-Batch Gradient Descent算法的向量化或並行運算做得好,會比Stochastic Gradient Descent效率更高。 四、缺點 又多了個參數b,不過這個用經驗值2~100即可

=====================================

(四)、在線學習(Online Learning) 當你的數據集很大且在不斷增加時,在線學習算法可以只用新增的數據對已有的模型進行微調,而不必考慮以前已經參加過模型訓練的舊數據,新模型可以更好地適應新數據。舉個實際的例子: 技術分享 當新數據(x, y)來到時,我們用類似Stochastic Gradient Descent的方法,對模型參數進行一次叠代,更新模型。 這種在線學習方法的優勢在於,can adapt to changing user preference。比如說上面的例子,經濟好時人們願意花更多的運費;反之則不然。隨著經濟好壞,user preference is changing,那麽根據新數據的變化,我們的模型通過在線學習算法便可以捕捉到這種變化。

=====================================

(五)、MapReduce和並行計算原理 一、MapReduce原理 對於大規模機器學習,很多人認為MapReduce甚至比梯度下降法的理論知識更重要,這是因為數據多的時候運算量就很大,運算效率就成為了大規模機器學習的瓶頸。而MapReduce就是解決這個瓶頸的一個有效方法。 如下圖所示,當數據量m=4億,可以將其平均分為4個數據集,在4臺機器上同時計算(即所謂的並行運算),最後在另一臺機器上combine起來,這樣計算效率可以優化3/4,一般不到3/4,因為數據在不同的機器間的傳輸耗時也是不可忽略的。類似的思路,也可以在同一臺機器上,將數據集平均分配給多個CPU核進行處理,這種方式就省去了數據傳輸時間。 技術分享 二、MapReduce的適用條件 when a learning algorithm can be expressed as computing sums of functions over the training set(一般都滿足) 也就是說,當目標函數或其相對參數的偏導數又或者參數更新公式,可以寫做關於樣本數據的求和運算時,就可以將數據分配到多個機器或者多個core做並行運算了。

大規模機器學習