機器學習中梯度下降演算法公式是不是有問題?

(為簡單地說明問題,下面討論中「自變數」X和「權重」w均為1*1向量)

========================

根據 {partial LOSS over partial (wX)}X的數值可以計算

 {partial LOSS over partial w}= {partial LOSS over partial (wX)}*{partial (wX) over partial w}={partial LOSS over partial (wX)}X

所以在學習率設為alpha 的時候,w的改變數為

delta w = - alpha {partial LOSS over partial (wX)}X-------------- (1)

========================

另一種我認為合理的思路如下

先計算期望的wX的改變數,即

delta (wX) = - alpha {partial LOSS over partial (wX)}------------- (2)

若想使wX改變那麼多,w的改變數需要為

delta w ={delta (wX) over X}= - alpha {partial LOSS over partial (wX)}*{1 over X} ----- (3)

與(1)式不同。

========================

我的兩個相互獨立的問題是:

1. BP演算法都採用(1)式,但為什麼不採用(3)式呢?

2. (1)式和(3)式衝突,是不是說明BP演算法不自洽、有問題?


題主所說其實是梯度下降的一個致命缺陷:不具有坐標變換不變性!

為了看清楚這一點,考慮單變數函數的最小化,作梯度下降:

delta x = - alpha {partial f(x) over partial x}

然而,如果我們令 x = eta x^prime,同樣作梯度下降:

egin{align} delta x^prime = - alpha {partial f(eta x^prime) over partial x^prime} \ = - alpha {partial f(x) over partial x} {partial x over partial x^prime} \ = - alpha eta {partial f(x) over partial x} \ = eta delta x end{align}

再看坐標變換不變的要求:

delta x = delta (eta x^prime) = eta delta x^prime

發現他們倆完全背道而馳了吧?

像單變數函數的優化還好,到深度神經網路里,梯度下降的這個缺陷就成為了主要瓶頸(臭名昭著的vanishing gradient有木有)。事實上深度學習里非常多的工作都是為了緩解這個問題。像Microsoft Research在ILSVRC2015很火的那篇文章,LSTM,還有「1.7tanh」,某種程度上都可以說是選取合適的變數使梯度不要太奇怪;還有就是改變優化演算法本身,比如GD with momentum,Newtonian methods。

最後兩點:

1. 沒有坐標變換不變的優化演算法

2. 題主你那個演算法根本沒法收斂呀(雖然對單變數函數是坐標變換不變的)

UPDATE

1.也就是說這種情況就是梯度下降的硬傷嗎?有沒有文獻討論過這個問題呢?

w作梯度下降和對(w x)作梯度下降的不同反映梯度下降演算法基本毫無transformation invariance。確實有文獻研究具有transformation invariance的優化演算法。

2.公式(3)只是我的一個想法,沒有考慮真正的訓練過程中怎麼算,不過為什麼說它沒法收斂呢?

之前我理解錯題主的意思了,我以為是要固定delta L,然後推算出delta w,這顯然無法收斂。而題主說的是delta(wx)=-alpha{partial L over partial (wx)},然後從delta(wx)得到delta w。題主的方法不像我之前理解的那樣無法收斂,但仍然有一個問題是x很小時delta w將會非常大,這也可能會阻礙收斂。

3.vanishing gradient的意思應該是計算得到的改變數隨著層數加深變得太小的意思吧,和我的問題有什麼關聯呢?

像 (ResNet vs. DNN),(LSTM vs. RNN) 這兩對模型的「表達力」其實並沒有區別,區別僅僅在於參數化的方式不同,但「糟糕」的參數化就會帶來vanishing gradient問題。雖然vanishing gradient確實是指梯度隨著深度增加而減小,但我更願意把vanishing gradient看作是梯度下降演算法的問題,而不是模型的。至於這和題主的問題有什麼關聯?好吧,其實我的整個回答都在說梯度下降在transformation invariance方面的缺陷,扯得有點遠了:)

UPDATE 2

Natural gradient descent是參數無關的


因為(3)的推導是錯的。

遵循定義

delta w = -alpha frac{partial LOSS}{partial w}

這裡的delta w是梯度下降中的一步,和frac{partial (wX)}{partial X}沒有任何關係。


問題在「若想使wX改變那麼多,w的改變數需要為」。

想一下,我想讓wX改變一個delta,在x一定的情況下,w的改變方法應該有任意多種(這個還好理解吧:舉個極端的例子,如果wX是一個數值的話,讓W矩陣只在某一位取非零值,總是可以解出W)?那麼應該選哪一種呢?在你的問題3式里,你取了p(wX)/X,是不是就是它呢?

對於梯度下降而言,為了讓參數沿著梯度方向更新,應該取「讓wX變化最快的那一種」,那就是取平行於梯度矩陣
left.frac{partial m{w} m{X}}{partial m{w}}
ightvert{w_i}的一個變化矩陣p(w),乘的係數和學習率a以及「- dLOSS/d(wX) 」有關. 看看,這個
left.frac{partial m{w} m{X}}{partial m{w}}
ightvert{w_i}就是X,不是/X.

另外提一個小小的建議。嚴格的說在你的推導中,『d』符號應當寫作『partial",代表偏導; "w"和"X"應當加粗,代表他們是矩陣(或向量);你的"/X"最好寫作"X^{-1}",代表矩陣逆運算右乘。並不是吹毛求眥,我也覺得提問者知道其中的區別,可能沒有特別注意或者不大清楚如何用知乎latex寫公式。時刻記住梯度下降演算法的推倒中是在和向量打交道,會避免出現一些在數值計算中想當然的問題。


公式3的等號你是怎麼寫出來的呢,你寫上等號他就相等了?為什麼不用3,因為3是你臆造出來的,與1+1=3一樣的東西。

怎麼拋開求導公式不談,你就稍微想想反向傳播的物理意義何在,其實x相當於對w的一個『加權』,所以乘以x。除x幹啥,有什麼意義?


分清楚偏導符號和Δ符號,不要混用自然就清楚了


推薦閱讀:

梯度下降or擬牛頓法?
CNN卷積神經網路當前最主要的應用除了圖像處理還有其他的應用方面嗎?
多類分類下為什麼用softmax而不是用其他歸一化方法?
為什麼都說神經網路是個黑箱?
為什麼人工智慧的研究都是基於演算法,而不是基於「硬體」?

TAG:微積分 | 應用數學 | 機器學習 | 神經網路 | 深度學習DeepLearning |