目錄
大型資料集的學習
批量梯度下降
隨機梯度下降
小批量梯度下降
隨機梯度下降收斂
對映化簡和資料並行
【此為本人學習吳恩達的機器學習課程的筆記記錄,有錯誤請指出!】
如果模型演算法具有欠擬合現象,增加資料集可以得到較好的**效果,那麼怎樣應對乙個有 100 萬條記錄的訓練集?
以線性回歸模型為例,每一次梯度下降迭代,都需要計算訓練集的誤差的平方和,如果學習演算法需要 20 次迭代,這已經是非常大的計算代價。
首先應該做的事是去檢查乙個這麼大規模的訓練集是否真的必要,也許只用 1000個訓練集也能獲得較好的效果,可以繪製學習曲線來幫助判斷。
批量梯度下降法是最原始的形式,它是指在每一次迭代時使用所有樣本來進行梯度的更新。
每次迭代對引數進行更新:
偽**:
優點:(1)每一次的迭代是對所有樣本進行計算,利用矩陣進行操作,實現了平行計算。
(2)由全資料集確定的導數方向能夠更好地代表樣本總體,從而更準確地朝向極值的方向收斂。當目標函式為凸函式時,bgd一定能夠得到全域性最優。
缺點:(1)當訓練樣本數目很大時,每迭代一步都需要對所有樣本計算,訓練過程會很慢(如:30w訓練樣本,需要迭代10次,需計算 10 * 30w次)。
如果一定需要乙個大規模的訓練集,我們可以嘗試使用隨機梯度下降法(sgd) 來代替批量梯度下降法。
在隨機梯度下降法中,定義代價函式為乙個單一訓練例項的代價:
隨機梯度下降演算法為: 首先對訓練集隨機「洗牌」, 然後:
偽**:
優點:(1)在每一輪迭代中,隨機優化某一條訓練資料上的損失函式,這樣每一輪引數的更新速度大大加快(如:30w訓練樣本,需要迭代30w次,需計算 1 * 30w次)。
缺點:(1)準確度下降。由於每次隨機訓練一條資料,即使在目標函式為強凸函式的情況下,sgd仍舊無法做到線性收斂。
(2)可能會收斂到區域性最優,由於單個樣本並不能代表全體樣本的趨勢。
(3)不易於並行實現。
隨機梯度下降演算法在每一次計算之後便更新引數 ? ,而不需要將所有的訓練集求和(只求當前樣本的誤差),在梯度下降演算法還沒有完成一次迭代時,隨機梯度下降演算法便已經走出了很遠。但是這樣的演算法存在的問題是, 不是每一步都是朝著」正確」的方向邁出的。 因此演算法可能會逐漸走向全域性最小值的位置,但是可能無法站到那個最小值的那一點,而是在最小值點附近徘徊。
小批量梯度下降法(mbgd)是介於批量梯度下降法和隨機梯度下降法之間的演算法,每次計算常數 ? 個樣本來更新一次引數?。
假設 batch_size = 10,樣本數 m = 1000。偽**:
優點:(1)利用矩陣運算,每次在乙個batch上優化神經網路引數並不會比單個資料慢太多。
(2)每次使用乙個batch可以大大減小收斂所需要的迭代次數,同時可以使收斂到的結果更加接近梯度下降的效果。(如上例中的30w,設定batch_size=100時,需要迭代3000次,遠小於sgd的30w次)。
(3)可實現並行化。
缺點:(1)batch_size的不當選擇可能會帶來一些問題。
通常我們會令 ? 在 2-100 之間。這樣做的好處在於,可以用向量化的方式來迴圈 ? 個訓練例項,如果我們用的線性代數函式庫比較好,能夠支援平行處理,那麼演算法的總體表現將不受影響(與隨機梯度下降相同)。
三種梯度下降法的收斂過程:
在梯度下降中,我們可以令代價函式 ? 為迭代次數的函式,繪製圖表,根據圖表來判斷梯度下降是否收斂:
圖 1 到 圖 2 :通過調整學習率(如增大學習率?),最後模型趨勢都能夠收斂,說明是正確的學習率。
圖 3:通過調整學習率(如增大學習率?),模型沒有明顯的收斂趨勢或沒有收斂(如紅線和洋紅線),那麼模型可能存在一些錯誤。
圖 4:模型趨勢不斷上公升,說明選擇的學習率過大,需要適當調小學習率。
對於隨機梯度下降法來說,可能出現無法到達全域性最小值,而是在最小值的位置附近徘徊。所以,我們可以令學習率隨著迭代次數的增加而減小,例如:
隨著演算法不斷地靠近全域性最小值,通過減小學習率,迫使演算法收斂而非在最小值附近徘徊。
但是通常我們不需要這樣做便能有非常好的效果了,對 ? 進行調整所耗費的計算通常不值得。
隨機梯度下降法的收斂圖形,只需要每次對最後 1000 次的(或者其它數目)迭代,求一下平均值即可。應用這種方法,既可以保證隨機梯度下降法正在正常運轉和收斂,也可以用它來調整學習速率?的大小。
一旦對乙個資料的學習完成了,我們便可以丟棄該資料,不需要再儲存它了。這種方式的好處在於,演算法可以很好的適應使用者的傾向性,演算法可以針對使用者的當前行為不斷地更新模型以適應該使用者。
對映化簡和資料並行對於大規模機器學習問題而言是非常重要的概念。
之前提到,如果用批量梯度下降演算法來求解大規模資料集的最優解,需要對整個訓練集進行迴圈,計算偏導數和代價,再求和,計算代價非常大。
如果我們能夠將資料集分配給多台計算機,讓每一台計算機處理資料集的乙個子集,然後將所有結果彙總在求和。這樣
的方法叫做對映簡化。
具體而言,如果學習演算法能夠表達為,對訓練集的函式求和,那麼便能將這個任務分配給多台計算機(或者同一臺計算機的不同 cpu 核心),以達到加速處理的目的。
例如,我們有 400 個訓練例項,我們可以將批量梯度下降的求和任務分配給 4 臺計算機進行處理:
吳恩達機器學習筆記 18 大規模機器學習
本章講了梯度下降的幾種方式 batch梯度下降 mini batch梯度下降 隨機梯度下降。也講解了如何利用mapreduce或者多cpu的思想加速模型的訓練。有的時候資料量會影響演算法的結果,如果樣本資料量很大,使用梯度下降優化引數時,一次調整引數需要計算全量的樣本,非常耗時。如果訓練集和驗證集的...
吳恩達機器學習筆記 18 大規模機器學習
本章講了梯度下降的幾種方式 batch梯度下降 mini batch梯度下降 隨機梯度下降。也講解了如何利用mapreduce或者多cpu的思想加速模型的訓練。有的時候資料量會影響演算法的結果,如果樣本資料量很大,使用梯度下降優化引數時,一次調整引數需要計算全量的樣本,非常耗時。如果訓練集和驗證集的...
吳恩達機器學習筆記(14 大規模機器學習)
主要是處理大資料集的演算法。如果我們有一億條資料,那麼我們以邏輯回歸為例,那麼我們將會計算代價函式一億次,這是乙個很大的計算量。首先應該做的事是去檢查乙個這麼大規模的訓練集是否真的必要,也許我們只用 1000 個訓練集也能獲得較好的效果,我們可以繪製學習曲線來幫助判斷。如果我們一定需要乙個大規模的訓...