把監督式學習中關於房屋價格的例子稍作更改,除了原有數據,再加入臥室數量這一數據項。
居住面積(feet2) |
臥室數量 |
價格(1000$s) |
2104 |
3 |
400 |
1600 |
3 |
330 |
2400 |
3 |
540 |
1416 |
2 |
232 |
3000 |
4 |
540 |
… |
… |
… |
現在輸入變成了一個二維向量,其中x1(i)表示訓練集中第i個房屋的居住面積,x2(i)表示第i個房屋的臥室數量。爲了完成監督式學習,我們首先考慮如何將假設h在計算機中實現。爲此我們先假設y是x的一個線性函數:
hθ(x)=θ0+θ1x1+θ2x2
上式中θ是將X映射到Y的線性函數的組成參數(也叫權重)。後文中會將hθ(x)簡寫爲h(x),我們還可以令x0=1(截距項的係數),則上式可簡寫爲:
h(x)=θ0+θ1x1+θ2x2=θ0x0+θ1x1+θ2x2=i=0∑nθixi=θTx
構成h(x)的θ和x都是列向量,n是輸入屬性的個數(本例中是2)。要讓預測值h(x)接近目標變量期望y,我們該如何選擇參數θ呢?我們引入成本函數的概念,讓他表示h(x)和y的近似度:
J(θ)=21(hθ(x(i))−y(i))2.
由上面的最小方差成本函數衍生出最小方差迴歸模型。
1 LMS算法
要找到合適的參數θ使得成本函數J(θ)的值最小化。我們使用搜索算法從某一隨機值出發,不斷地迭代更新最後收斂到成本函數最小的最優解。我們使用梯度下降算法,從初始θ出發,不斷重複以下操作:
θj:=θj−α∂θj∂J(θ).
其中α表示學習率,整個式子每次更新,就像是在J(θ)下降最快的方向邁一小步,因此被稱爲梯度下降法。
將成本函數關於某一權重θj的偏導數展開:
∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2=2⋅21(hθ(x)−y)⋅∂θj∂(hθ(x)−y)=(hθ(x)−y)⋅∂θj∂(i=0∑nθixi−y)=(hθ(x)−y)xj
對於單個訓練樣本則有:
θj:=θj+α(y(i)−hθ(x(i)))xj(i).
該方法被稱爲最小均方差更新法(Least Mean Squares),也叫Widrow-Hoff學習法。這種方法直觀而自然,我們可以看到當預測值與實際值接近時,權重變化就會很小;反之,權重就會變化很大,從邏輯而言這個公式也合情合理。
上面的公式只對單個訓練樣本,我們有兩種方法可將其推廣到整個訓練集的迴歸,其一執行以下操作:
Repeat until convergence {θj:=θj+αm1i=1∑m(y(i)−hθ(x(i)))xj(i)(for every j)}
它每次更新要遍歷整個訓練集,因此稱爲批量梯度下降法(Batch Gradient Descent, BSD)。注意到,該方法確實有可能落入局部最優解的陷阱,但我們暫時只考慮僅含一個全局最優解的優化問題,這時該方法每次都能收斂到全局最優。
成本函數是一個凸二次函數,下面我們給一個梯度下降優化二次函數的圖示:
![gradient descent]()
上圖的橢圓代表二次函數的等高線,折現的軌跡是梯度下降的路徑,而其上的每個點則表示θ梯度下降時的值,可以看到它從(48, 30)出發最後到達最優解(25, 25)。
如果我們使用梯度下降法求解之前僅有房屋面積的例子,可得θ0=71.27,θ1=0.1345,可繪製出下圖:
![house price]()
將臥室數量也加入特徵中,則求得:θ0=89.60,θ1=0.1392,θ2=−8.738。
除了批量梯度下降,還有一種方法同樣表現出色,它的運行步驟是這樣的:
Loop {for i=1 to m, {θj:=θj−α(y(i)−hθ(x(i)))xj(i)(for every j)}}
這種方法每遇到一個樣本就更新一次權重,它被稱爲隨機梯度下降法(Stochastic Gradient Descent, SGD)。由於批量梯度下降每走一步都要遍歷整個訓練集,當樣本個數很大時,訓練的時間成本就很高。隨機梯度下降每遇一個樣本就更新一次權重,普遍來說收斂速度會快於批量梯度法(雖然有時會無法收斂到最優解,而是在最優解附近振盪,即使如此得到的近似依然很好)。當訓練集很大時,隨機梯度下降往往比批梯度下降更受歡迎。
注意:
梯度下降算法(如下),α前面的減號如果改成加號,就是梯度上升算法。梯度上升用於求最大值,梯度下降用於求最小值,最小均方差是要令方差最小所以用梯度下降法。
θj:=θj−α∂θj∂J(θ).