什麼是梯度(Gradient)
什麼是梯度(Gradient)
大家好我是 LukeTseng!近期學習機器學習跟深度學習時,遇到一些不懂的名詞,於是我就想將這些名詞各別製作一個筆記彙整起來,以便我日後學習、複習再次閱覽。如果文章有誤煩請各位協助指出,謝謝您點入本篇文章!接下來讓我們開始吧。
Loss Function(損失函數)
損失函數顧名思義就是告訴你這個模型他跑出來的預測數值,與實際數值有多差,若損失函數出來的數值越小,表示這個模型預測數值與實際數值相近(越小越好就對了)。
這邊假設有一個損失函數長這樣子:
當中 $x$ 是輸入值,為模型的參數值,而 $a$ 為目標值(ground truth)。
在訓練模型的時候,要怎麼知道輸入值 x 該怎麼調整?這時候就需要梯度(gradient)的概念了。
梯度(gradient)
這邊假設 a = 0,則這樣子 $L(x)$ 就等於 $L(x) = x^2$ 。
而所謂的梯度在一維情況,也就是只有一元的變數時,他就是所謂的切線斜率,也就是函數的變化方向跟速度。
在機器學習中最常見的優化方法就屬 Gradient descent(梯度下降法),首先第一步就是要挑選 x 的初始值是多少,不過先看到以下二次函數的圖形:

Image Source:https://www.researchgate.net/figure/Graph-of-y-x-2-the-equation-for-a-parabola_fig1_225666233
假設 x 的初始值是 -2 好了,就隨便選。接著再對 $L(x) = x^2$ 求導: $\frac{dL}{dx}|_{x=-2} = -4$
此時你會發現它的切線斜率是負的,可以想像如果是在 x = -2 時的切線上往左走的話,那它就逐漸遠離我們的目標值 $a = 0$ ,反之,往右走才會更加靠近對吧。所以我們要做的事情是讓這個 x 值變大,直到靠近 $a = 0$ 為止。
那如果切線斜率是正的呢?那就把 x 的值給減少。
整理一下:
- 切線斜率 > 0:x 值要增加。
- 切線斜率 < 0:x 值要減少。
梯度下降法會透過以上的規則不斷的求導取值,讓 x 值趨近於我們的目標值。
而這個東東可以寫成一個公式,長這樣:
至於 $\eta$ 是什麼呢,他唸作 eta,是小寫的 h,在機器學習領域叫做 learning rate(學習率)。learning rate 是決定要走多少步的參數,也就是每次要讓 x 增加或減少多少,如果越大那他就會學習得越快,但是這會有個風險,容易在最小值附近左右亂跳、震盪,甚至直接發散,損失忽高忽低降不下來。以這個二次函數做例子,假設你讓 learning rate 是 4,然後 x 在 -2 開始,那他就會在 x = -2, x = 2那邊跳來跳去。
然後 learning rate 前面有一個負號,仔細想一下,假設求得的切線斜率是 < 0 的,那 x 值要做增加對吧,所以給他加上一個負號讓他變正的,反之亦然。
再來 $wt$ 表示目前的參數值, $w{t + 1}$ 是下一個參數值, $w_t$ 要將計算完的 w 值給下一個參數 $w{t + 1}$ 。
兩參數的梯度
假設目前的情況是兩個參數: $L(x, y)$ 。
而兩參數的梯度下降法做法跟一個參數的基本上完全相同,先取 $x0, y_0$ 作為初始值,之後再對 $x_0, y_0$ 分別做偏微分: $$\frac{\partial L}{\partial x} |{x=x0,y=y_0} ,\frac{\partial L}{\partial y} |{x = x_0, y=y_0}$$
進一步可以寫成:
當中 $\nabla L$ 就是 gradient,只是把一堆偏微分寫成向量(vector)的形式而已。
所以二維的梯度就是代表著一個向量。
參考資料
Hung-yi Lee | ML Lecture 1: Regression - Case Study - YouTube
[机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)_机器学习的梯度概念-CSDN博客






