什麼是梯度下降

      在〈什麼是梯度下降〉中留言功能已關閉

梯度下降

梯度下降,就是對函數進行微分求取切線的斜率。

其實這個不好懂,所以換個角度來思考。牛頓告訴我們,當有加速度時,瞬間速度的公式是 $(v=at)$,v 是速度,a 是加速度(感受一下加速度,當車子一加速,人會往後傾,油門加愈大,感覺往後傾的力道愈大),t 是時間。

比如 a=2,那就是每秒鐘增加 2 m/s 的速度,第 0 秒的速度是 0 m/s,第 1 秒的速度是 2 m/s,第 2 秒的速度是 4 m/s, 那麼第 10 秒的速度就是 20 m/s。

再思考一個問題,第 1 秒車子會移動到多少公尺 ? 第 2 秒車子會到那裏? 公式是 $(S=\frac{1}{2}at^{2})$。如下的程式

import pylab as plt
import numpy as np
t=np.linspace(0,10,100)
a=2
v=a*t
S=(1/2)*a*t**2
fig, axes=plt.subplots(1,2, figsize=(12,6))
axes[0].plot(t, v)
axes[0].set_title("Speed")
axes[0].set_xlabel("Time")
axes[0].set_ylabel("Speed")
axes[1].plot(t, S)
axes[1].set_title("Distance")
axes[1].set_xlabel("Time")
axes[1].set_ylabel("Distance")
plt.savefig("accele_1.jpg")
plt.show()

上面右邊的圖,可以看到 x 軸是 time,y 軸是距離,而 $(S=\frac{1}{2}at^{2})$ 微分後產生的那一個直線斜率就是速度,也就是 $(v = at)$。

那麼換成 $(y = \frac{1}{2}ax^{2})$ 呢,那麼請問微分後 $({y}’ = ax)$,這個 $({y}’)$  是什麼? 我們都知道 $({y}’)$ 是斜率,但這斜率到底代表著什麼意思?? 一頭霧水,所以沒有物理學的運動定律公式就很難理解。

梯度下降的目的

梯度下降的目的,就是在曲線中找到極值。所以必需在特定的軸中一步一步逼進,進而找到斜率最接近 0 (水平斜率) 時的值。比如在底下的 $(y=x^{2})$ 函數中,要找到 y 的最小值,就必需沿著 x 軸一步一步逼進,求出 f(x) 的微分 $(\bigtriangledown f(x))$ 何時最接近 0 ,進而求出 y 值。

一階微分找極值

$(y=x^{2})$ 這個函數要找極值其實很簡單,根本不用什麼逼近法。 只要 y 對 x 作一階微分 $(y’=2x)$,然後求取 y’=0,也就是說 2x =0,自然就會知道 x=0 時有極值。

逼近法是在不知函數是多少時的解法!? 怪怪的喔,不知道函數是多少,那又怎麼對函數微分!!! 其實我們微分的對象是損失函數。

再度複習迴歸線

先使用以下的代碼產生亂數

import numpy as np
import pylab as plt
n=100
x=np.linspace(0,100,n)
y=3*x+5-np.random.randint(0,100,n)
plt.scatter(x, y)
plt.show()

由上面這些點(資料),要去找 f(x) = y = ax + b 的迴歸線。x 及 y 都知道了,也就那 100 個點的 x 軸及 y 軸的座標。問題來了, a 及 b 是多少。f(x) 都不知道,怎麼微分啊。