機器學習算法(優化)之一:梯度下降算法、隨機梯度下降(應用於線性迴歸、Logistic迴歸等等)

本文介紹了機器學習中基本的優化算法—梯度下降算法和隨機梯度下降算法,以及實際應用到線性迴歸、Logistic迴歸、矩陣分解推薦算法等ML中。

梯度下降算法基本公式

常見的符號說明和損失函數

X :所有樣本的特徵向量組成的矩陣
x(i) 是第i個樣本的包含的所有特徵組成的向量x(i)=x(i)1,x(i)2...,x(i)n
y(i)) 第i個樣本的label,每個樣本只有一個label,y(i) 是標量(一個數值)
hθ(x(i)) :擬合函數,機器學習中可以用多種類型的擬合函數
θ 是函數變量,是多個變量的向量 θ=[θ1,θ2,...]
|hθ(xi)y(i)| :擬合絕對誤差
求解的目標是使得所有樣本點(m 個)平均誤差最小,即:

argminθ 1mi=1m|hθ(x(i))y(i)|

或者平方誤差最小,即:
argminθ 12mi=1m(hθ(xi)y(i))2

argmin 表示使目標函數取最小值時的變量值(即θ )值。

其中

J(θ)= 12mi=1m(hθ(x(i))y(i))2

J(θ)=  1mi=1m|hθ(x(i))y(i)|

都被成爲損失函數(Cost Function)
J(θ) 不只是上面兩種形式,不同的機器學習算法可以定義各種其它形式。

梯度下降迭代公式

爲了求解θ=[θ1,θ2,...] 的值,可以先對其賦一組初值,然後改變θ 的值,使得J(θ) 最小。函數J(θ) 在其負梯度方向下降最快,所以只要使得每個參數θ 按函數負梯度方向改變,則J(θ) 能最快找到最小值。即

θj:=θjαθjJ(θ)

這就是梯度下降算法的迭代公式,其中α 表示步長,即往每次下降最快的方向走多遠。

線性迴歸

以多變量線性迴歸爲例:
擬合函數如下:

hθ(x)=θ0+θ1x1+θ2x2+...+θnxn=θTx

損失函數定義爲:
J(θ)= 12mi=1m(hθ(x(i))y(i))2θT=[θ1,θ2,...]

θjJ(θ) 求解過程還是很簡單的(複合函數鏈式法則)。(hθ(x(i))y(i))2θj 求導得到2(hθ(x(i))y(i))hθ(x)=θ0+θ1x1+θ2x2+...+θnxn=θTxθj 求導得到xj 。因此迭代更新公式爲:

θj:=θjα1mi=1m(hθ(x(i)y(i)))xj(i),xj(i)ijm

Logistic迴歸

代價函數:
以Sigmoid函數(Logistic函數)爲例說明:

hθ(x)=11+eθTx

代價函數定義:
只處理binary分類問題,即y(i) 不等於0,就等於1.
J(θ)=1mi=1m[(y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

看起來是不是很複雜? 其實可以繼續分解:
當y=0時(全部y(i)=0)
J(θ)=1mi=1mlog(1hθ(x(i)))

當y=1時(全部y(i)=1)
J(θ)=1mi=1mloghθ(x(i))

爲什麼這麼定義代價函數呢?我自己通俗理解是,求導後形式簡潔,而且:
y=0,hθ(x) 範圍爲[0,0.5),越接近0.5,代價越高:
這裏寫圖片描述
由上圖可以看出:log(1hθ(x(i))) 可以很好衡量某一個樣本的代價。

y=1時,hθ(x) 範圍爲(0.5,1],越接近0.5,代價越高:
這裏寫圖片描述
同樣由上圖可以看到:loghθ(x(i)) 可以很好衡量某一個樣本的代價。

迭代更新公式:
求導過程蠻複雜的,直接給出結果吧:

θj:=θjα1mi=1m(hθ(x(i)y(i)))xj(i),xj(i)ijm

和線性迴歸中最後給的更新迭代公式是一模一樣的,這也就理解了爲什麼代價函數設計時比較複雜,還套了log,敢情是爲了這??
總之logisitc迴歸和線性迴歸最終使用的是一模一樣的優化算法。
還可將這個公式寫成用向量來表達的形式:
θ:=θjα1mi=1m([hθ(x(i)y(i)))x(i)],θx(i)

矩陣分解的推薦算法

可以參考我轉載的另一篇文章:
http://blog.csdn.net/qq_34531825/article/details/52330907

隨機梯度下降(SGD)

stochastic gradient descent

從梯度上升算法公式可以看出,每次更新迴歸係數θ 時都需要遍歷整個數據集。該方法在處理100個左右的數據集尚可,但是如果有數十億的樣本和成千萬的特徵,這種方法的計算複雜度就太高了。一種改進的方法是一次僅用一個樣本點來更新迴歸係數。由於可以在新樣本到來時,對分類器進行增量更新,因此是一個“在線學習”算法,而梯度下降算法一次處理所有的數據被稱爲“批處理”。更新公式如下:

θj:=θjα(hθ(x(i)y(i)))xj(i)

參考文獻

(1)Stanford機器學習—第三講. 邏輯迴歸和過擬合問題的解決 logistic Regression & Regularization
http://blog.csdn.net/abcjennifer/article/details/7716281?locationNum=2
(2)機器學習入門:線性迴歸及梯度下降
http://blog.csdn.net/xiazdong/article/details/7950084
(3)梯度下降深入淺出
http://binhua.info/machinelearning/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA

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