在上一節中,咱們給出了一個梯度降低的數學定義。在這節中,咱們將更直觀地感覺一下這個算法是作什麼的以及梯度降低算法的更新過程有什麼意義。 算法
這個是咱們上一節所講的梯度降低算法。讓咱們先簡單回顧一下。函數
接下來咱們將主要講這兩部分分別是幹什麼的以及爲何要將這兩部分放到一塊兒。學習
爲了更好的理解,咱們先舉一個較爲簡單的例子。如今假設咱們的最小化函數只有一個參數,即代價函數爲J(θ1)。θ1是一個實數,因此咱們能夠畫出來一個曲線圖。咱們看一下梯度降低算法在這個函數中起什麼做用。spa
假設函數以下圖所示。3d
如今咱們取一個點θ1,想象一下在這個函數上從這個點出發,那麼梯度降低要作的就是不斷地更新θ1(經過公式來更新)。blog
在這個例子中,求導的目的其實就是求這個紅色切線。如上圖所示,顯然這個切線的斜率是大於0的,那麼θ1減去一個大於0的數後(α也是大於0的),θ1減少,它會向左移動,顯然,咱們往這個方向移動是正確的。數學
如今,咱們取另一個θ1的值。此時這個倒數項對應下圖的紅線的斜率。咱們能夠看到這條直線向下傾斜,因此它的斜率小於0。那麼θ1加上一個大於0的數後(α也是大於0的),θ1增長,它會向右移動,顯然,咱們往這個方向移動是正確的。im
經過這個例子,咱們能很直觀地看到這個導數項的意義。接下來,咱們將研究α究竟有什麼做用。咱們先來看一下若是α太大或者過小會出現什麼樣的狀況。d3
(1)若是α過小時,咱們更新的時候用的就是一個很小的係數。那麼咱們每次邁出的的步子都是很是小的。若是咱們的學習速率過小,結果就是咱們只能一點點地挪動。這會致使咱們須要走很是多步才能夠到達最低點。因此,若是α過小,那麼降低的速度很是慢。margin
(2)那麼若是α太大,那麼梯度降低可能會越過最低點,甚至可能沒法收斂或者發散。假設咱們如今的點離最小值比較近,但由於此時α太大,那麼咱們會邁出很大的一步。那麼此時會致使咱們的代價函數變得更糟。結果,咱們會發現,咱們離最低點愈來愈遠了。
那麼如今有一個問題。若是θ1已經處在一個局部最優勢,你認爲下一步梯度降低會怎樣?
如圖所示,此時θ1在一個局部最優勢了,咱們會發現此時切線的斜率爲0,那麼更新以後的θ1其實與更新以前的θ1是同樣的。至關於梯度降低法更新其實什麼都沒有作,他並無改變參數值,這也正是咱們想要的。由於它使咱們的解始終保持在局部最優勢。這也說明了即便學習速率α保持不變,梯度降低法也能夠收斂到局部最低點的緣由。(?如何更好理解)
咱們再來看一個例子。有一個代價函數J(θ),咱們想要求它的局部最小值。 首先初始化個人梯度降低算法,在那個品紅色的點初始化,若是我更新一步梯度降低,也許它會帶我到這個點,由於這個點的導數是至關陡的。
如今,咱們在這個綠色的點,若是我再更新一步,你會發現個人導數,也即斜率,是沒那麼陡的。隨着我接近最低點,個人導數愈來愈接近零,因此,梯度降低一步後,新的導數會變小一點點。而後我想再梯度降低一步,在這個綠點,我天然會用一個稍微跟剛纔在那個品紅點時比再小一點的一步,到了新的紅色點,更接近全局最低點了,所以這點的導數會比在綠點時更小。因此,我再進行一步梯度降低時,個人導數項是更小的,𝜃1更新的幅度就會更小。因此隨着梯度降低法的運行,你移動的幅度會自動變得愈來愈小,直到最終移動幅度很是小,你會發現,已經收斂到局部極小值。
回顧一下,在梯度降低法中,根據定義在局部最低時導數等於零,因此當咱們接近局部最低時,導數值會自動變得愈來愈小,因此梯度降低將自動採起較小的幅度,這就是梯度降低的作法。因此實際上沒有必要再另外減少α。