1. 程式人生 > >機器學習第十週(一)--隨機梯度下降

機器學習第十週(一)--隨機梯度下降

大資料

大資料

機器學習中約定俗成有這麼一句話:更多的資料決定演算法的好壞。
但是資料變多時,計算量也就相應增多。

這裡寫圖片描述

當我們的訓練集大小為一億時,訓練集就非常大了。當我們訓練集非常大時,我們會隨機選取幾千條資料來驗證我們的演算法是否合適。這裡隨機取1000個數據。畫出學習曲線,左邊處於高方差狀態,我們需要增加訓練集。右邊處於高偏差狀態,增加特徵或是一個不錯的方法。
這是從中選取1000個數據,但在大規模的機器學習下,我們還是需要找到相應的計算方法。

隨機梯度下降

批量梯度下降

像前面的邏輯迴歸、線性迴歸等我們求最小值都是使用的批量梯度下降,也就說要使用當前所有的資料值,但當遇到大規模的資料時,每次計算代價就非常大,所以考慮引入隨機梯度下降。
隨機梯度下降在每一步的迭代中不用考慮全部的訓練樣本,只需考慮一個訓練樣本。

隨機梯度下降

1、隨機打亂全部資料。
2、重複執行梯度下降。但每次只從m個樣本中隨機取一個樣本代入計算。

從圖上更直觀反映

隨機梯度下降

相比較於批量梯度下降,隨機梯度下降過程中會更曲折一些,但迭代速度回更快。而且這倆個的收斂形式是不一樣的,批量梯度下降會收斂到一個全域性最小值,隨機梯度下降最終是收斂到全域性最小值區域內徘徊,並非固定在一個具體值。

注意:隨機梯度下降中的外層迴圈我們一般設為1-10次都是合理的,當然如果m非常大,即內層迴圈非常大,那麼我們外層迴圈這時設為1是合理的。

小批量梯度下降

小批量梯度下降有時甚至比隨機梯度下降演算法還要快一些。

這裡寫圖片描述

不同於隨機梯度下降每次只用一個樣本,小批量梯度下降每次採用b個樣本。如下,小批量梯度下降每次採用10個樣本更新。

小批量梯度下降
為什麼小批量梯度下降比隨機梯度下降效果要好呢,可以向量化實現。如上例,小批量梯度下降每次可以平行計算10個樣本,隨機批量梯度下降每次只計算一個樣本。

隨機梯度下降的收斂

當我們執行隨機梯度下降演算法時,如果確保演算法是正常收斂還有如何去調整學習速率α的值呢?

隨機梯度下降的收斂
隨機梯度下降過程中,在每一次梯度下降的迭代執行前,我們都去用當前的隨機樣本(x(i),y(i))來計算當前的關於θcost函式。
在每次迭代之後都去更新θ,每個樣本迭代一次。

最後為了檢查隨機梯度下降的收斂性,我們要做的是每1000次迭代,我們可以畫出前一步中計算出的cost函式。

我們把這些cost函式畫出來,並對演算法處理的最後1000個樣本的c

ost值求平均值。如果你這樣做的話它會很有效地幫你估計出你的演算法在最後1000個樣本上的表現。所以,我們不需要時不時地計算Jtrain,那樣的話需要所有的訓練樣本。

下面給出幾個例子

一些例子

學習速率α的確定

一般來說,α一般是保持不變的,如果你想讓隨機梯度下降確實收斂到全域性最小值,你可以隨時間的變化減小學習速率α的值。一般採用如下公式:

學習速率

但是這樣就要花更多時間在調整常數1和常數2上,這就更增加了工作量。所以一般還是採用固定α的方法。