為什麼梯度下降演算法(BGD批量梯度下降)用的是所有樣本點梯度的均值作為最終的梯度方向?

為什麼梯度下降演算法(BGD批量梯度下降)用的是所有樣本點梯度的均值作為最終的梯度方向,而不是選取所有樣本點中最大的那一個梯度作為梯度更新的方向?


因為優化是一門獨立的學科,梯度下降演算法本身就不是為了機器學習的問題而設計(梯度下降最早可追溯到200多年前的柯西),在梯度下降的大部分應用中,並沒有「樣本」的概念存在。

梯度下降的應用問題一般就是抽象為就是簡單的最小化一個函數可導函數:min_x f(x) ,對於這個問題,梯度下降就是很簡單的迭代: x_{t+1}=x_t - eta 
abla f(x_t)

只不過在機器學習中,我們有了很多個樣本,而目標函數往往就是在每個樣本上的loss求平均,也就是說此時問題有了額外的結構: f(x)=sum_{i=1}^nell_i(x) 。此時梯度下降演算法就自然變成了: x_{t+1}=x_t - etasum_{i=1}^n 
abla ell_i(x_t) ,於是就有了你所說的「梯度求和」的形式。

當然,雖然梯度下降在求解機器學習問題中是一個有效的演算法,但因為機器學習問題有更加特殊的結果,那麼自然而然的大家就開始思考能否利用這種結構設計出更加高效的演算法。於是就有了隨機梯度下降演算法(SGD)以及它的眾多變種,其核心思想與你的想法有些類似,每次只算一個 ell_i(x) 的梯度,SGD中這個 i 是隨機抽樣得到的。

至於每輪迭代用最大的那一個樣本梯度顯然是不可行的。一個很容易可以想到的情況就是,如果有一個最大的樣本梯度是朝一個方向的,但剩下所有的樣本梯度都是朝另一個方向的,你覺得此時應該按最大的那個,還是按剩下所有的?一個更具體的例子,假設 ell_1(x)=(x+2)^2 ,但 ell_2(x)=cdots=ell_{10}(x)=(x-1)^2 ,很容易算出整個 f(x) 的最小值在 x=0.7 的位置取到。那麼假設我現在在 x_0=0 出發想迭代求解這個問題,我應不應該按 -
ablaell_1(x_0) 所指示的往負數方向走呢?


容易陷入局部極值,如果覺得平均效果不好請嘗試隨機梯度下降


每個樣本點都會產生一個梯度向量,最優的結果是所有梯度向量的和。如果把梯度向量比喻成一個作用力的話,最終的梯度方向就是它們的合力。尋找出樣本中方向最大的那個梯度也是可以的,因為尋找過程也需要計算所有的樣本點,單次迭代不會比批量梯度省很多計算量,而且會增加迭代次數,所以相對批量梯度沒啥優勢。隨機梯度和小批量相對來說單次迭代會省計算量,但是也會增加一些迭代次數,總體上比批量會好些(當然得根據實際樣本情況選擇)。具體推導過程可參考博客 http://blog.lisp4fun.com/2017/11/02/gradient-desent


推薦閱讀:

圖像處理中加權直方圖是什麼意思?
隨機梯度下降和正則項之間如何處理?
梯度上升演算法與梯度下降演算法求解回歸係數怎麼理解?
梯度下降法和高斯牛頓法的區別在哪裡,各自的優缺點呢?
使用ReLU作為激活函數還有必要用交叉熵計算損失函數嗎?

TAG:最優化 | 梯度下降 |