當資料有大量的資料,比如1億以上的時候,如果想擬合乙個線性回歸或者邏輯回歸時,梯度下降演算法的計算量將是非常龐大的。
**預檢查:**為什麼不用1000個樣本,而需要用11億個?遇到高偏差問題時候,選擇合適大小的資料集即可,再增加資料集並不會改善,處理方式為尋找新的模型。如果是低方差的模型,增加資料集的規模可以幫助你獲得更好的結果。
那麼如何處理大資料樣本集情況下的梯度計算?實現梯度下降演算法?
原來的線性回歸模型的梯度下降演算法:batch gradient descend
隨機梯度下降演算法:
隨機梯度下降演算法在每一次計算之後便更新引數 θ ,而不需要首先將所有的訓練集求和,在梯度下降演算法還沒有完成一次迭代時,隨機梯度下降演算法便已經走出了很遠。但是這樣的演算法存在的問題是,不是每一步都是朝著」正確」的方向邁出的。因此演算法雖然會逐漸走向全域性最小值的位置,但是可能無法站到那個最小值的那一點,而是在最小值點附近徘徊。
![實現過程——這裡有3層迴圈!(
小批量梯度下降演算法是介於批量梯度下降演算法和隨機梯度下降演算法之間的演算法,每計算常數b次訓練例項,便更新一次引數 θ 。
通常我們會令 b 在 2-100 之間。這樣做的好處在於,我們可以用向量化的方式來迴圈 b個訓練例項,如果我們用的線性代數函式庫比較好,能夠支援平行處理,那麼演算法的總體表現將不受影響(與隨機梯度下降相同)。
具體例項:
隨機梯度下降演算法的除錯,以及學習率 α 的選取。
在批量梯度下降中,不太可能畫出代價函式和迭代次數的影象,因為計算代價函式的代價太大了。
在隨機梯度下降中,在每一次更新 θ 之前都計算一次代價,然後每x次迭代後,求出這x次對訓練例項計算代價的平均值,然後繪製這些平均值與x次迭代的次數之間的函式圖表。
當繪製這樣的圖表時,可能會得到乙個顛簸不平,但是不會明顯減少的函式影象(如上面左下圖中藍線所示)。可以增加α來使得函式更加平緩,也許便能看出下降的趨勢了(如上面左下圖中紅線所示);或者可能函式圖表仍然是顛簸不平且不下降的(如洋紅色線所示),那麼模型本身可能存在一些錯誤。
如果得到的曲線如上面右下方所示,不斷地上公升,那麼需要選擇乙個較小的學習率α。也可以令學習率隨著迭代次數的增加而減小,例如令:
隨著我們不斷地靠近全域性最小值,通過減小學習率,我們迫使演算法收斂而非在最小值附近徘徊。 但是通常我們不需要這樣做便能有非常好的效果了,對α進行調整所耗費的計算通常不值得。
將我們的資料集分配給不多台計算機,讓每一台計算機處理資料集的乙個子集,然後我們將計所的結果彙總在求和。這樣的方法叫做對映簡化。
具體而言,如果任何學習演算法能夠表達為,對訓練集的函式的求和,那麼便能將這個任務分配給多台計算機(或者同一臺計算機的不同cpu 核心),以達到加速處理的目的。
我們有400個訓練例項,我們可以將批量梯度下降的求和任務分配給4臺計算機進行處理:
很多高階的線性代數函式庫已經能夠利用多核cpu的多個核心來並行地處理矩陣運算,這也是演算法的向量化實現如此重要的緣故(比呼叫迴圈快)。
大規模機器學習
如果我們有乙個低方差的模型,增加資料集的規模可以幫助你獲得更好的結果。我們應 該怎樣應對乙個有 100 萬條記錄的訓練集?以線性回歸模型為例,每一次梯度下降迭代,我們都需要計算訓練集的誤差的平方和,如果我們的學習演算法需要有 20 次迭代,這便已經是非常大的計算代價。首先應該做的事是去檢查乙個這麼大...
大規模機器學習
如果我們有乙個低方差的模型,增加資料集的規模可以幫助你獲得更好的結果。我們應 該怎樣應對乙個有 100 萬條記錄的訓練集?以線性回歸模型為例,每一次梯度下降迭代,我們都需要計算訓練集的誤差的平方和,如果我們的學習演算法需要有 20 次迭代,這便已經是非常大的計算代價。首先應該做的事是去檢查乙個這麼大...
機器學習筆記(十)大規模機器學習
lage scale machine learnning 大規模機器學習 1 判斷是否有必要擴大資料量?使用學習曲線,觀察隨著 m 的增大,測試誤差是否有顯著下降,如高方差情況 過擬合 2 stochastic gradient descent 隨機梯度下降 1 問題背景 當資料過於龐大,一次性無法...