線性迴歸(Linear Regression)

監督式學習中關於房屋價格的例子稍作更改,除了原有數據,再加入臥室數量這一數據項。

居住面積(feet2\mathrm{feet}^2) 臥室數量 價格(1000$s)
2104 3 400
1600 3 330
2400 3 540
1416 2 232
3000 4 540

現在輸入變成了一個二維向量,其中x1(i)x_1^{(i)}表示訓練集中第i個房屋的居住面積,x2(i)x_2^{(i)}表示第i個房屋的臥室數量。爲了完成監督式學習,我們首先考慮如何將假設hh在計算機中實現。爲此我們先假設yyxx的一個線性函數:

hθ(x)=θ0+θ1x1+θ2x2 h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2

上式中θ\theta是將X\mathcal{X}映射到Y\mathcal{Y}的線性函數的組成參數(也叫權重)。後文中會將hθ(x)h_\theta(x)簡寫爲h(x)h_(x),我們還可以令x0=1x_0 = 1(截距項的係數),則上式可簡寫爲:

h(x)=θ0+θ1x1+θ2x2=θ0x0+θ1x1+θ2x2=i=0nθixi=θTx \begin{aligned} h(x) &= \theta_0 + \theta_1 x_1 + \theta_2 x_2\\ &= \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2\\ &=\sum_{i=0}^n \theta_i x_i = \theta^T x\\ \end{aligned}

構成h(x)h(x)θ\thetaxx都是列向量,nn是輸入屬性的個數(本例中是2)。要讓預測值h(x)h(x)接近目標變量期望yy,我們該如何選擇參數θ\theta呢?我們引入成本函數的概念,讓他表示h(x)h(x)yy的近似度:

J(θ)=12(hθ(x(i))y(i))2. J(\theta) = \frac{1}{2} (h_\theta(x^{(i)}) - y^{(i)})^2.

由上面的最小方差成本函數衍生出最小方差迴歸模型


1 LMS算法

要找到合適的參數θ\theta使得成本函數J(θ)J(\theta)的值最小化。我們使用搜索算法從某一隨機值出發,不斷地迭代更新最後收斂到成本函數最小的最優解。我們使用梯度下降算法,從初始θ\theta出發,不斷重複以下操作:

θj:=θjαθjJ(θ). \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta).

其中α\alpha表示學習率,整個式子每次更新,就像是在J(θ)J(\theta)下降最快的方向邁一小步,因此被稱爲梯度下降法。

將成本函數關於某一權重θj\theta_j的偏導數展開:

θjJ(θ)=θj12(hθ(x)y)2=212(hθ(x)y)θj(hθ(x)y)=(hθ(x)y)θj(i=0nθixiy)=(hθ(x)y)xj \begin{aligned} \frac{\partial}{\partial \theta_j} J(\theta) &= \frac{\partial}{\partial \theta_j} \frac{1}{2} (h_\theta(x) - y)^2\\ &= 2 \cdot \frac{1}{2} (h_\theta (x) - y) \cdot \frac{\partial}{\partial \theta_j} (h_\theta(x) - y)\\ &= (h_\theta (x) - y) \cdot \frac{\partial}{\partial \theta_j} (\sum_{i=0}^n \theta_i x_i - y)\\ &= (h_\theta (x) - y) x_j \end{aligned}

對於單個訓練樣本則有:

θj:=θj+α(y(i)hθ(x(i)))xj(i). \theta_j := \theta_j + \alpha (y^{(i)} - h_\theta (x^{(i)})) x_j^{(i)}.

該方法被稱爲最小均方差更新法(Least Mean Squares),也叫Widrow-Hoff學習法。這種方法直觀而自然,我們可以看到當預測值與實際值接近時,權重變化就會很小;反之,權重就會變化很大,從邏輯而言這個公式也合情合理。

上面的公式只對單個訓練樣本,我們有兩種方法可將其推廣到整個訓練集的迴歸,其一執行以下操作:

Repeat until convergence {θj:=θj+α1mi=1m(y(i)hθ(x(i)))xj(i)(for every j)} \begin{aligned} & \mathrm{Repeat\ until\ convergence}\ \{\\ & \qquad \qquad \theta_j := \theta_j + \alpha \frac{1}{m} \sum_{i=1}^m(y^{(i)} - h_\theta (x^{(i)})) x_j^{(i)} \qquad (for \ every \ j)\\ &\} \end{aligned}

它每次更新要遍歷整個訓練集,因此稱爲批量梯度下降法(Batch Gradient Descent, BSD)。注意到,該方法確實有可能落入局部最優解的陷阱,但我們暫時只考慮僅含一個全局最優解的優化問題,這時該方法每次都能收斂到全局最優。

成本函數是一個凸二次函數,下面我們給一個梯度下降優化二次函數的圖示:
gradient descent

上圖的橢圓代表二次函數的等高線,折現的軌跡是梯度下降的路徑,而其上的每個點則表示θ\theta梯度下降時的值,可以看到它從(48, 30)出發最後到達最優解(25, 25)。

如果我們使用梯度下降法求解之前僅有房屋面積的例子,可得θ0=71.27,θ1=0.1345\theta_0 = 71.27, \theta_1 = 0.1345,可繪製出下圖:
house price

將臥室數量也加入特徵中,則求得:θ0=89.60,θ1=0.1392,θ2=8.738\theta_0 = 89.60, \theta_1 = 0.1392, \theta_2 = -8.738


除了批量梯度下降,還有一種方法同樣表現出色,它的運行步驟是這樣的:

Loop {for i=1 to m, {θj:=θjα(y(i)hθ(x(i)))xj(i)(for every j)}} \begin{aligned} & \mathrm{Loop}\ \{\\ & \qquad \mathrm{for}\ i=1\ \mathrm{to\ m},\ \{\\ & \qquad \qquad \theta_j := \theta_j - \alpha (y^{(i)} - h_\theta (x^{(i)})) x_j^{(i)} \qquad (for \ every \ j)\\ &\qquad \}\\ &\} \end{aligned}

這種方法每遇到一個樣本就更新一次權重,它被稱爲隨機梯度下降法(Stochastic Gradient Descent, SGD)。由於批量梯度下降每走一步都要遍歷整個訓練集,當樣本個數很大時,訓練的時間成本就很高。隨機梯度下降每遇一個樣本就更新一次權重,普遍來說收斂速度會快於批量梯度法(雖然有時會無法收斂到最優解,而是在最優解附近振盪,即使如此得到的近似依然很好)。當訓練集很大時,隨機梯度下降往往比批梯度下降更受歡迎。

注意:

梯度下降算法(如下),α\alpha前面的減號如果改成加號,就是梯度上升算法。梯度上升用於求最大值,梯度下降用於求最小值,最小均方差是要令方差最小所以用梯度下降法。
θj:=θjαθjJ(θ). \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章