這幾天在看《統計學習方法》這本書,發現 梯度下降法 在 感知機 等機器學習演算法中有很重要的應用,所以就特別查了些資料。
一.介紹
梯度下降法(gradient descent)是求解無約束最優化問題的一種常用方法,有實現簡單的優點。梯度下降法是迭代演算法,每一步需要求解目標函式的梯度向量。
二.應用場景
1.給定許多組資料(xi, yi),xi (向量)為輸入,yi為輸出。設計乙個線性函式y=h(x)去擬合這些資料。
2.感知機:感知機(perceptron)為二類分類的線性分類模型。 輸入為例項的特徵向量,輸出為例項的類別, 取+1 和 -1 二值。
下面分別對這兩種應用場景進行分析。
1.對於第一種場景:
既然是線性函式,在此不妨設為 h(x) = w0*x0 + w1*x1。
此時我們遇到的問題就是如何確定w0和w1這兩個引數,即w=(w0,w1)這個向量。
既然是擬合,則擬合效果可以用平方損失函式:e(w)=∑ [ h(x)- y ] ^2 / 2 來衡量。
其中w是權重二維向量,x是輸入二維向量,x和y都是訓練集的資料,即已知。
至於後面除於2只是為了之後的推導過程中對e求導時候可以消除係數,暫時可以不管。
因此該問題變成了求e(w)最小值的無約束最優化問題
2.對於第二種場景:
假設輸入空間(特徵向量)為x,輸出空間為y = ,由輸入空間到輸出空間的如下函式
f(x) = sign(w · x + b) w∈rn 其中 w 叫做權值或者權值向量, b叫做偏振。w · x 表示向量w和x的點積
感知機sign(w · x + b)的損失函式為 l(w, b) = -∑yi(w · xi + b) x ∈m, m為誤分類點集合。
因此該問題變成了求l(w, b)最小值的無約束最優化問題
三.梯度下降方法
梯度其實就是高數求導方法,對e這個公式針對每個維數(w0,w1)求偏導後的向量▽e(w)=(∂e/∂w0,∂e/∂w1)
1. 對於第一種場景
對e這個公式針對每個維數(w0,w1)求偏導後的向量▽e(w)=(∂e/∂w0,∂e/∂w1)
梯度為最陡峭上公升的方向,對應的梯度下降的訓練法則為: w=w-η▽e(w) 這裡的η代表學習速率,決定梯度下降搜尋中的步長 。
上式的w是向量,即可用將該式寫成分量形式為:wi=wi-η*∂e/∂wi
現在關鍵就使計算∂e/∂wi:
推導過程很簡單,書上寫的很詳細,這裡只記錄結論(其實就是對目標函式求導):
∂e/∂wi=∑(h(x)-y)*(xi)
這裡的∑是對樣本空間,即訓練集進行一次遍歷,耗費時間較大,可以使用梯度下降的隨機近似:
2. 對於第二種場景
感知機學習演算法是誤分類驅動的,具體採用隨機梯度下降方法
▽wl(w, b) = -∑yixi
▽bl(w, b) = -∑yi
隨機選取乙個誤分類點(xi, yi), 對w, b進行更新:
w b
四.隨機梯度下降的隨機近似:
既然是隨機近似,則顧名思義,肯定是用近似方法來改善梯度下降時候的時間複雜度問題。
正如上所說,在∂e/∂wi=∑(h(x)-y)*(xi) 的時候∑耗費了大量的時間,特別是在訓練集龐大的時候。
所以肯定有人會猜想,如果把求和去掉如何,即變為∂e/∂wi=(h(x)-y)*(xi)。
幸運的是,猜想成立了。
只是要注意一下標準的梯度下降和隨機梯度下降的區別:
1.標準下降時在權值更新前彙總所有樣例得到的標準梯度,隨機下降則是通過考察每次訓練例項來更新。
2.對於步長 η的取值,標準梯度下降的η比隨機梯度下降的大。
因為標準梯度下降的是使用準確的梯度,理直氣壯地走,隨機梯度下降使用的是近似的梯度,就得小心翼翼地走,怕一不小心誤入歧途南轅北轍了。
3.當e(w)有多個區域性極小值時,隨機梯度反而更可能避免進入區域性極小值中。
四.**及例項:
1. 對於第一種場景
1/*2結果可以得出 w0=3,w1=4。* 隨機梯度下降實驗:
3* 訓練集輸入為矩陣:
4* 1,4
5* 2,5
6* 5,1
7* 4,2
8* 輸出結果為:
9* 19
10* 26
11* 19
12* 20
13* 需要引數為 w:
14* ?
15* ?16*
17* 目標函式:y=w0*x0+w1*x1;18*
19*
*/20 #include21 #include 22
intmain()
23,,,};
25double result[4]=;
26double w[2]=;//
初始為零向量
27double loss=10.0;28
const
double n = 0.01; //
步長 29
for(int i=0;i<100&&loss>0.001;i++)
3039 error_sum = h -result[j];
40for(int k=0;k<2;k++)
4144
}45 printf("
%lf,%lf\n
",w[0],w[1
]);46
double loss=0;47
for(int j=0;j<4;j++)
4854 loss += (sum - result[j]) * (sum-result[j]);55}
56 printf("
%lf\n
",loss);57}
5859 system("
pause");
60return0;
61 }
1. 對於第二種場景
1/*2結果可以得出 w0=1,w1=1, b = -3 。* 基於感知機的隨機梯度下降實驗: 《統計學習方法》- p29-例2.1
3* 訓練集輸入為矩陣:
4* 3,3
5* 4,3
6* 1,1
7* 輸出結果為(表示例項的分類):
8* 1
9* 1
10* -1
11* 需要引數為 w:
12* ?
13* ?14*
15* 目標函式:y = w0 * x0 + w1 * x1 + b; 16*
17*
*/18 #include19 #include 20
intmain()
21,,};
23double y[4]=;
24double w[2]=;//
初始為零向量
25double b = 0;26
intj;
27const
double n = 1; //
步長 28
29while(1)30
36if(j < 3)37
42else
43break
;44 printf("
%d :%lf,%lf %lf\n
", j, w[0], w[1
], b);
4546}47
48 system("
pause");
49return0;
50 }
參考:1.
2. 李航 統計學習方法
原文**:
梯度下降方法
這幾天在看 統計學習方法 這本書,發現 梯度下降法 在 感知機 等機器學習演算法中有很重要的應用,所以就特別查了些資料。一.介紹 梯度下降法 gradient descent 是求解無約束最優化問題的一種常用方法,有實現簡單的優點。梯度下降法是迭代演算法,每一步需要求解目標函式的梯度向量。二.應用場...
梯度下降方法
簡介 梯度下降法是最小化目標函式j 的一種方法,旨在降低真實值和 值之間的誤差,其中 rd為模型引數。梯度下降法利用目標函式計算引數梯度 j 的反方向更新引數。學習率 learning rate 決定達到最小值或者區域性最小值過程中所採用的的步長大小,即,我們沿著目標函式的斜面下降的方向,直到到達谷...
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...