深度学习pytorch--线性回归(一)
線性回歸
- 線性回歸案例
- 提出問題
- 模型定義
- 模型訓練
- (1) 訓練數據
- (2) 損失函數
- (3) 優化算法
- 模型預測
- 線性回歸的表示方法
- 神經網絡圖
- 矢量計算
- 小結
線性回歸案例
線性回歸輸出是一個連續值,因此適用于回歸問題?;貧w問題在實際中很常見,如預測房屋價格、氣溫、銷售額等連續值的問題。
提出問題
目標是預測一棟房子的售出價格,假設價格只取決于面積和房齡這兩個因素。
模型定義
設房屋的面積為 x1x_1x1?,房齡為 x2x_2x2?,售出價格為 yyy。我們需要建立基于輸入 x1x_1x1? 和 x2x_2x2? 來計算輸出 yyy 的表達式,也就是模型(model)。顧名思義,線性回歸假設輸出與各個輸入之間是線性關系:
y^=x1w1+x2w2+b\hat{y} = x_1 w_1 + x_2 w_2 + b y^?=x1?w1?+x2?w2?+b
其中 w1w_1w1? 和 w2w_2w2? 是權重(weight),bbb 是偏差(bias),且均為標量。它們是線性回歸模型的參數(parameter)。模型輸出 y^\hat{y}y^? 是線性回歸對真實價格 yyy 的預測或估計。我們通常允許它們之間有一定誤差。
模型訓練
接下來我們需要通過數據來尋找特定的模型參數值,使模型在數據上的誤差盡可能小。這個過程叫作模型訓練(model training)。下面我們介紹模型訓練所涉及的3個要素。
(1) 訓練數據
我們通常收集一系列的真實數據,例如多棟房屋的真實售出價格和它們對應的面積和房齡。我們希望在這個數據上面尋找模型參數來使模型的預測價格與真實價格的誤差最小。
在機器學習術語里,
- 該數據集被稱為訓練集(training set)
- 一棟房屋被稱為一個樣本(sample)
- 其真實售出價格叫作標簽(label)
- 用來預測標簽的兩個因素叫作特征(feature)。特征用來表征樣本的特點。
假設我們采集的樣本數為 nnn,索引為 iii 的樣本的特征為 x1(i)x_1^{(i)}x1(i)? 和 x2(i)x_2^{(i)}x2(i)?,標簽為 y(i)y^{(i)}y(i)。對于索引為 iii 的房屋,線性回歸模型的房屋價格預測表達式為
y^(i)=x1(i)w1+x2(i)w2+b\hat{y}^{(i)} = x_1^{(i)} w_1 + x_2^{(i)} w_2 + b y^?(i)=x1(i)?w1?+x2(i)?w2?+b
(2) 損失函數
在模型訓練中,我們需要衡量價格預測值與真實值之間的誤差。通常我們會選取一個非負數作為誤差,且數值越小表示誤差越小。使用均方誤差(MSE)。它在評估索引為 iii 的樣本誤差的表達式為
?(i)(w1,w2,b)=12(y^(i)?y(i))2\ell^{(i)}(w_1, w_2, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2?(i)(w1?,w2?,b)=21?(y^?(i)?y(i))2
其中常數 12\frac 1 221? 使對平方項求導后的常數系數為1,這樣在形式上稍微簡單一些。顯然,誤差越小表示預測價格與真實價格越相近,且當二者相等時誤差為0。
通常,我們用訓集中所有樣本誤差的平均來衡量模型預測的質量,即
?(w1,w2,b)=1n∑i=1n?(i)(w1,w2,b)=1n∑i=1n12(x1(i)w1+x2(i)w2+b?y(i))2\ell(w_1, w_2, b) =\frac{1}{n} \sum_{i=1}^n \ell^{(i)}(w_1, w_2, b) =\frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right)^2 ?(w1?,w2?,b)=n1?i=1∑n??(i)(w1?,w2?,b)=n1?i=1∑n?21?(x1(i)?w1?+x2(i)?w2?+b?y(i))2
在模型訓練中,我們希望找出一組模型參數,記為 w1?,w2?,b?w_1^*, w_2^*, b^*w1??,w2??,b?,來使訓練樣本平均損失最小:
w1?,w2?,b?=arg?min?w1,w2,b?(w1,w2,b)w_1^*, w_2^*, b^* = \underset{w_1, w_2, b}{\arg\min} \ell(w_1, w_2, b) w1??,w2??,b?=w1?,w2?,bargmin??(w1?,w2?,b)
(3) 優化算法
在優化算法中,小批量隨機梯度下降(mini-batch stochastic gradient descent)在深度學習中被廣泛使用。它的算法很簡單:先選取一組模型參數的初始值,如隨機選取;接下來對參數進行多次迭代,使每次迭代都可能降低損失函數的值。在每次迭代中,先隨機均勻采樣一個由固定數目訓練數據樣本所組成的小批量(mini-batch)B\mathcal{B}B,然后求小批量中數據樣本的平均損失有關模型參數的導數(梯度),最后用此結果與預先設定的一個正數的乘積作為模型參數在本次迭代的減小量。
在訓練本節討論的線性回歸模型的過程中,模型的每個參數將作如下迭代:
w1←w1?η∣B∣∑i∈B??(i)(w1,w2,b)?w1=w1?η∣B∣∑i∈Bx1(i)(x1(i)w1+x2(i)w2+b?y(i)),w2←w2?η∣B∣∑i∈B??(i)(w1,w2,b)?w2=w2?η∣B∣∑i∈Bx2(i)(x1(i)w1+x2(i)w2+b?y(i)),b←b?η∣B∣∑i∈B??(i)(w1,w2,b)?b=b?η∣B∣∑i∈B(x1(i)w1+x2(i)w2+b?y(i)).\begin{aligned} w_1 &\leftarrow w_1 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_1} = w_1 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_1^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right),\\ w_2 &\leftarrow w_2 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_2} = w_2 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_2^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial b} = b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}\left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right). \end{aligned} w1?w2?b?←w1??∣B∣η?i∈B∑??w1???(i)(w1?,w2?,b)?=w1??∣B∣η?i∈B∑?x1(i)?(x1(i)?w1?+x2(i)?w2?+b?y(i)),←w2??∣B∣η?i∈B∑??w2???(i)(w1?,w2?,b)?=w2??∣B∣η?i∈B∑?x2(i)?(x1(i)?w1?+x2(i)?w2?+b?y(i)),←b?∣B∣η?i∈B∑??b??(i)(w1?,w2?,b)?=b?∣B∣η?i∈B∑?(x1(i)?w1?+x2(i)?w2?+b?y(i)).?
在上式中,∣B∣|\mathcal{B}|∣B∣ 代表每個小批量中的樣本個數(批量大小,batch size),η\etaη 稱作學習率(learning rate)并取正數。需要強調的是,這里的批量大小和學習率的值是人為設定的,并不是通過模型訓練學出的,因此叫作超參數(hyperparameter)。我們通常所說的“調參”指的正是調節超參數,例如通過反復試錯來找到超參數合適的值。在少數情況下,超參數也可以通過模型訓練學出。本書對此類情況不做討論。
模型預測
模型訓練完成后,我們將模型參數 w1,w2,bw_1, w_2, bw1?,w2?,b 在優化算法停止時的值分別記作 w^1,w^2,b^\hat{w}_1, \hat{w}_2, \hatw^1?,w^2?,b^。注意,這里我們得到的并不一定是最小化損失函數的最優解 w1?,w2?,b?w_1^*, w_2^*, b^*w1??,w2??,b?,而是對最優解的一個近似。然后,我們就可以使用學出的線性回歸模型 x1w^1+x2w^2+b^x_1 \hat{w}_1 + x_2 \hat{w}_2 + \hatx1?w^1?+x2?w^2?+b^ 來估算訓練數據集以外任意一棟面積(平方米)為x1x_1x1?、房齡(年)為x2x_2x2?的房屋的價格了。這里的估算也叫作模型預測、模型推斷或模型測試。
線性回歸的表示方法
我們已經闡述了線性回歸的模型表達式、訓練和預測。下面我們解釋線性回歸與神經網絡的聯系,以及線性回歸的矢量計算表達式。
神經網絡圖
在深度學習中,我們可以使用神經網絡圖直觀地表現模型結構。為了更清晰地展示線性回歸作為神經網絡的結構,下圖使用神經網絡圖表示本節中介紹的線性回歸模型。神經網絡圖隱去了模型參數權重和偏差。
在上圖所示的神經網絡中,輸入分別為 x1x_1x1? 和 x2x_2x2?,因此輸入層的輸入個數為2。輸入個數也叫特征數或特征向量維度。圖中網絡的輸出為 ooo,輸出層的輸出個數為1。需要注意的是,我們直接將圖中神經網絡的輸出 ooo 作為線性回歸的輸出,即 y^=o\hat{y} = oy^?=o。由于輸入層并不涉及計算,按照慣例,上圖所示的神經網絡的層數為1。所以,線性回歸是一個單層神經網絡。輸出層中負責計算 ooo 的單元又叫神經元。在線性回歸中,ooo 的計算依賴于 x1x_1x1? 和 x2x_2x2?。也就是說,輸出層中的神經元和輸入層中各個輸入完全連接。因此,這里的輸出層又叫全連接層(fully-connected layer)或稠密層(dense layer)。
矢量計算
讓我們再次回到本節的房價預測問題。如果我們對訓練數據集里的3個房屋樣本(索引分別為1、2和3)逐一預測價格,將得到
y^(1)=x1(1)w1+x2(1)w2+b,y^(2)=x1(2)w1+x2(2)w2+b,y^(3)=x1(3)w1+x2(3)w2+b.\begin{aligned} \hat{y}^{(1)} &= x_1^{(1)} w_1 + x_2^{(1)} w_2 + b,\\ \hat{y}^{(2)} &= x_1^{(2)} w_1 + x_2^{(2)} w_2 + b,\\ \hat{y}^{(3)} &= x_1^{(3)} w_1 + x_2^{(3)} w_2 + b. \end{aligned} y^?(1)y^?(2)y^?(3)?=x1(1)?w1?+x2(1)?w2?+b,=x1(2)?w1?+x2(2)?w2?+b,=x1(3)?w1?+x2(3)?w2?+b.?
現在,我們將上面3個等式轉化成矢量計算。設
y^=[y^(1)y^(2)y^(3)],X=[x1(1)x2(1)x1(2)x2(2)x1(3)x2(3)],w=[w1w2]\boldsymbol{\hat{y}} = \begin{bmatrix} \hat{y}^{(1)} \\ \hat{y}^{(2)} \\ \hat{y}^{(3)} \end{bmatrix},\quad \boldsymbol{X} = \begin{bmatrix} x_1^{(1)} & x_2^{(1)} \\ x_1^{(2)} & x_2^{(2)} \\ x_1^{(3)} & x_2^{(3)} \end{bmatrix},\quad \boldsymbol{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} y^?=???y^?(1)y^?(2)y^?(3)????,X=????x1(1)?x1(2)?x1(3)??x2(1)?x2(2)?x2(3)??????,w=[w1?w2??]
對3個房屋樣本預測價格的矢量計算表達式為y^=Xw+b,\boldsymbol{\hat{y}} = \boldsymbol{X} \boldsymbol{w} + b,y^?=Xw+b, 其中的加法運算使用了廣播機制(參見2.2節)。例如:
a = torch.ones(3) b = 10 print(a + b)輸出:
tensor([11., 11., 11.])廣義上講,當數據樣本數為 nnn,特征數為 ddd 時,線性回歸的矢量計算表達式為
y^=Xw+b\boldsymbol{\hat{y}} = \boldsymbol{X} \boldsymbol{w} + b y^?=Xw+b
其中模型輸出 y^∈Rn×1\boldsymbol{\hat{y}} \in \mathbb{R}^{n \times 1}y^?∈Rn×1 批量數據樣本特征 X∈Rn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}X∈Rn×d,權重 w∈Rd×1\boldsymbol{w} \in \mathbb{R}^{d \times 1}w∈Rd×1, 偏差 b∈Rb \in \mathbb{R}b∈R。相應地,批量數據樣本標簽 y∈Rn×1\boldsymbol{y} \in \mathbb{R}^{n \times 1}y∈Rn×1。設模型參數 θ=[w1,w2,b]?\boldsymbol{\theta} = [w_1, w_2, b]^\topθ=[w1?,w2?,b]?,我們可以重寫損失函數為
?(θ)=12n(y^?y)?(y^?y)\ell(\boldsymbol{\theta})=\frac{1}{2n}(\boldsymbol{\hat{y}}-\boldsymbol{y})^\top(\boldsymbol{\hat{y}}-\boldsymbol{y}) ?(θ)=2n1?(y^??y)?(y^??y)
小批量隨機梯度下降的迭代步驟將相應地改寫為
θ←θ?η∣B∣∑i∈B?θ?(i)(θ),\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta}), θ←θ?∣B∣η?i∈B∑??θ??(i)(θ),
其中梯度是損失有關3個為標量的模型參數的偏導數組成的向量:
?θ?(i)(θ)=[??(i)(w1,w2,b)?w1??(i)(w1,w2,b)?w2??(i)(w1,w2,b)?b]=[x1(i)(x1(i)w1+x2(i)w2+b?y(i))x2(i)(x1(i)w1+x2(i)w2+b?y(i))x1(i)w1+x2(i)w2+b?y(i)]=[x1(i)x2(i)1](y^(i)?y(i))\nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta})= \begin{bmatrix} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_1} \\ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_2} \\ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial b} \end{bmatrix} = \begin{bmatrix} x_1^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \\ x_2^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \\ x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)} \end{bmatrix}= \begin{bmatrix} x_1^{(i)} \\ x_2^{(i)} \\ 1 \end{bmatrix} (\hat{y}^{(i)} - y^{(i)}) ?θ??(i)(θ)=??????w1???(i)(w1?,w2?,b)??w2???(i)(w1?,w2?,b)??b??(i)(w1?,w2?,b)???????=????x1(i)?(x1(i)?w1?+x2(i)?w2?+b?y(i))x2(i)?(x1(i)?w1?+x2(i)?w2?+b?y(i))x1(i)?w1?+x2(i)?w2?+b?y(i)?????=????x1(i)?x2(i)?1?????(y^?(i)?y(i))
小結
- 和大多數深度學習模型一樣,對于線性回歸這樣一種單層神經網絡,它的基本要素包括模型、訓練數據、損失函數和優化算法。
- 既可以用神經網絡圖表示線性回歸,又可以用矢量計算表示該模型。
- 應該盡可能采用矢量計算,以提升計算效率。
注:本節除了代碼之外與原書基本相同,原書傳送門
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的深度学习pytorch--线性回归(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑化网名80个
- 下一篇: Mac电脑如何添加打印机电脑如何添加扫描