1. 程式人生 > >【機器學習】對梯度下降算法的進一步理解

【機器學習】對梯度下降算法的進一步理解

獨立 com 線性回歸 執行 ont 執行過程 wid 簡單的 技術

單一變量的線性回歸

讓我們依然以房屋為例,如果輸入的樣本特征是房子的尺寸,我們需要研究房屋尺寸和房屋價格之間的關系,假設我們的回歸模型訓練集如下

技術分享

其中我們用

m表示訓練集實例中的實例數量,

x代表特征(輸入)變量,

y代表目標變量

(x,y)代表實例

根據線性回歸模型hΘ(x) = Θ0+Θ1*x1 (Θ是模型參數)

需要找出Θ0,Θ1,使得平均誤差技術分享最小。J(Θ0,Θ1)稱為代價函數。

根據不同的特征值,我們按照如下步驟進行叠代更新,以此來得到不同的Θ:

技術分享

執行過程中,同步更新Θ0,Θ1

其中的α是學習速率,也就是所謂的邁出的步幅,一個合適的步幅有助於函數更快的收斂,每次叠代的過程實質就是對J(Θ)求偏導數,得到當前點要往下一步邁出的方向,之後根據α進行更新到新的點。如果步幅過大容易導致叠代過程發散,過小的情況下容易導致收斂過於慢。

在上個式子中,我們吧J(Θ)帶入,然後我們可以得到新的算法表達式:

技術分享

以上只是對特殊情況,即一元的線性回歸,那麽在更通常的情況下,我們所要解決的問題是多元的現行回歸。

多元線性回歸:

現在假設有以下特征向量:

x1 x2 x3 x4 y
2014 5 1 45 460
1416 3 2 40 232
…… …… …… …… ……
x1(m) x2(m) x3(m) x4(m) y(m)

對於上述學習資料,我們用

x(i)表示第i組訓練樣本的特征向量,如x(2)=[1416, 3,2,40]表示第二組特征向量

xj(i)表示第i組訓練樣本的第j個特征。

多元線性回歸假的設函數

技術分享

此時模型中的參數是一個n+1維的向量,任意一個訓練實例也是,特征矩陣是一個m*(n+1)維的。此時公式可以化簡為技術分享,其中θT是轉置矩陣。

同理我們可以寫出它的代價函數,技術分享(以後用J(θ)簡化表示)

同理,我們可以得出它的梯度下降算法:

技術分享

技術分享

開始隨機選擇一系列的參數值,計算所有的預測結果,再給所有的參數一個新的值,直到函數收斂。

梯度下降算法的優化與數學分析:

在面對數值差距過大的不同特征值時,比如x1大多在1000左右,x2,x3在10左右,那麽這時如果我們之間進行收斂,它的等高圖中看我們的收斂過程如圖所示:

技術分享

這時容易導致步幅過大而難以收斂,解決方法是盡可能讓xn盡可能的接近,我們把x1 x2除以一個合適的數值,使得他們的範圍都在0-1左右,這時圖像會變成下圖所示

技術分享

簡單的說,處理方法通常可以表示為

技術分享

學習率的選擇,選擇一個合適的學習率有利於我們更快的讓θ收斂

技術分享

有時候,所給出的數據並不利於我們使用線性回歸,這時候,我們就需要對特征值進行修改來適應我們的數據,比如x1是房屋臨街的寬度x2是房屋的深度,x = x1 * x2 這時候我們需要一個二次方模型或者三次方模型來解決這些問題

技術分享

那麽我們通常需要觀察數據,通過函數特性x2 = x2^2 x3 = x3^3,從而將函數轉化成我們可以解決的線性回歸模型。

根據圖形的特性,我們還可以修改h(θ)x 技術分享

或者技術分享來解決問題。

現在,我們再通過數學角度來看待這個問題,實際上我們可以直接算出收斂後的θ值,這個方法被稱為正規方程法,例如我們假設訓練集特征矩陣為x(包含了x0 = 1)並且我們的訓練集特征結果為向量y,則利用正規方程我們可以計算出向量θ:技術分享,在Octcave中,我們可以用如下方法計算得出:pinv(x‘*x)*x‘*y 值得註明的是,對於不可逆的矩陣,(通常因為特征向量之間不獨立),正規方程法是不能解決的。而且,對於過大的數據量(>10000),正規方程法因為矩陣過大而難以計算,所以此時我們會更多的用梯度下降法。

技術分享

正規方程的不可逆性:技術分享是不可逆的。

接下來會討論如何同octave設計實踐該算法。

【機器學習】對梯度下降算法的進一步理解