1. 程式人生 > >機器學習13大規模資料集

機器學習13大規模資料集

大型資料集的學習(Learning With Large Datasets)

如果我們有一個低方差的模型, 增加資料集的規模可以幫助你獲得更好的結果。 

我們應該怎樣應對一個有 100 萬條記錄的訓練集? 

以線性迴歸模型為例,每一次梯度下降迭代,我們都需要計算訓練集的誤差的平方和,如果我們的學習演算法需要有 20 次迭代,這便已經是非常大的計算代價。

首先應該做的事是去檢查一個這麼大規模的訓練集是否真的必要,也許我們只用 1000 個訓練集也能獲得較好的效果,我們可以繪製學習曲線來幫助判斷。


—————————————————————————————————————————————————————————

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

如果我們一定需要一個大規模的訓練集, 我們可以嘗試使用隨機梯度下降法來代替批量梯度下降法。

在隨機梯度下降法中,我們定義代價函式為一個單一訓練例項的代價:


隨機梯度下降演算法為:

首先:對訓練集隨機“洗牌”;

然後:


隨機梯度下降演算法在每一次計算之後便更新引數 θ, 而不需要首先將所有的訓練集求和。

在梯度下降演算法還沒有完成一次迭代時, 隨機梯度下降演算法便已經走出了很遠。 

但是這樣的演算法存在的問題是,不是每一步都是朝著”正確”的方向邁出的。

因此演算法雖然會逐漸走向全域性最小值的位置,但是可能無法站到那個最小值的那一點,而是在最小值點附近徘徊。


—————————————————————————————————————————————————————————

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

小批量梯度下降演算法是介於批量梯度下降演算法和隨機梯度下降演算法之間的演算法, 每計算常數 b 次訓練例項,便更新一次引數 θ。


通常我們會令 b 在 2-100 之間。這樣做的好處在於,我們可以用向量化的方式來迴圈 b 個訓練例項,如果我們用的線性代數函式庫比較好,能夠支援平行處理,那麼演算法的總體表現將不受影響(與隨機梯度下降相同)。

—————————————————————————————————————————————————————————

線上學習(Online Learning)

一種新的大規模的機器學習機制,叫做線上學習機制。

今天,許多大型網站使用不同版本的線上學習機制演算法,從大批的湧入又離開網站的使用者身上進行學習。

特別要提及的是, 如果你有一個由連續的使用者流引發的連續的資料流,進入你的網站,你能做的是使用一個線上學習機制,從資料流中學習使用者的偏好,然後使用這些資訊來優化一些關於網站的決策。

線上學習演算法指的是對資料流而非離線的靜態資料集的學習。

許多線上網站都有持續不斷的使用者流,對於每一個使用者,網站希望能在不將資料儲存到資料庫中便順利地進行演算法學習。 

線上學習的演算法與隨機梯度下降演算法有些類似, 我們對單一的例項進行學習, 而非對一個提前定義的訓練集進行迴圈。


一旦對一個數據的學習完成了,我們便可以丟棄該資料,不需要再儲存它了。

這種方式的好處在於,我們的演算法可以很好的適應使用者的傾向性,演算法可以針對使用者的當前行為不斷地更新模型以適應該使用者。

這些問題中的任何一個都可以被歸類到標準的,擁有一個固定的樣本集的機器學習問題中。

或許,你可以執行一個你自己的網站,嘗試執行幾天,然後儲存一個數據集,一個固定的資料集,然後對其執行一個學習演算法。

但是這些是實際的問題,即大公司會獲取如此多的資料,真的沒有必要來儲存一個固定的資料集, 取而代之的是你可以使用一個線上學習演算法來連續的學習,從這些使用者不斷產生的資料中來學習。 這就是線上學習機制。

然後就像我們所看到的,我們所使用的這個演算法與隨機梯度下降演算法非常類似,唯一的區別的是,我們不會使用一個固定的資料集,我們會做的是獲取一個使用者樣本,從那個樣本中學習, 然後丟棄那個樣本並繼續下去, 而且如果你對某一種應用有一個連續的資料流,這樣的演算法可能會非常值得考慮。

當然,線上學習的一個優點就是,如果你有一個變化的使用者群,又或者你在嘗試預測的事情,在緩慢變化,就像你的使用者的品味在緩慢變化,這個線上學習演算法,可以慢慢地除錯你所學習到的假設,將其調節更新到最新的使用者行為。

————————————————————————————————————————————————————————



Map Reduce and Data Parallelism

Map Reduce and Data Parallelism對於大規模機器學習問題而言是非常重要的概念。

之前提到, 如果我們用批量梯度下降演算法來求解大規模資料集的最優解,我們需要對整個訓練集進行迴圈,計算偏導數和代價,再求和,計算代價非常大。如果我們能夠將我們的資料集分配給不多臺計算機,讓每一臺計算機處理資料集的一個子集,然後我們將計所的結果彙總在求和。這樣的方法叫做MapReduce。

具體而言,如果任何學習演算法能夠表達為,對訓練集的函式的求和,那麼便能將這個任務分配給多臺計算機(或者同一臺計算機的不同 CPU 核心),以達到加速處理的目的。

 
例如, 我們有 400 個訓練例項, 我們可以將批量梯度下降的求和任務分配給 4 臺計算機進行處理:



很多高階的線性代數函式庫已經能夠利用多核 CPU 的多個核心來並行地處理矩陣運算,這也是演算法的向量化實現如此重要的緣故(比呼叫迴圈快)。

Map Reduce and Data Parallelism Map Reduce and Data Parallelism