應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。總結如下
下面我們以線性回歸演算法來對三種梯度下降法進行比較。
一般線性回歸函式的假設函式為:
對應的能量函式(損失函式)形式為:
下圖為乙個二維引數(θ0和θ1)組對應能量函式的視覺化圖:
一、批量梯度下降法 bgd
批量梯度下降法(batch gradient descent,簡稱bgd)是梯度下降法最原始的形式,它的具體思路是在更新每一引數時都使用所有的樣本來進行更新,其數學形式如下:
(1) 對上述的能量函式求偏導:
(2) 由於是最小化風險函式,所以按照每個引數θ的梯度負方向來更新每個θ:
具體的偽**形式為:
從上面公式可以注意到,它得到的是乙個全域性最優解,但是每迭代一步,都要用到訓練集所有的資料,如果樣本數目m很大,那麼可想而知這種方法的迭代速度!所以,這就引入了另外一種方法,隨機梯度下降。
優點:全域性最優解;易於並行實現;
缺點:當樣本數目很多時,訓練過程會很慢。
從迭代的次數上來看,bgd迭代的次數相對較少。其迭代的收斂曲線示意圖可以表示如下:
二、隨機梯度下降法 sgb
由於批量梯度下降法在更新每乙個引數時,都需要所有的訓練樣本,所以訓練過程會隨著樣本數量的加大而變得異常的緩慢。隨機梯度下降法(stochastic gradient descent,簡稱sgd)正是為了解決批量梯度下降法這一弊端而提出的。
將上面的能量函式寫為如下形式:
利用每個樣本的損失函式對θ求偏導得到對應的梯度,來更新θ:
具體的偽**形式為:
隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。但是,sgd伴隨的乙個問題是噪音較bgd要多,使得sgd並不是每次迭代都向著整體最優化方向。
優點:訓練速度快;
缺點:準確度下降,並不是全域性最優;不易於並行實現。
從迭代的次數上來看,sgd迭代的次數較多,在解空間的搜尋過程看起來很盲目。其迭代的收斂曲線示意圖可以表示如下:
三、小批量梯度下降法 mbgd
有上述的兩種梯度下降法可以看出,其各自均有優缺點,那麼能不能在兩種方法的效能之間取得乙個折衷呢?即,演算法的訓練過程比較快,而且也要保證最終引數訓練的準確率,而這正是小批量梯度下降法(mini-batch gradient descent,簡稱mbgd)的初衷。
mbgd在每次更新引數時使用b個樣本(b一般為10),其具體的偽**形式為:
機器學習(三) 梯度下降法
本部落格大部分參考了這篇博文 在微積分裡面,對多元函式的引數求 偏導數,把求得的各個引數的偏導數以向量的形式寫出來,就是梯度。比如函式f x,y 分別對x,y求偏導數,求得的梯度向量就是 f x f y 簡稱gr adf x,y 或者 f x,y 如果是3個引數的向量梯度,就是 f x f y,f ...
機器學習(二) 梯度下降法
前言 在上篇博文機器學習 一 中,最後我們提到,通過計算代價函式j 是否收斂於最小值來確定假設函式的引數 進而訓練出機器學習中的線性回歸演算法,那麼如何來找到使得j 最小話的引數 呢,本篇博文將介紹一種常用的方法,梯度下降法來確定引數 值。一 對於單特徵線性回歸,梯度下降法的演算法如下 repeat...
機器學習一(梯度下降法)
最近偶觸python,感ctrl c和ctrl v無比順暢,故越發膨脹。怒拾起python資料分析一pdf讀之,不到百頁,內心惶恐,嘆 臥槽,這都tm是啥,甚是迷茫。遂感基礎知識薄弱,隨意搜了機器學習教程,小看一翻。此文給出課件中幾個演算法,自己都不知道對不對,感覺還可以吧。本文以線性回歸為例,在給...