[04-00]單變數線性迴歸問題
系列部落格,原文在筆者所維護的github上:https://aka.ms/beginnerAI,
點選star加星不要吝嗇,星越多筆者越努力。
第4章 單入單出的單層神經網路
4.0 單變數線性迴歸問題
4.0.1 提出問題
在網際網路建設初期,各大運營商需要解決的問題就是保證伺服器所在的機房的溫度常年保持在23攝氏度左右。在一個新建的機房裡,如果計劃部署346臺伺服器,我們如何配置空調的最大功率?
這個問題雖然能通過熱力學計算得到公式,但是總會有誤差。因此人們往往會在機房裡裝一個溫控器,來控制空調的開關或者風扇的轉速或者製冷能力,其中最大製冷能力是一個關鍵性的數值。更先進的做法是直接把機房建在海底,用隔離的海水迴圈降低空氣溫度的方式來冷卻。
通過一些統計資料(稱為樣本資料),我們得到了表4-1。
表4-1 樣本資料
樣本序號 | 伺服器數量(千臺)X | 空調功率(千瓦)Y |
---|---|---|
1 | 0.928 | 4.824 |
2 | 0.469 | 2.950 |
3 | 0.855 | 4.643 |
... | ... | ... |
在上面的樣本中,我們一般把自變數X稱為樣本特徵值,把因變數Y稱為樣本標籤值。
這個資料是二維的,所以我們可以用視覺化的方式來展示,橫座標是伺服器數量,縱座標是空調功率,如圖4-1所示。
圖4-1 樣本資料視覺化
通過對上圖的觀察,我們可以判斷它屬於一個線性迴歸問題,而且是最簡單的一元線性迴歸。於是,我們把熱力學計算的問題轉換成為了一個統計問題,因為實在是不能精確地計算出每塊電路板或每臺機器到底能產生多少熱量。
頭腦靈活的讀者可能會想到一個辦法:在樣本資料中,我們找到一個與346非常近似的例子,以它為參考就可以找到合適的空調功率數值了。
不得不承認,這樣做是完全科學合理的,實際上這就是線性迴歸的解題思路:利用已有值,預測未知值。也就是說,這些讀者不經意間使用了線性迴歸模型。而實際上,這個例子非常簡單,只有一個自變數和一個因變數,因此可以用簡單直接的方法來解決問題。但是,當有多個自變數時,這種直接的辦法可能就會失效了。假設有三個自變數,很有可能不能夠在樣本中找到和這三個自變數的組合非常接近的資料,此時我們就應該藉助更系統的方法了。
4.0.2 一元線性迴歸模型
迴歸分析是一種數學模型。當因變數和自變數為線性關係時,它是一種特殊的線性模型。
最簡單的情形是一元線性迴歸,由大體上有線性關係的一個自變數和一個因變數組成,模型是:
\[Y=a+bX+ε \tag{1}\]
X是自變數,Y是因變數,ε是隨機誤差,a和b是引數,線上性迴歸模型中,a和b是我們要通過演算法學習出來的。
什麼叫模型?第一次接觸這個概念時,可能會有些不明覺厲。從常規概念上講,是人們通過主觀意識藉助實體或者虛擬表現來構成對客觀事物的描述,這種描述通常是有一定的邏輯或者數學含義的抽象表達方式。
比如對小轎車建模的話,會是這樣描述:由發動機驅動的四輪鐵殼子。對能量概念建模的話,那就是愛因斯坦狹義相對論的著名推論:\(E=mc^2\)。
對資料建模的話,就是想辦法用一個或幾個公式來描述這些資料的產生條件或者相互關係,比如有一組資料是大致滿足\(y=3x+2\)這個公式的,那麼這個公式就是模型。為什麼說是“大致”呢?因為在現實世界中,一般都有噪音(誤差)存在,所以不可能非常準確地滿足這個公式,只要是在這條直線兩側附近,就可以算作是滿足條件。
對於線性迴歸模型,有如下一些概念需要了解:
- 通常假定隨機誤差的均值為0,方差為σ^2(σ^2﹥0,σ^2與X的值無關)
- 若進一步假定隨機誤差遵從正態分佈,就叫做正態線性模型
- 一般地,若有k個自變數和1個因變數(即公式1中的Y),則因變數的值分為兩部分:一部分由自變數影響,即表示為它的函式,函式形式已知且含有未知引數;另一部分由其他的未考慮因素和隨機性影響,即隨機誤差
- 當函式為引數未知的線性函式時,稱為線性迴歸分析模型
- 當函式為引數未知的非線性函式時,稱為非線性迴歸分析模型
- 當自變數個數大於1時稱為多元迴歸
- 當因變數個數大於1時稱為多重回歸
我們通過對資料的觀察,可以大致認為它符合線性迴歸模型的條件,於是列出了公式1,不考慮隨機誤差的話,我們的任務就是找到合適的a和b,這就是線性迴歸的任務。
圖4-2 線性迴歸和非線性迴歸的區別
如圖4-2所示,左側為線性模型,可以看到直線穿過了一組三角形所形成的區域的中心線,並不要求這條直線穿過每一個三角形。右側為非線性模型,一條曲線穿過了一組矩形所形成的區域的中心線。在本章中,我們先學習如何解決左側的線性迴歸問題。
我們接下來會用幾種方法來解決這個問題:
- 最小二乘法;
- 梯度下降法;
- 簡單的神經網路法;
- 更通用的神經網路演算法。
4.0.3 公式形態
這裡要解釋一下線性公式中w和x的順序問題。在很多教科書中,我們可以看到下面的公式:
\[y = w^Tx+b \tag{1}\]
或者:
\[y = w \cdot x + b \tag{2}\]
而我們在本書中使用:
\[y = x \cdot w + b \tag{3}\]
這三者的主要區別是樣本資料x的形狀定義,相應地會影響到w的形狀定義。舉例來說,如果x有三個特徵值,那麼w必須有三個權重值與特徵值對應,則:
公式1的矩陣形式
x是列向量:
\[ x= \begin{pmatrix} x_{1} \\ x_{2} \\ x_{3} \end{pmatrix} \]
w也是列向量:
\[
w=
\begin{pmatrix}
w_{1} \\ w_{2} \\ w_{3}
\end{pmatrix}
\]
\[
y=w^Tx+b=
\begin{pmatrix}
w_1 & w_2 & w_3
\end{pmatrix}
\begin{pmatrix}
x_{1} \\
x_{2} \\
x_{3}
\end{pmatrix}
+b
\]
\[
=w_1 \cdot x_1 + w_2 \cdot x_2 + w_3 \cdot x_3 + b \tag{4}
\]
w和x都是列向量,所以需要先把w轉置後,再與x做矩陣乘法。
公式2的矩陣形式
公式2與公式1的區別是w的形狀,在公式2中,w直接就是個行向量:
\[ w= \begin{pmatrix} w_{1} & w_{2} & w_{3} \end{pmatrix} \]
而x的形狀仍然是列向量:
\[ x= \begin{pmatrix} x_{1} \\ x_{2} \\ x_{3} \end{pmatrix} \]
這樣相乘之前不需要做矩陣轉置了:
\[
y=wx+b=
\begin{pmatrix}
w_1 & w_2 & w_3
\end{pmatrix}
\begin{pmatrix}
x_{1} \\
x_{2} \\
x_{3}
\end{pmatrix}
+b
\]
\[
=w_1 \cdot x_1 + w_2 \cdot x_2 + w_3 \cdot x_3 + b \tag{5}
\]
公式3的矩陣形式
x是個行向量:
\[ x= \begin{pmatrix} x_{1} & x_{2} & x_{3} \end{pmatrix} \]
w是列向量:
\[ w= \begin{pmatrix} w_{1} \\ w_{2} \\ x_{3} \end{pmatrix} \]
所以x在前,w在後:
\[
y=x \cdot w+b=
\begin{pmatrix}
x_1 & x_2 & x_3
\end{pmatrix}
\begin{pmatrix}
w_{1} \\
w_{2} \\
w_{3}
\end{pmatrix}
+b
\]
\[
=x_1 \cdot w_1 + x_2 \cdot w_2 + x_3 \cdot w_3 + b \tag{6}
\]
比較公式4,5,6,其實最後的運算結果是相同的。
我們再分析一下前兩種形式的x矩陣,由於x是個列向量,意味著特徵由行表示,當有2個樣本同時參與計算時,x需要增加一列,變成了如下形式:
\[ x= \begin{pmatrix} x_{11} & x_{21} \\ x_{12} & x_{22} \\ x_{13} & x_{23} \end{pmatrix} \]
x的第一個下標表示樣本序號,第二個下標表示樣本特徵,所以\(x_{21}\)是第2個樣本的第1個特徵。看\(x_{21}\)這個序號很彆扭,一般我們都是認為行在前、列在後,但是\(x_{21}\)卻是處於第1行第2列,和習慣正好相反。
如果採用第三種形式,則兩個樣本的x的矩陣是:
\[ x= \begin{pmatrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \end{pmatrix} \]
第1行是第1個樣本的3個特徵,第2行是第2個樣本的3個特徵,這與常用的閱讀習慣正好一致,第1個樣本的第2個特徵在矩陣的第1行第2列,因此我們在本書中一律使用第三種形式來描述線性方程。
另外一個原因是,在很多深度學習庫的實現中,確實是把x放在w前面做矩陣運算的,同時w的形狀也是從左向右看,比如左側有2個樣本的3個特徵輸入(2x3表示2個樣本3個特徵值),右側是1個輸出,則w的形狀就是3x1。否則的話就需要倒著看,w的形狀成為了1x3,而x變成了3x2,很彆扭。
對於b來說,它永遠是1行,列數與w的列數相等。比如w是3x1的矩陣,則b是1x1的矩陣。如果w是3x2的矩陣,意味著3個特徵輸入到2個神經元上,則b是1x2的矩陣,每個神經元分配1個bias