[ch02-03] 梯度降低

系列博客,原文在筆者所維護的github上:https://aka.ms/beginnerAI
點擊star加星不要吝嗇,星越多筆者越努力。git

2.3 梯度降低

2.3.1 從天然現象中理解梯度降低

在大多數文章中,都以「一我的被困在山上,須要迅速下到谷底」來舉例,這我的會「尋找當前所處位置最陡峭的地方向下走」。這個例子中忽略了安全因素,這我的不可能沿着最陡峭的方向走,要考慮坡度。github

在天然界中,梯度降低的最好例子,就是泉水下山的過程:安全

  1. 水受重力影響,會在當前位置,沿着最陡峭的方向流動,有時會造成瀑布(梯度降低);
  2. 水流下山的路徑不是惟一的,在同一個地點,有可能有多個位置具備一樣的陡峭程度,而形成了分流(能夠獲得多個解);
  3. 遇到坑窪地區,有可能造成湖泊,而終止下山過程(不能獲得全局最優解,而是局部最優解)。

2.3.2 梯度降低的數學理解

梯度降低的數學公式:網絡

\[\theta_{n+1} = \theta_{n} - \eta \cdot \nabla J(\theta) \tag{1}\]函數

其中:學習

  • \(\theta_{n+1}\):下一個值;
  • \(\theta_n\):當前值;
  • \(-\):減號,梯度的反向;
  • \(\eta\):學習率或步長,控制每一步走的距離,不要太快以避免錯過了最佳景點,不要太慢以避免時間太長;
  • \(\nabla\):梯度,函數當前位置的最快上升點;
  • \(J(\theta)\):函數。

梯度降低的三要素

  1. 當前點;
  2. 方向;
  3. 步長。

爲何說是「梯度降低」?

「梯度降低」包含了兩層含義:spa

  1. 梯度:函數當前位置的最快上升點;
  2. 降低:與導數相反的方向,用數學語言描述就是那個減號。

亦即與上升相反的方向運動,就是降低。code

圖2-9 梯度降低的步驟blog

圖2-9解釋了在函數極值點的兩側作梯度降低的計算過程,梯度降低的目的就是使得x值向極值點逼近。get

2.3.3 單變量函數的梯度降低

假設一個單變量函數:

\[J(x) = x ^2\]

咱們的目的是找到該函數的最小值,因而計算其微分:

\[J'(x) = 2x\]

假設初始位置爲:

\[x_0=1.2\]

假設學習率:

\[\eta = 0.3\]

根據公式(1),迭代公式:

\[x_{n+1} = x_{n} - \eta \cdot \nabla J(x)= x_{n} - \eta \cdot 2x\tag{1}\]

假設終止條件爲J(x)<1e-2,迭代過程是:

x=0.480000, y=0.230400
x=0.192000, y=0.036864
x=0.076800, y=0.005898
x=0.030720, y=0.000944

上面的過程如圖2-10所示。

圖2-10 使用梯度降低法迭代的過程

2.3.4 雙變量的梯度降低

假設一個雙變量函數:

\[J(x,y) = x^2 + \sin^2(y)\]

咱們的目的是找到該函數的最小值,因而計算其微分:

\[{\partial{J(x,y)} \over \partial{x}} = 2x\]
\[{\partial{J(x,y)} \over \partial{y}} = 2 \sin y \cos y\]

假設初始位置爲:

\[(x_0,y_0)=(3,1)\]

假設學習率:

\[\eta = 0.1\]

根據公式(1),迭代過程是的計算公式:
\[(x_{n+1},y_{n+1}) = (x_n,y_n) - \eta \cdot \nabla J(x,y)\]
\[ = (x_n,y_n) - \eta \cdot (2x,2 \cdot \sin y \cdot \cos y) \tag{1}\]

根據公式(1),假設終止條件爲\(J(x,y)<1e-2\),迭代過程如表2-3所示。

表2-3 雙變量梯度降低的迭代過程

迭代次數 x y J(x,y)
1 3 1 9.708073
2 2.4 0.909070 6.382415
... ... ... ...
15 0.105553 0.063481 0.015166
16 0.084442 0.050819 0.009711

迭代16次後,J(x,y)的值爲0.009711,知足小於1e-2的條件,中止迭代。

上面的過程如表2-4所示,因爲是雙變量,因此須要用三維圖來解釋。請注意看兩張圖中間那條隱隱的黑色線,表示梯度降低的過程,從紅色的高地一直沿着坡度向下走,直到藍色的窪地。

表2-4 在三維空間內的梯度降低過程

觀察角度1 觀察角度2

2.3.5 學習率η的選擇

在公式表達時,學習率被表示爲\(\eta\)。在代碼裏,咱們把學習率定義爲learning_rate,或者eta。針對上面的例子,試驗不一樣的學習率對迭代狀況的影響,如表2-5所示。

表2-5 不一樣學習率對迭代狀況的影響

學習率 迭代路線圖 說明
1.0 學習率太大,迭代的狀況很糟糕,在一條水平線上跳來跳去,永遠也不能降低。
0.8 學習率大,會有這種左右跳躍的狀況發生,這不利於神經網絡的訓練。
0.4 學習率合適,損失值會從單側降低,4步之後基本接近了理想值。
0.1 學習率較小,損失值會從單側降低,但降低速度很是慢,10步了尚未到達理想狀態。

代碼位置

ch02, Level3, Level4, Level5

相關文章
相關標籤/搜索