用人話講明白梯度下降Gradient Descent(以求解多元線性回歸參數為例)

文章目錄
1.梯度
2.多元線性回歸參數求解
3.梯度下降
4.梯度下降法求解多元線性回歸


梯度下降算法在機器學習中出現頻率特別高,是非常常用的優化算法。

本文借多元線性回歸,用人話解釋清楚梯度下降的原理和步驟。


1.梯度

梯度是什么呢?

我們還是從最簡單的情況說起,對于一元函數來講,梯度就是函數的導數。

而對于多元函數而言,梯度是一個向量,也就是說,把求得的偏導數以向量的形式寫出來,就是梯度

例如,我們在用人話講明白線性回歸LinearRegression一文中,求未知參數\beta_{0}\beta_{1}時,對損失函數求偏導,此時的梯度向量為(\frac{?Q}{?\beta_{0}}, \frac{?Q}{?\beta_{1}})^T,其中:

\frac{\partial Q}{\partial \beta_{0}}=2\sum_{1}^{n}{(y_{i}-\hat{\beta_{0}}-\hat{\beta_{1}}x_{i})}

\frac{\partial Q}{\partial \beta_{1}}=2\sum_{1}^{n}{(y_{i}-\hat{\beta_{0}}-\hat{\beta_{1}}x_{i})x_{i}}

那篇文章中,因為一元線性回歸中只有2個參數,因此令兩個偏導數為0,能很容易求得\beta_{0}\beta_{1}的解。

但是,這種求導的方法在多元回歸的參數求解中就不太實用了,為什么呢?


2.多元線性回歸參數求解

多元線性回歸方程的一般形式為:

y={\beta}_{0}+{\beta}_{1} {x}_{\mathbf{1} }+{\beta}_{2} {x}_{2 }+\cdots+{\beta}_{p}{x}_{p}
可以簡寫為矩陣形式(一般加粗表示矩陣或向量):
\boldsymbol{Y}=\boldsymbol{X}\boldsymbol{\beta}
其中,\boldsymbol{Y}=\left[\begin{array}{c}y_{1} \\ y_{2} \\ \vdots \\ y_{n}\end{array}\right], \boldsymbol{X}=\left[\begin{array}{cccc}1 & x_{11} & \cdots & x_{1 p} \\ 1 & x_{21} & \cdots & x_{2 p} \\ \vdots & \vdots & & \vdots \\ 1 & x_{n 1} & \cdots & x_{n p}\end{array}\right], \boldsymbol{\beta}=\left[\begin{array}{c}\beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p}\end{array}\right]

之前我們介紹過一元線性回歸的損失函數可以用殘差平方和:
Q=\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}

代入多元線性回歸方程就是:
Q=\sum_{i=1}^{n}\left(y_{i}-\hat\beta_{0}-\hat\beta_{1} x_{i 1}-\ldots-\hat\beta_{p} x_{i p}\right)^{2}
用矩陣形式表示:
\begin{aligned} Q &=(\boldsymbol{X}\boldsymbol{\beta}-\boldsymbol{Y})^T(\boldsymbol{X}\boldsymbol{\beta}-\boldsymbol{Y}) \\ & =(\boldsymbol \beta^{T} \boldsymbol{X}^{T}-\boldsymbol{Y}^{T})(\boldsymbol{X} \boldsymbol\beta-\boldsymbol{Y}) \\ & =\boldsymbol\beta^{T} \boldsymbol{X}^{T} \boldsymbol{X} \boldsymbol\beta-\boldsymbol\beta^{T} \boldsymbol{X}^{T} \boldsymbol{Y}-\boldsymbol{Y}^{T} \boldsymbol{X} \boldsymbol\beta+\boldsymbol{Y}^{T} \boldsymbol{Y}\end{aligned}

上面的展開過程涉及矩陣轉置,這里簡單提一下矩陣轉置相關運算,以免之前學過但是現在忘了:
(A+B)^{T}=A^{T}+B^{T}

(A B)^{T}=B^{T} A^{T}

好了,按照一元線性回歸求解析解的思路,現在我們要對Q求導并令導數為0(原諒我懶,后面寫公式就不對向量或矩陣加粗了,大家能理解就行):
\begin{aligned} \frac{\partial Q}{\partial \beta}=2 X^{T} X \beta-X^{T} Y-X^{T} Y &=0 \\ 2X^{T} X \beta-2X^{T} Y &=0 \\ X^{T} X \beta&=X^{T} Y \\ \beta &=\left(X^{T} X\right)^{-1} X^{T} Y \end{aligned}

上面的推導過程涉及矩陣求導,這里以{Y}^{T} {X} \beta求導為例展開講下,為什么\frac{\partial {Y}^{T} {X} \beta}{\partial \beta}={X}^{T} {Y},其他幾項留給大家舉一反三。

首先:
\begin{aligned} \frac{\partial {Y}^{T} {X} \beta}{\partial \beta} = \frac{\partial \left((y_{1}, y_{2}, \dots,y_{n}) \left[\begin{array}{cccc}1 & x_{11} & \cdots & x_{1 p} \\ 1 & x_{21} & \cdots & x_{2 p} \\ \vdots & \vdots & & \vdots \\ 1 & x_{n 1} & \cdots & x_{n p}\end{array}\right] \left[\begin{array}{c}\beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p}\end{array}\right]\right)} {\partial \left[\begin{array}{c}\beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p}\end{array}\right]} \end{aligned}

為了直觀點,我們將{Y}^{T} {X}記為A,因為Y是n維列向量,X是n×(p+1)的矩陣,因此{Y}^{T} {X}是(p+1)維行向量:
(y_{1}, y_{2}, \dots,y_{n}) \left[\begin{array}{cccc}1 & x_{11} & \cdots & x_{1 p} \\ 1 & x_{21} & \cdots & x_{2 p} \\ \vdots & \vdots & & \vdots \\ 1 & x_{n 1} & \cdots & x_{n p}\end{array}\right] = (\alpha_{0}, \alpha_{1}, \dots,\alpha_{p})
那么上面求導可以簡寫為:
\begin{aligned} \frac{\partial {Y}^{T} {X} \beta}{\partial \beta} = \frac{\partial \left((\alpha_{0}, \alpha_{1}, \dots,\alpha_{p}) \left[\begin{array}{c}\beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p}\end{array}\right]\right)} {\partial \left[\begin{array}{c}\beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p}\end{array}\right]}= \frac{\partial (\alpha_{0}\beta_{0}+\dots+\alpha_{p}\beta_{p})} {\partial \left[\begin{array}{c}\beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p}\end{array}\right]} \end{aligned}

這種形式的矩陣求導屬于分母布局,即分子為行向量或者分母為列向量(這里屬于后者)。

搞不清楚的可以看看這篇:矩陣求導實例,這里我直接寫出標量/列向量求導的公式,如下(y表示標量,X表示列向量):
\frac{\partial y}{\partial {X}}= \left[\begin{array}{c} \frac{\partial y}{\partial x_{1}} \\ \frac{\partial y}{\partial x_{2}} \\ \vdots \\ \frac{\partial y}{\partial x_{n}} \end{array}\right]

根據上式,顯然有:
\frac{\partial (\alpha_{0}\beta_{0}+\dots+\alpha_{p}\beta_{p})} {\partial \left[\begin{array}{c}\beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p}\end{array}\right]} = {\left[\begin{array}{c} \frac{\partial \alpha_{0}\beta_{0}}{\partial \beta_{0}} \\ \frac{\partial \alpha_{1}\beta_{1}}{\partial \beta_{1}} \\ \vdots \\ \frac{\partial \alpha_{p}\beta_{p}}{\partial \beta_{p}} \end{array}\right]}= \left[\begin{array}{c}\alpha_{0} \\ \alpha_{1} \\ \vdots \\ \alpha_{p}\end{array}\right]

前面我們將{Y}^{T} {X}記為A,A=(\alpha_{0}, \alpha_{1}, \dots,\alpha_{p}),那么上面算出來的結果就是{A}^{T},即{X}^{T} {Y}。

說了這么多有的沒的,最終我想說是的\beta=\left(X^{T} X\right)^{-1} X^{T} Y,里面涉及到矩陣求逆,但實際問題中可能X沒有逆矩陣,這時計算的結果就不夠精確。

第二個問題就是,如果維度多、樣本多,即便有逆矩陣,計算機求解的速度也會很慢。

所以,基于上面這兩點,一般情況下我們不會用解析解求解法求多元線性回歸參數,而是采用梯度下降法,它的計算代價相對更低。


3.梯度下降

好了,重點來了,本文真正要講的東西終于登場了。

梯度下降,就是通過一步步迭代,讓所有偏導函數都下降到最低。如果覺得不好理解,我們就還是以最簡單的一元函數為例開始講。

下圖是我用Excel簡單畫的二次函數圖像(看起來有點歪,原諒我懶……懶得調整了……),函數為y=x^2,它的導數為y=2x。

在這里插入圖片描述

如果我們初始化的點在x=1處,它的導函數值,也就是梯度值是2,為正,那就讓它往左移一點,繼續計算它的梯度值,若為正,就繼續往左移。

如果我們初始化的點在x=-1處,該處的梯度值是-2,為負,那就讓它往右移。

多元函數的邏輯也一樣,先初始化一個點,也就是隨便選擇一個位置,計算它的梯度,然后往梯度相反的方向,每次移動一點點,直到達到停止條件。

這個停止條件,可以是足夠大的迭代步數,也可以是一個比較小的閾值,當兩次迭代之間的差值小于該閾值時,認為梯度已經下降到最低點附近了。

在這里插入圖片描述

二元函數的梯度下降示例如上圖(圖片來自梯度下降),對于這種非凸函數,可能會出現這種情況:初始化的點不同,最后的結果也不同,也就是陷入局部最小值。

在這里插入圖片描述

這種問題比較有效的解決方法,就是多取幾個初始點。不過對于我們接下來講的多元線性回歸,以及后面要講的邏輯回歸,都不存在這個問題,因為他們的損失函數都是凸函數,有全局最小值。

用數學公式來描述梯度下降的步驟,就是:
\Theta_{k+1}=\Theta_{k}-\alpha \cdot g

解釋下公式含義:

  • \Theta_{k}為k時刻的點坐標,\Theta_{k+1}為下一刻要移動到的點的坐標,例如\Theta_{0}就代表初始化的點坐標,\Theta_{1}就代表第一步到移動到的位置;
  • g代表梯度,前面有個負號,就代表梯度下降,即朝著梯度相反的反向移動;
  • \alpha被稱為步長,用它乘以梯度值來控制每次移動的距離,這個值的設定也是一門學問,設定的過小,迭代的次數就會過多,設定的過大,容易一步跨太遠,直接跳過了最小值。
    在這里插入圖片描述


4.梯度下降法求解多元線性回歸

回到前面的多元線性回歸,我們用梯度下降算法求損失函數的最小值。

首先,求梯度,也就是前面我們已經給出的求偏導的公式:
\frac{\partial Q}{\partial \beta}=2 X^{T} X \beta-2X^{T} Y=2 X^{T} (X \beta-Y)

將梯度代入隨機梯度下降公式:
\Theta_{k+1}=\Theta_{k}-\alpha \cdot 2 X^{T} (X \beta-Y)

這個式子中,X矩陣和Y向量都是已知的,步長是人為設定的一個值,只有參數\beta是未知的,而每一步的\Theta是由\beta決定的,也就是每一步的點坐標。

算法過程:

  1. 初始化\beta向量的值,即\Theta_{0},將其代入\frac{\partial Q}{\partial \beta}得到當前位置的梯度;
  2. 用步長\alpha乘以當前梯度,得到從當前位置下降的距離;
  3. 更新\Theta_1,其更新表達式為\Theta_1=\Theta_0-\alpha \cdot 2 X^{T} (X \Theta_0-Y);
  4. 重復以上步驟,直到更新到某個\Theta_k,達到停止條件,這個\Theta_k就是我們求解的參數向量。

參考鏈接:
深入淺出--梯度下降法及其實現
梯度下降與隨機梯度下降概念及推導過程

文中圖片水印為本人博客地址:https://blog.csdn.net/simplification

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370