學習大數據集

數據量多,模型效果肯定會比較好,但是大數據也有它自己的問題,計算復雜

如果存在100000000個特征,計算量是相當大的,在進行梯度下降的時候,還要反復求損失函數的偏導數,這樣一來計算量更大。
那么有沒有簡單的方法來應對大量的數據呢?我們可以采取隨機抽樣,比如,抽取1000個樣本進行模型的構建。那么如何決定抽取多少樣本呢?可以通過學習曲線獲得,隨著數據量的增加,無論是偏差和誤差,都會趨向于穩(wěn)定,若在數據量達到1000時趨向穩(wěn)定,則表示模型取1000個樣本和取全部樣本的效果差不多。
隨機梯度下降

梯度下降方法每迭代計算一次參數,就要把數據重新讀取一遍,計算量相當復雜,這種利用所有樣本進行梯度下降的方法稱為批量梯度下降(Batch gradient decent)。
隨機梯度下降

隨機梯度下降首先求出一個樣本的損失函數cost,然后計算假設函數在M個訓練樣本中,每一個樣本上的代價函數的平均值。隨機梯度下降在進行參數的時候,計算完一個訓練樣本就可以進行一次更新,而不用遍歷所有的樣本并求和之后在進行參數更新。
具體的過程如上圖藍筆手寫過程:第一步先進行樣本打亂,即將樣本順序重新排列;第二步進行循環(huán)計算,先進行某一個樣本上的梯度下降,找到最好的擬合這個樣本數據的參數,然后在進行第二個樣本上的梯度下降,這樣循環(huán)下來就實現了對每一個樣本分別進行一次梯度下降,最后實現全局最優(yōu)。

Mini-Batch梯度下降

批量梯度下降(batch gradient decent)在每一次迭代中使用所有的樣本,隨機梯度下降(stochastic gradient decent)在每一次迭代中只使用一個樣本,而mini-batch 在每次迭代的時候使用b個樣本。b的選擇可以再2-100之前,取決于訓練集樣本的數量。具體過程如下:

假設b=10,且有1000個樣本,那么在進行梯度下降的時候,每次選10個樣本計算梯度。在實際中,使用小批量梯度下降,可以利用好的數值代數庫進行向量化計算,這樣在計算過程中可以進行并行計算,其效果會優(yōu)于隨機梯度下降,即好的參數b+向量化方法>隨機梯度下降。小批量梯度下降的缺點是需要找到合適的參數b。
隨機梯度下降收斂
在隨機梯度下降過程中,如何進行debug,如果確定已經下降到合適的位置。更重要的是,如何調整梯度下降中學習率的選擇?

在隨機梯度下降中,可以在沒進行1000次迭代以后,求出在當前參數下前1000個樣本的平均損失函數的大小,然后畫出
與迭代次數的圖像。如下圖所示:

若結果如圖一藍線所示,表示結果是趨向于收斂的,紅線表示當降低學習率時的結果,由于是進行了一千次迭代以后的平均,所以噪音會很大,圖像會有波動;若結果如圖二藍線所示,表示效果較好,趨向于收斂。當樣本數量取到5000的時候,曲線會趨向于平滑,如圖二紅線所示,但是每次取平均的樣本數量過多,得出的結果可能會出現延遲(在第2500個樣本進行參數估計的時候可能就已經是最優(yōu)了);圖三藍線表示1000個樣本為一組,洋紅色線表示5000個樣本為一組,紅線表示降低學習率,從圖上看這幾條線都近似于直線,損失函數沒有降低,這就說明算法并沒有進行學習,需要調整參數等,查看模型到底哪里出了問題;圖四表示結果發(fā)散,可能需要降低學習率進行調整。

在進行隨機梯度下降的時候,得到的結果并不是全局最優(yōu),而是很接近全局最優(yōu)的一個結果。學習率通常設定為一個常數,你也可以緩慢的降低學習率,從而達到一個更理想的結果,通常的設定方法如上圖所示,常數1/(迭代次數+常數2)。但是通常大家不喜歡是用這種方法,因為這需要大量的事件來設定兩個參數,常數1和常數2,但是如果這兩個參數設定合理,那么結果會好很多,會更接近于全局最優(yōu)。
在線學習
針對連續(xù)的數據流,我們可以利用在線學習算法從中學習。現在,很多大型的網站從連續(xù)不斷的用戶信息 流中學習用戶的特征,幫助網站決策。

假設一個提供運輸服務的企業(yè),特征x表示輸入特征,包括用戶要求的起始點,我們提供的價格等,y表示結果,即用戶是否使用我們的服務。上面藍色的字表示在線學習過程,每次只輸入對應某一個用戶的特定信息(x,y),然后根據信息進行參數的預測,然后將該條數據丟棄。在線學習有連續(xù)不斷的信息流,一次只處理一個樣本,這樣可以更好的使用變化的用戶偏好。比如當網站涌入新的用戶時,或隨著經濟環(huán)境變化時,可能大家對價格變得更敏感,價格升高會顯著影響用戶是否采用我們的服務。學習算法可以根據變化對用戶的偏好進行調整。

如果你想提供給用于一個更好的搜索列表。比如你是一個買手機的店鋪,當用戶登錄以后,你想提供一個更好的搜索列表,包括攝像像素等參數。當用戶輸入參數,將會返回10個搜索結果。我們要學習的就是在所有手機中找到最符合搜索條件的的10個手機,來預測用戶點開推薦鏈接的概率。我們要做的就是在用戶進行搜索的時候,推薦給用戶手機,看他會點開那些手機,這樣每一個用戶進行搜索的時候,就可以得到十個樣本,對應這十個手機的特征向量x(表示手機特征和搜索項的匹配程度),和每一個手機對應的y。然后利用學習算法,對這十個樣本利用十步梯度下降法預測參數。如果網站有持續(xù)的數據流入,那么在進行完以上操作以后,可以將該組數據丟棄,下一步對新用戶提供的樣本進行學習。通常要先積累一個固定的數據集,在數據集中訓練參數,然后在利用持續(xù)的數據流更新參數。
減少映射與數據并行
之前講述的算法,無論是線性回歸還是在線學習,都可以在單個機器貨單個電腦上運行,但是有的機器學習過于龐大以至于不能單機運行,有可能是數據量太多,不想把數據在一個電腦上跑一遍。

如果數據集太大,無法再單一機器上進行處理,可以將其分開到幾個機器上進行。如上圖所示,假設訓練集中m=400有400個樣本,可以將訓練集分成四部分,每部分包含100個樣本,分別在4個機器上進行計算,每個機器上計算100個樣本,然后再將每個機器上的計算結果加和,這樣就能提高計算速度,使速度達到原來的四倍(實際上在進行數據整合的時候也會花費一點時間,實際提速不到四倍)。


這種算法只適用于公式可以表示為幾個訓練集中數據相加的形式。
map-reduce也適用于包含多個CPU的單一電腦上進行。現在很多數值算法庫可以并行處理向量化的數據,也能提高計算效率。