梯度下降為什麼步長要乘以導數?
我目前的理解是導數只是說明了方向,那麼為什麼不使用導數大於0則乘1,導數小於0則乘-1的計算方法呢?
梯度下降: 題主問的是為什麼不可以:
題主的問題:梯度下降為什麼步長要乘以導數?
這個問題本身就有問題。所謂「梯度」下降,即用梯度函數迭代求解優化問題,減小目標函數的值。而一個函數的梯度,就是它的導數。所以梯度下降法就是每次迭代時,將當前解參照梯度向量進行修改。題主所謂「為什麼步長要乘以導數」,從字面上問的是,有一個確定的步長(標量)了,為什麼要乘以一個的導數(向量)。那麼,最直接的回答就是:梯度下降法就是要走導數方向,光一個步長你往哪兒走?
然而,我想題主應該所問的並不是這個問題。而是:為什麼梯度下降法不是沿導數方向走一個固定的步長,而是與導數的模長成正比?
規範一下下文使用的符號:
:維度為維的自由變數,亦即我們所要研究的優化問題的自變數。形式上是一個列向量;:一個從維實空間到實數域的映射;:初始解;:第個迭代的當前解。那麼,梯度下降法的迭代步驟即可表示為:
其中是一個正常數。於是修改版的題主問題就是:為什麼梯度下降法不採用
- 加上一個模長作為分母,形式上首先就不及原方法簡潔,無端增加的分母並沒有對求解帶來幫助,反而弄巧成拙地增加了計算的複雜性。哲學上,有一個奧卡姆剃刀原理,大意是說如果一個簡單的形式和一個複雜的形式能做同樣一件事情,並且可以做的同樣好,那麼簡單的形式是更好的。因此,在沒有充足的理由做導數的歸一化時,我們認為,不去做這個歸一化是更好的;
- 事實上,不做導數歸一化有更大的優勢。我們姑且用一元函數舉例說明一下。實際上對平滑的高維函數依然成立。試看下圖藍色曲線為,橘色和綠色直線分別為在和處的切線。橘色直線的方程為
綠色直線的方程為
兩條直線上橫坐標為的點的縱坐標,分別可以表示目標函數從當前解出發,使用梯度下降法沿負梯度方向前進步長後的值。可以看出,處的切線斜率較小,那麼極小值應該就在附近不遠了!那麼以這一點為初始解,應該要少移動一點,否則可能一步就跨出了這個好地方;而處則不然,它的導數較大,目標函數值變化較為劇烈,如果採用和相同的步長,那就慢慢等吧,一點一點挪要到什麼時候才能達到極小值呢?不如步子邁大一點,快些找到目標函數值平穩的區間。
梯度下降是指沿著梯度下降的方向走。導數是梯度上升的方向,所以導數乘以負一是梯度下降方向,步長意味著你這步子一次邁多遠。也就是說負導數決定你往哪個方向走,係數決定你一次走多遠
有幾個回答已經擊中了題目要害,即:
正負號只代表一維的方向
二維甚至更高維的變數空間,當然要用梯度這個矢量(或者你可以理解為跟梯度方向一樣的單位矢量)
====擴展閱讀 (網上都可找到)===1. 視頻課程:Stanford公開課"Convex Optimization II" by Stephen P. Boyd2. 入門教材:"Optimization-Theory and Practice" by Jonathan M. Borwein
樓上的回答是不準確的,梯度下降顧名思義,導數向量也就是他的梯度方向!樓上回答的在一維導數的情況下取-1/1,方向仍然正確。但如果是多維的話,那麼方向都錯了,極有可能根本不會收斂。例如(1,1000)這個二維向量,他的梯度方向幾乎是90度,也就是y軸,如果改成(1,1)那麼他的方向就會是45度。手機答,無圖
乘的是梯度好伐?高數學過的,沿梯度方嚮導數最大,對於光滑可微的點,梯度(導數最大的方向)恰好等於各維求偏導得出的向量所指向的那個方向,大小也是導數大小。但關鍵這裡是乘方向,不是乘導數,導數就是一個數。
梯度下降法利用梯度方向。
當梯度只有一維的時候,『導數大於0則乘1,導數小於0則乘-1』和梯度方向一樣。但是,對於多維的梯度,採用『導數大於0則乘1,導數小於0則乘-1』顯然這個方向不再是梯度方向,而是在每個維度上都做了一定的歸一化。當然,題主可以設計不使用原始梯度的優化演算法,完全可以換個名字。其實不一定不可以,只要能設計相應的演算法,並證明在一定情況下它能收斂且有較好的收斂速度就可以了,現在我們只知道它是下降方向
為了達到坡越陡滑的越快,坡越緩滑的越慢的效果。
既然導數的正負已經決定了方向,那你何必還要認為的判斷正負並加上符號?莫非你忘記了數軸的正方向么。題目描述改了。導數的絕對值也可以告訴你應該跑多快啊。何必丟掉呢
因為單位步長1不一定是最優步長。
------------------------------------------好吧,原來題主不是問這個。更新:
兩句話解決題主問題:梯度是一個向量,具有大小和方向。負梯度(它本身具有確定的方向!)是函數值下降最快的方向。以下是簡要說明:
求解無約束問題時候,負梯度是當前函數值下降最快的方向。對於線性搜索型的下降演算法,迭代格式為,其中為步長,為方向。
所謂最速下降法,就是在迭代的過程中使用負梯度的方向作為迭代的方向,即,於是就有了迭代格式。(寫負號寫裡面會不會好理解點?)
現在來看看題主給出的迭代格式(此處根據題目中文描述以及我腦補,應該是想問這個形式…謝評論指正),為方便說明,以一元函數為例,即。如果0" eeimg="1">,即,「看起來沒什麼問題」;如果,即。親,為什麼要走正梯度的方向,這可是函數值增加的方向!說好的要求極小值呢!那麼為什麼不使用導數大於0則乘1,導數小於0則乘-1的計算方法呢?
然而,不管一元還是多元,負梯度(它的方向是確定的!)都是函數值下降最快的方向,而不是梯度裡面的分量「全部為負值」的方向。
最後,推薦優化入門級教材:Jorge Nocedal, Stephen J. Wright, Numerical Optimization.負號 控制始終滑向下降的方向導數控制下降速度
時,越小,函數變化越快,越大,滑動就越快
反之亦然這個要從梯度下降法的原理說起,步長乘以導數是從變步長到常數步長的結果,具體推導見下圖。
越到最優的地方坡度越小,極端的,最優值處的導數為0。而在離最優值近的地方應該慢點逼近,步子大了,容易越過找不到最優值。在離最優值值遠的地方應該快點走,步子大點沒關係。調節步大步小當然是成一個可變的係數,這個係數在坡度小的地方要小,在坡度大的地方要大。導數不是正好滿足這個要求嗎!
你這麼搞也不是不可以, 因為它確實是一個下降方向(d"g&>=0, d 是你的update方向 g是梯度)。事實上,你不能說你這樣按照sign來更新就一定不如按照梯度更新。按照梯度的更新的一個理論依據是這種更新實際上是在你只有一階梯度信息,和bounded二階導數特徵值(Lipschitz continuous gradient),即目標函數f(x)被近似函數h(x)bound (和泰勒展開式類似):f(x)&<=h(x)=f(x0)+&
梯度是由各特徵緯度上的偏導形成的,既然是偏導那麼拿其中一個緯度來說就可以按斜率來理解了。斜率/偏導的正負決定了,這個緯度隨著自變數增加是增的還是減的!同樣重要的,其大小決定了這個增/減的速度,怎麼能忽略?
您這樣如果x是大於1維的那麼就丟失方向的信息。不過可能您認為對x中每一維都這麼做的話,似乎是可以收斂的…
擼主,你這是僅僅考慮一維情況,多維空間可不止正負
因為導數不是只有正負兩個方向呀。
二維的平面為例,你在山腰上,要向山下走,並不是只有東西兩個方向呀。斜率最大的方向,如果恰好是南北方向,這麼橫著走不是很虧。當然如果你的向量就是1維的,那其實取個正負的方向就可以了。陡的地方多走點,不陡的地方少走點算是兼顧了效率的同時又保證了收斂吧。
梯度向量的分量是偏導數,實際上是乘以梯度向量。分開寫就是乘以偏導數了。不知道你的問題重點是導數部分還是步長部分,步長的話,就是控制每一步在梯度方向走多遠,步長太大會出現無法收斂到最優解的情況,太小的話收斂速度慢,所以要選擇合適的步長。
推薦閱讀:
※正態分布里為什麼會出現自然底數e和圓周率pi呢?
※真正的數學建模高手是什麼境界...?
※數學中國論壇的美賽輔助報名靠譜嗎?
※微軟的計算器為什麼輸入 ln 2 是先輸入 2 再輸入 ln?
※物理系適合的張量教材還有變分法教材?