機器學習公開課筆記(10):大規模機器學習


批梯度下降 (Batch Gradient Descent)

以線性回歸為例,用梯度下降算法進行參數更新的公式為$$\theta_j=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$$可以看到每次參數更新一次,都需要將整個訓練集掃描一遍,所以稱為批梯度下降,這種更新方式對於參數集很大的集合(例如m=100,000,000)運行速度十分慢,為了加快算法運行速度,提出了隨機梯度下降。

隨機梯度下降 (Stochastic Gradient Descent)

每次僅用一個example來更新參數$\theta$,仍以線性回歸為例,隨機梯度下降算法為

1. 隨機重排列整個訓練集(shuffle)

2. 重復下列過程多次(數據集較大時可以重復1~10次)

    for i = 1, ..., m {
   $\theta_j=\theta_j-\alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
    }

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

介於批梯度下降和隨機梯度下降之間,批梯度處理利用全部m個example進行參數更新;隨機梯度下降只用1個example進行參數更新;而Mini梯度下降使用b(1<b<m)個example進行參數更新。仍以線性回歸為例,加入我們有m=1000個example,我們可以用每b=10個example進行參數更新,例如:

Repeat {
        for i = 1, 11, 21, ..., 991 {
                $\theta_j=\theta_j-\alpha\frac{1}{10}\sum\limits_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)}$
        }
}

算法收斂性

批梯度處理能夠保證算法收斂到最小值(如果選擇的學習速率$\alpha$合適的話),可以plot代價函數$J(\theta)$隨迭代次數的曲線,如果曲線是總是下降的,則能夠收斂,反之需要調整學習速率。

隨機梯度下降並不能保證算法收斂到最小值,最終結果可能是在最小值附近來回游走,為了觀察其收斂特性,可以plot每100(1000)次迭代時100個example代價函數函數$\text{cost}(\theta,(x^{(i)}, y^{(i)}))$的平均值,如果是下降趨勢,則可以收斂,否則可能需要調整增大或者減小平均的example數(將100改為1000或者10等),減小或者增大學習速率。

在線學習 (Online Learning)

之前的算法都是有一個固定的訓練集來訓練模型,當模型訓練好后對未來的example進行分類、回歸等。在線學習則不同,它對每個新來的example進行模型參數更新,因此不需要固定的訓練集,參數更新的方式則是采用隨機梯度下降。在線學習的優勢是模型參數可以隨用戶的偏好自適應的進行調整,以logistic回歸為例,在線學習方式如下:

Repeat forever {
        1. 獲取當前example (x, y)
        2. 使用(x,y)進行參數更新:$\theta_j=\theta_j-\alpha(h_\theta(x)-y)x_j$
}

MapReduce和數據並行化

這部分內容Andrew Ng講得不多,可以認為僅僅講了多個機器的求和問題,比如如何求解1+2+3+...+1000?Map過程:四個機器分別計算1+2+...+250,251+252+...+500, 501+502...+750,751+752+...+1000,然后Reduce過程:將四個機器求和的結果sum1,sum2,sum3,sum4匯總到一台機器上,計算sum1+sum2+sum3+sum4。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM