【機器學習】線性迴歸之Normal Equation(矩陣求導與線性代數視角)

Normal Equation

之前我們用梯度下降來求解線性迴歸問題的最優參數,除此之外我們還可以用正規方程法(Normal Equation)來求解其最優參數。

Normal Equation方法的推導有兩種方式

矩陣求導(matrix derivative)

其中(X\theta)^T=\theta^TX^T

其中X的行表示樣本,列表示特徵:

令導數等於零:

因此:

關於矩陣求導的公式可以參見:常用的向量矩陣求導公式

下面解釋一下部分求導的過程:


線性代數視角

一、求解不可解的方程組

先看一個最最簡單的例子——

例1.0 如圖,在R^2空間中有兩個向量,求一個常數\theta使兩個向量滿足\theta \overrightarrow{a} =\overrightarrow{b}

這個方程明顯不可解,因爲\overrightarrow{b}\overrightarrow{a}不共線,無法通過對\overrightarrow{a}數乘得到\overrightarrow{b}

再看下一個比較簡單的例子——

例2.0 R^3空間中的平面P有一組基\overrightarrow{a_1}\overrightarrow{a_2},如圖所示,求出常數\theta_1\theta_2使向量\overrightarrow{b}滿足條件\theta_1\overrightarrow{a_1}+\theta_2\overrightarrow{a_2} =\overrightarrow{b}

這個方程也明顯不可解,因爲\overrightarrow{b}不在平面P上,而\overrightarrow{a_1}\overrightarrow{a_2}的線性組合只能得到平面上的向量

以上兩個問題非常的典型,因爲在解決實際問題的時候,我們很難得到Perfect Solution,我們只能盡力而爲的爭取Best Solution。以上兩個例子明顯沒有做到perfect(連基本的方向都錯了),那麼如何找到Best Solution呢?

二、投影的應用(Projection

思路很簡單:我們只要找到一個\theta^*使\overrightarrow{a}方向上的向量\overrightarrow{p} =\theta^* \overrightarrow{a}距離\overrightarrow{b}最近。

回到最簡單的例子例1.0,這裏重複一遍

如圖,在R^2空間中有兩個向量,求一個常數\theta使兩個向量滿足\theta \overrightarrow{a} =\overrightarrow{b}

現在應該如何尋找\theta \overrightarrow{a} =\overrightarrow{b}的解呢?

最好的方法就是拋棄\overrightarrow{b}向量中垂直\overrightarrow{a}的分量,只要計算\theta使\theta \overrightarrow{a}等於向量\overrightarrow{b}\overrightarrow{a}方向的分量(即\overrightarrow{b}\overrightarrow{a}上的投影(Proj)\overrightarrow{p}),同時我們把向量\overrightarrow{b}垂直\overrightarrow{a}方向的分量稱爲\overrightarrow{e}(error)

原來的問題\theta \overrightarrow{a} =\overrightarrow{b}變成了求解\theta^* \overrightarrow{a} =\overrightarrow{p}\theta^*\theta的估計量

因爲\overrightarrow{p}\overrightarrow{e}合成了\overrightarrow{b}向量(\overrightarrow{e} +\overrightarrow{p}= \overrightarrow{b}),而且\overrightarrow{e}垂直於\overrightarrow{a}(\overrightarrow{e}\bot  \overrightarrow{a}),所以我們得出了一個非常重要的結論(敲黑板)!!!核心啊!!!

\overrightarrow{a}^T(\overrightarrow{b}-\theta^*\overrightarrow{a} ) = 0

這個方程的核心就是寫成向量內積形式的\overrightarrow{e}\overrightarrow{a}的垂直關係,只不過\overrightarrow{e}被拆開書寫。其實這個方程也可以寫作\overrightarrow{a}\times (\overrightarrow{b}-\theta^*\overrightarrow{a} ) = 0,但是寫作轉置向量\overrightarrow{a}^T的形式可以讓這個方程更自然的拓展到高維(向量內積)。好了,我們繼續改寫方程……

\theta^*\overrightarrow{a}^T \overrightarrow{a} =   \overrightarrow{a}^T\overrightarrow{b}
\theta^* = \frac{\overrightarrow{a}^T\overrightarrow{b}}{\overrightarrow{a}^T\overrightarrow{a}}

在這一步我們就得到了best\theta,但考慮到這並不perfect,所以我們稱之爲\theta^*

P.S.如果想用投影矩陣P來簡化從\overrightarrow{a}轉換到\overrightarrow{p}的過程,可以把\theta^*的結果帶入到\overrightarrow{p} =\theta^* \overrightarrow{a}中。我們發現投影矩陣P在形式上就等於乘數\theta^* = \frac{\overrightarrow{a}^T\overrightarrow{b}}{\overrightarrow{a}^T\overrightarrow{a}},即\overrightarrow{p}滿足\overrightarrow{p} =P\overrightarrow{a}

向量a·向量b=| a |*| b |*cosΘ
Θ爲兩向量夾角
| b |*cosΘ叫做向量b在向量a上的投影
| a |*cosΘ叫做向量a在向量b上的投影

\theta^* = \frac{\overrightarrow{a}^T\overrightarrow{b}}{\overrightarrow{a}^T\overrightarrow{a}}分子爲\overrightarrow{b}\overrightarrow{a}上的投影,分母爲\overrightarrow{a}\overrightarrow{a}上的投影,同乘了\overrightarrow{a}向量的模,投影的比值即爲\theta^*

現在我們再看看怎麼在R^3中解決不可解方程。

例2.0 在R^3空間中的平面P有一組基\overrightarrow{a_1}\overrightarrow{a_2},如圖所示,求出常數\theta_1\theta_2使向量\overrightarrow{b}滿足條件\theta_1\overrightarrow{a_1}+\theta_2\overrightarrow{a_2} =\overrightarrow{b}

平面P有基向量\overrightarrow{a_1}\overrightarrow{a_2},故投影P可以表示成基的線性組合\theta_1\overrightarrow{a_1}+\theta_2\overrightarrow{a_2},即\begin{bmatrix}a_1 a_2\end{bmatrix}\begin{pmatrix}\theta_1 \\\theta_2\end{pmatrix}

基向量組成的矩陣A=\begin{bmatrix}| \ \ |\\a_1 a_2\\| \ \ |\\\end{bmatrix}參數組成的向量\overrightarrow{\theta} = \theta_{1 \dots n} \ (n = 2)與平面垂直的誤差向量\overrightarrow{e} = \overrightarrow{b}-A \overrightarrow{\theta^*}。(這裏插一句話,最小二乘法的核心就是找出一個\theta^*就是讓\left|| A\theta-b \right||^2最小化

我們發現在R^2中的問題\theta \overrightarrow{a} =\overrightarrow{b}在這裏拓展成爲了A\overrightarrow{\theta }=\overrightarrow{b}

相應的,\theta^* \overrightarrow{a} =\overrightarrow{p}問題在這裏拓展成了A\overrightarrow{\theta^*}=\overrightarrow{p},其中

還是一樣的套路,我們還是從垂直關係入手——因爲P \bot \overrightarrow{e},而且,所以有以下方程組——

\begin{cases}\overrightarrow{a_1}^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0\\\overrightarrow{a_2}^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0\end{cases}

整理成矩陣的形式——

\begin{bmatrix}-\overrightarrow{a_1}^T-\\-\overrightarrow{a_2}^T-\\\end{bmatrix}(\overrightarrow{b}-A\overrightarrow{\theta^*})=0

(敲黑板!!!敲黑板!!!)
A^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0

寫到這裏回頭看看R^2情景下的核心公式\overrightarrow{a}^T(\overrightarrow{b}-\theta^*\overrightarrow{a} ) = 0,可以這傢伙換一套馬甲又出現了!!!看來方程A^T(\overrightarrow{b}-A\overrightarrow{\theta^*})=0是一種高維的拓展。我們可以把R^2中的\overrightarrow{a}看成一個只有一列的矩陣。

我們繼續整理這個公式——

A^T\overrightarrow{b} = A^TA\overrightarrow{\theta}
\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b}

寫到這裏我們就沒什麼可以乾的了。

有人可能想說——明明還可以繼續化簡啊!!!

\begin{equation}\begin{split}\overrightarrow{\theta} &= (A^TA)^{-1}A^T\overrightarrow{b}\\& = A^{-1}(A^T)^{-1}A^T\overrightarrow{b}\\& = A^{-1}\overrightarrow{b}\end{split}\end{equation}

但實際的情況中,我們不能保證矩陣A總是方陣(square),但是A^TA總是可以保證是方陣。因爲只有方陣纔有逆矩陣,所以我們只能保證有(A^TA)^{-1},而不能保證有A^{-1}

所以我們只能回到\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b}這裏。如果你有讀過Andrew Ng著名的公開課CS229的Lecture Notes,你一定記得他用矩陣求導得出的Normal Equation——

你會發現除了\overrightarrow{y}\overrightarrow{b}不一樣以外,我們已經把Normal Equation(\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b})推出來了……我居然在下一部分還沒有開始講就把內容說完了,場面一度非常尷尬啊。可見從投影推出Normal Equation是一件多麼自然的事情啊~~~我都不知道哪裏切開。

說到這裏先總結一下投影的幾個意義(敲黑板)!!!

A\overrightarrow{\theta}的所有可能結果都在一個固定的區域中,在線性代數中我們稱這個區域爲列空間(column space),列空間顧名思義就是矩陣各列的所有線性組合\overrightarrow{\theta_1}\overrightarrow{a_1}+\overrightarrow{\theta_2}\overrightarrow{a_2}+\dots+\overrightarrow{\theta_n}\overrightarrow{a_n}。在1-D的情況下列空間就是一條線,在2-D的情況下列空間就是一個平面。但是我們的數據哪裏會這麼恰好的落在矩陣的列空間裏呢?天底下哪有這樣的好事啊!!!

特別是在數據量特別大的情況下,矩陣特別是在數據量特別大的情況下,矩陣A會成爲一個n\gg  m的超級高大的n\times m矩陣(如下圖)。在這種等式數量遠大於未知數數量的情況中,我們很難滿足每一個等式的約束。A = \begin{bmatrix}1 & 1\\1 & 2\\. & .\\. & .\\ . & .\\1 & 3\\\end{bmatrix}

但是目標不再在空間裏並不代表不能求出解,只能說沒有perfect solution(語出Gilbert Strang),但是我們努力一下還是可以做到最好的(best solution)。我們用投影向量\overrightarrow{p}來尋找最合適的\overrightarrow{\theta^*}\overrightarrow{\theta^*}就是並不存在的完美解\overrightarrow{\theta}的估計值。

三、矩陣求導與投影推導之間的聯繫

回顧矩陣求導得到的Normal Equation:

以及投影視角得到的公式

\overrightarrow{\theta} = (A^TA)^{-1}A^T\overrightarrow{b}

兩者除了在符號表示上有所區別,其它的一模一樣,現在從符號本身的含義去聯繫兩者。

歸根結底,Normal Equation是用來求解一個最優化問題。在投影的方法中,矩陣A作爲一個基向量空間,用於尋找最優的\overrightarrow{\theta^*}以使得最接近\overrightarrow{b}

矩陣A有多少行就表示基向量空間有多少維(每個特徵有多少樣本量,就表明在這個空間中有多少維度),有多少列,就表示有多少個基向量。

在線性迴歸中矩陣A就等同於X,行數爲樣本量,列數爲特徵量,b等同於Y,爲目標向量。

當特徵遠遠少於樣本量的時候說明基向量的空間維數很高,但基向量很少。也就是說在一個很大的空間中,只有少數幾個方向給定,需要去擬合向量Y,那難度當然很大,誤差就很大。

當特徵數量遠遠大於樣本量的時候就相反,基向量空間不大,但基向量的個數很多。也就是說在一個不大的空間中,有很多的基向量,基本涵蓋了所有的方向,此時我想要找到一個基向量的線性組合去逼近目標向量Y,那就容易很多了。此時\overrightarrow{\theta^*}就會強依賴於當前的樣本,泛化能力就很差,過擬合。

四、Normal Equation應用

既然Normal Equation在上文都推導完了,這裏我們就隨便帶幾個數據來玩玩咯。

練手案例 找一條直線來擬合點 (1,1)、(2,2)、(3,2)

我們如果用一條直線來擬合的話,設h(\theta) = \theta_0 + \theta_1x_1,我們先得到以下值——

\overrightarrow{\theta} = \theta_{0 \dots n} \ (n = 1)

A = \begin{bmatrix}1 & 1\\1 & 2\\1 & 3\\\end{bmatrix}A^T = \begin{bmatrix}1 & 1 & 1 \\1 & 2 & 3 \\\end{bmatrix}A^TA = \begin{bmatrix}3 & 6 \\6 & 14\\\end{bmatrix}\overrightarrow{h(\theta)}= (1,2,2)^T

