隨機梯度降低

本文介紹了機器學習中基本的優化算法—梯度降低算法和隨機梯度降低算法,以及實際應用到線性迴歸、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個)平均偏差最小,即:
markdown

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(θ)

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

 

線性迴歸

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

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))能夠很好衡量某一個樣本的代價。
atom

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

θ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.net

隨機梯度降低(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

 
0
 
0
相關文章
相關標籤/搜索