機器學習中常見問題 幾種梯度下降法

2021-08-21 15:40:33 字數 3322 閱讀 4510

在機器學習演算法中,對於很多監督學習模型,需要對原始的模型構建損失函式,接下來便是通過優化演算法對損失函式進行優化,以便尋找到最優的引數。在求解機器學習引數的優化演算法中,使用較多的是基於梯度下降的優化演算法(gradient descent, gd)。

梯度下降法有很多優點,其中,在梯度下降法的求解過程中,只需求解損失函式的一階導數,計算的代價比較小,這使得梯度下降法能在很多大規模資料集上得到應用。梯度下降法的含義是通過當前點的梯度方向尋找到新的迭代點。

基本思想可以這樣理解:我們從山上的某一點出發,找乙個最陡的坡走一步(也就是找梯度方向),到達乙個點之後,再找最陡的坡,再走一步,直到我們不斷的這麼走,走到最「低」點(最小花費函式收斂點)。

如上圖所示,得到了區域性最優解。x,y表示的是theta0和theta1,z方向表示的是花費函式,很明顯出發點不同,最後到達的收斂點可能不一樣。當然如果是碗狀的,那麼收斂點就應該是一樣的。

在具體使用梯度下降法的過程中,主要有以下幾種不同的變種,即:batch、mini-batch、sgd。其主要區別是不同的變形在訓練資料的選擇上。

1、批量梯度下降法bgd

批梯度下降法(batch gradient descent)針對的是整個資料集,通過對所有的樣本的計算來求解梯度的方向。 

批量梯度下降法的損失函式為: 

進一步得到批量梯度下降的迭代式為: 

每迭代一步,都要用到訓練集所有的資料,如果樣本數目很大,那麼可想而知這種方法的迭代速度! 

優點:全域性最優解;易於並行實現;

缺點:當樣本數目很多時,訓練過程會很慢。

從迭代的次數上來看,bgd迭代的次數相對較少。其迭代的收斂曲線示意圖可以表示如下: 

2、小批量梯度下降法mbgd

在上述的批梯度的方式中每次迭代都要使用到所有的樣本,對於資料量特別大的情況,如大規模的機器學習應用,每次迭代求解所有樣本需要花費大量的計算成本。是否可以在每次的迭代過程中利用部分樣本代替所有的樣本呢?基於這樣的思想,便出現了mini-batch的概念。 

假設訓練集中的樣本的個數為1000,則每個mini-batch只是其乙個子集,假設,每個mini-batch中含有10個樣本,這樣,整個訓練資料集可以分為100個mini-batch。偽**如下: 

3、隨機梯度下降法sgd

隨機梯度下降演算法(stochastic gradient descent)可以看成是mini-batch gradient descent的乙個特殊的情形,即在隨機梯度下降法中每次僅根據乙個樣本對模型中的引數進行調整,等價於上述的b=1情況下的mini-batch gradient descent,即每個mini-batch中只有乙個訓練樣本。 

隨機梯度下降法的優化過程為: 

隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。但是,sgd伴隨的乙個問題是噪音較bgd要多,使得sgd並不是每次迭代都向著整體最優化方向。 

優點:訓練速度快;

缺點:準確度下降,並不是全域性最優;不易於並行實現。

從迭代的次數上來看,sgd迭代的次數較多,在解空間的搜尋過程看起來很盲目。其迭代的收斂曲線示意圖可以表示如下: 

(1)批量梯度下降—最小化所有訓練樣本的損失函式(對全部訓練資料求得誤差後再對引數進行更新),使得最終求解的是全域性的最優解,即求解的引數是使得風險函式最小。批梯度下降類似於在山的某一點環顧四周,計算出下降最快的方向(多維),然後踏出一步,這屬於一次迭代。批梯度下降一次迭代會更新所有theta,每次更新都是向著最陡的方向前進。

(2)隨機梯度下降—最小化每條樣本的損失函式,雖然不是每次迭代得到的損失函式都向著全域性最優方向, 但是大的整體的方向是向全域性最優解的,最終的結果往往是在全域性最優解附近。隨機也就是說我用樣本中的乙個例子來近似我所有的樣本,來調整theta,其不會計算斜率最大的方向,而是每次只選擇乙個維度踏出一步;下降一次迭代只更新某個theta,報著並不嚴謹的走走看的態度前進。

load data; %匯入x,y,test_feature

epsilon = 0.0001; %收斂閾值

alpha = 0.001; %學習率

k = 1; %迭代次數

n = size(x,2); %特徵數+1

m = size(x,1); %訓練樣本個數

theta = zeros(n,1);

theta_new = zeros(n,1);

converge = 0;

while(converge==0) %未收斂

for(i=1:m) %反覆使用m個訓練樣本,每個樣本就更新一次引數

j(k) = 1/2 * (norm(x*theta - y))^2;

for(j = 1:n)

theta_new(j) = theta(j)-alpha*(x(i,:)*theta-y(i,:))*x(i,j);

end;

if norm(theta_new-theta) < epsilon

converge=1;

theta = theta_new;

break;

else

theta = theta_new;

k = k + 1;

endend;

end;

機器學習中的常見問題 幾種梯度下降法

機器學習中的常見問題 幾種梯度下降法 在機器學習演算法中,對於很多監督學習模型,需要對原始的模型構建損失函式 l,接下來便是通過優化演算法對損失函式 l進行優化,以便尋找到最優的引數 在求解機器學習引數 的優化演算法中,使用較多的是基於梯度下降的優化演算法 gradient descent,gd 梯...

機器學習 梯度下降

參照 機器學習 這本書的第4.4.3節。一.解決目標及情景假設 當給定一些資料,輸入x向量已知,輸出y也已知,設計乙個線性函式y h x 去擬合這些資料。既然是線性函式,在此不妨設為h x w0 x0 w1 x1。此時我們遇到的問題就是如何確定w0和w1這兩個引數,即w w0,w1 這個向量。既然是...

機器學習 梯度下降

梯度下降法 如果讀者對方向導數和梯度的定義不太了解,請先閱讀上篇文章 方向導數與梯度 前些時間接觸了機器學習,發現梯度下降法是機器學習裡比較基礎又比較重要的乙個求最小值的演算法。梯度下降演算法過程如下 1 隨機初始值 2 迭代 在這裡,簡單談一下自己對梯度下降法的理解。首先,要明確梯度是乙個向量,是...