我們發現A\overrightarrow{\theta} =\overrightarrow{h(\theta)}很遺憾的沒有解,於是我們左右各乘上A^T,祭出了投影大招——A^TA\overrightarrow{\theta^*}=A^T\overrightarrow{h(\theta^*)}

再把這個方程變換成Normal Equation:\overrightarrow{\theta^*} = (A^TA)^{-1}A^T\overrightarrow{h(\theta^*)}

帶入數值在Matlab中小跑一下就得到了結果\overrightarrow{\theta^*} = \begin{pmatrix}\frac 23\\\\\frac 12 \\ \end{pmatrix}

即直線h(x) = \frac 23 +  \frac 12 x是上述三個點的擬合結果。

五、其他想說的話

1.關於A^TA\overrightarrow{\theta^*}=A^T\overrightarrow{h(\theta^*)}的暴力使用

在前一步可以不用判斷是否可解,可以直接使用A^TA\overrightarrow{\theta^*}=A^T\overrightarrow{h(\theta^*)}事實上,在最小二乘時遇到長方形矩陣A^T,我們就可以用上A^TA替代A^T計算。這是是一種路子很野的但是很簡單實用的經驗規則,可以簡單實驗如下——

用直線h(\theta) = \theta_0 + \theta_1x_1擬合三個點 (1,1)、(2,2)、(3,2)時,自然希望真實值和估計值的誤差\left \| h(\theta^*)-h(x)\right \|^2越小越好。\begin{equation}\begin{split}error=\left \| h(\theta^*)-h(x)\right \|^2 &= (\theta_0 +\theta_1 -1 )^2+(\theta_0 +2\theta_1-2 )^2+(\theta_0 +3\theta_1 -2 )^2\\\end{split}\end{equation}

分別對\theta_0\theta_1偏導數等於的零的值——

\begin{equation}\begin{split}\partial error/\partial\theta_0&= 2(\theta_0 +\theta_1 -1 )+2(\theta_0 +2\theta_1-2 )+2(\theta_0 +3\theta_1 -2 )\\& = 6\theta_0+12\theta_1-10\\& = 0\\\end{split}\end{equation}
\begin{equation}\begin{split}\partial error/\partial\theta_0&= 2(\theta_0 +\theta_1 -1 )+2(\theta_0 +2\theta_1-2 )\times 2+2(\theta_0 +3\theta_1 -2 )\times 3\\& = 12\theta_0+28\theta_1-22\\& = 0\\\end{split}\end{equation}這邊有個小筆誤,是對\theta_1做偏導做偏導

整理以上公式我們得到了方程組——

\begin{cases}3\theta_0+6\theta_1 = 5\\6\theta_0+14\theta_1 = -11\\\end{cases}

再整理一下,把這個方程寫成矩陣乘法的形式——

\begin{bmatrix}3&6\\6&14\end{bmatrix}\begin{pmatrix}\theta_0\\\theta_1\end{pmatrix}= \begin{pmatrix}5\\-11\end{pmatrix}

在最後一步整理以後我們發現剛纔千辛萬苦算出來的\begin{bmatrix}3 & 6 \\6 & 14\\\end{bmatrix}就是上文的A^TA啊!!!

說明這個經驗方法是可以信得過的!!!

2.關於化簡的問題

因爲投影的性質非常美妙,如果矩陣A是各行線性無關的方陣(square),說明存在A^{-1},則Normal Equation會變成如下形式——

\begin{equation}\begin{split}\overrightarrow{\theta} &= (A^TA)^{-1}A^T\overrightarrow{b}\\&=A^{-1}{A^T}^{-1}A^T\overrightarrow{b}\\&=A^{-1} \overrightarrow{b}\\\end{split}\end{equation}

說明如果存在一個perfect solution,該解不會受到影響。

3.多次投影有影響嗎?

已經在空間中的向量乘上投影矩陣P仍然等於本身,二次投影不會有任何副作用!也就是說P^2 = P。證明如下——

\begin{equation}\begin{split}P^2 &= (A(A^TA)^{-1}A^T)(A(A^TA)^{-1}A^T)\\&=A(A^TA)^{-1}(A^TA)(A^TA)^{-1}A^T\\&=A(A^TA)^{-1}A^T\\&=P\end{split}\end{equation}

參考文章:

線性迴歸及其概率解釋

NormalEquation推導過程

發佈了50 篇原創文章 · 獲贊 183 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章