0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PyTorch教程-3.1. 線性回歸

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:38 ? 次閱讀

每當(dāng)我們想要預(yù)測一個(gè)數(shù)值時(shí),就會(huì)出現(xiàn)回歸問題。常見的例子包括預(yù)測價(jià)格(房屋、股票等)、預(yù)測住院時(shí)間(對(duì)于住院患者)、預(yù)測需求(對(duì)于零售銷售)等等。并非每個(gè)預(yù)測問題都是經(jīng)典的回歸問題。稍后,我們將介紹分類問題,其目標(biāo)是預(yù)測一組類別中的成員資格。

作為一個(gè)運(yùn)行示例,假設(shè)我們希望根據(jù)房屋的面積(以平方英尺為單位)和年齡(以年為單位)來估算房屋的價(jià)格(以美元為單位)。要開發(fā)預(yù)測房價(jià)的模型,我們需要掌握由銷售額組成的數(shù)據(jù),包括每個(gè)房屋的銷售價(jià)格、面積和年齡。在機(jī)器學(xué)習(xí)的術(shù)語中,數(shù)據(jù)集稱為訓(xùn)練數(shù)據(jù)集或訓(xùn)練集,每一行(包含與一次銷售對(duì)應(yīng)的數(shù)據(jù))稱為示例( 或數(shù)據(jù)點(diǎn)、實(shí)例、樣本)。我們?cè)噲D預(yù)測的東西(價(jià)格)稱為標(biāo)簽(或目標(biāo)). 預(yù)測所依據(jù)的變量(年齡和面積)稱為特征(或 協(xié)變量)。

%matplotlib inline
import math
import time
import numpy as np
import torch
from d2l import torch as d2l

%matplotlib inline
import math
import time
from mxnet import np
from d2l import mxnet as d2l

%matplotlib inline
import math
import time
from jax import numpy as jnp
from d2l import jax as d2l

No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)

%matplotlib inline
import math
import time
import numpy as np
import tensorflow as tf
from d2l import tensorflow as d2l

3.1.1. 基本

線性回歸可能是解決回歸問題的標(biāo)準(zhǔn)工具中最簡單和最受歡迎的。追溯到 19 世紀(jì)初(高斯,1809 年,勒讓德,1805 年),線性回歸源于一些簡單的假設(shè)。首先,我們假設(shè)特征之間的關(guān)系x和目標(biāo) y近似線性,即條件均值 E[Y∣X=x]可以表示為特征的加權(quán)和x. 由于觀察噪聲,此設(shè)置允許目標(biāo)值仍可能偏離其預(yù)期值。接下來,我們可以假設(shè)任何此類噪聲都表現(xiàn)良好,服從高斯分布。通常,我們會(huì)使用n來表示我們數(shù)據(jù)集中的示例數(shù)量。我們使用上標(biāo)來枚舉樣本和目標(biāo),并使用下標(biāo)來索引坐標(biāo)。更具體地說,x(i)表示i-th 樣品和 xj(i)表示其j-th 坐標(biāo)。

3.1.1.1. 模型

每個(gè)解決方案的核心都是一個(gè)模型,該模型描述了如何將特征轉(zhuǎn)換為對(duì)目標(biāo)的估計(jì)。線性假設(shè)意味著目標(biāo)(價(jià)格)的期望值可以表示為特征(面積和年齡)的加權(quán)和:

(3.1.1)price=warea?area+wage?age+b.

這里warea和wage稱為 權(quán)重,并且b稱為偏差(或偏移量或 截距)。權(quán)重決定了每個(gè)特征對(duì)我們預(yù)測的影響。當(dāng)所有特征都為零時(shí),偏差決定了估計(jì)值。即使我們永遠(yuǎn)不會(huì)看到任何面積恰好為零的新建房屋,我們?nèi)匀恍枰睿驗(yàn)樗试S我們表達(dá)特征的所有線性函數(shù)(而不是將我們限制在通過原點(diǎn)的直線上)。嚴(yán)格來說, (3.1.1)是輸入特征的仿射變換,其特點(diǎn)是通過加權(quán)求和對(duì)特征進(jìn)行線性變換,結(jié)合平移通過增加偏差。給定一個(gè)數(shù)據(jù)集,我們的目標(biāo)是選擇權(quán)重 w和偏見b平均而言,使我們的模型預(yù)測盡可能接近數(shù)據(jù)中觀察到的真實(shí)價(jià)格。

在通常關(guān)注僅具有少量特征的數(shù)據(jù)集的學(xué)科中,明確表達(dá)模型的長格式,如 (3.1.1)中,是常見的。在機(jī)器學(xué)習(xí)中,我們通常使用高維數(shù)據(jù)集,在這種情況下使用緊湊的線性代數(shù)符號(hào)會(huì)更方便。當(dāng)我們的輸入包括 d特征,我們可以為每個(gè)特征分配一個(gè)索引(介于1和 d) 并表達(dá)我們的預(yù)測y^(通常,“帽子”符號(hào)表示估計(jì)值)作為

(3.1.2)y^=w1x1+...+wdxd+b.

將所有特征收集到一個(gè)向量中 x∈Rd并將所有權(quán)重放入向量中 w∈Rd,我們可以通過點(diǎn)積來簡潔地表達(dá)我們的模型w和x:

(3.1.3)y^=w?x+b.

在(3.1.3)中,向量x對(duì)應(yīng)于單個(gè)示例的特征。我們經(jīng)常會(huì)發(fā)現(xiàn)引用整個(gè)數(shù)據(jù)集的特征很方便n通過 設(shè)計(jì)矩陣的例子 X∈Rn×d. 這里, X每個(gè)示例包含一行,每個(gè)特征包含一列。對(duì)于功能集合X, 預(yù)測y^∈Rn可以通過矩陣向量積表示:

(3.1.4)y^=Xw+b,

在求和期間應(yīng)用廣播(第 2.1.4 節(jié))。給定訓(xùn)練數(shù)據(jù)集的特征X 和相應(yīng)的(已知)標(biāo)簽y,線性回歸的目標(biāo)是找到權(quán)重向量w和偏置項(xiàng)b給定從相同分布采樣的新數(shù)據(jù)示例的特征X,新示例的標(biāo)簽將(在預(yù)期中)以最低的錯(cuò)誤率進(jìn)行預(yù)測。

即使我們相信最好的預(yù)測模型y給予 x是線性的,我們不希望找到一個(gè)真實(shí)世界的數(shù)據(jù)集n例子在哪里y(i)正好等于 w?x(i)+b對(duì)全部 1≤i≤n. 例如,無論我們使用什么儀器來觀察特征X和標(biāo)簽y 可能會(huì)出現(xiàn)少量測量誤差。因此,即使我們確信潛在關(guān)系是線性的,我們也會(huì)加入噪聲項(xiàng)來解釋此類錯(cuò)誤。

在我們開始尋找最佳參數(shù)(或模型參數(shù))之前w和b,我們還需要兩件事:(i)一些給定模型的質(zhì)量度量;(ii) 更新模型以提高其質(zhì)量的程序。

3.1.1.2。損失函數(shù)

自然地,將我們的模型擬合到數(shù)據(jù)需要我們就某種適合度(或等價(jià)的不適合度)的度量達(dá)成一致。損失函數(shù)量化 目標(biāo)的真實(shí)值和預(yù)測值之間的距離。損失通常是一個(gè)非負(fù)數(shù),其中值越小越好,完美的預(yù)測會(huì)導(dǎo)致?lián)p失為 0。對(duì)于回歸問題,最常見的損失函數(shù)是平方誤差。當(dāng)我們預(yù)測一個(gè)例子i是 y^(i)對(duì)應(yīng)的真實(shí)標(biāo)簽是 y(i),平方誤差由下式給出:

(3.1.5)l(i)(w,b)=12(y^(i)?y(i))2.

常量12沒有真正的區(qū)別,但證明在符號(hào)上很方便,因?yàn)楫?dāng)我們對(duì)損失求導(dǎo)時(shí)它會(huì)抵消。因?yàn)橛?xùn)練數(shù)據(jù)集是給我們的,因此不受我們的控制,經(jīng)驗(yàn)誤差只是模型參數(shù)的函數(shù)。下面,我們可視化線性回歸模型在一維輸入問題中的擬合(圖 3.1.1)。

pYYBAGR5UJWAHLpPAAA_EXg_nVY834.svg

圖 3.1.1將線性回歸模型擬合到一維數(shù)據(jù)。

請(qǐng)注意,估計(jì)之間的巨大差異y^(i)和目標(biāo)y(i)由于損失的二次形式,導(dǎo)致對(duì)損失的貢獻(xiàn)更大(這可能是一把雙刃劍。雖然它鼓勵(lì)模型避免大的錯(cuò)誤,但它也可能導(dǎo)致對(duì)異常數(shù)據(jù)過度敏感)。衡量模型在整個(gè)數(shù)據(jù)集上的質(zhì)量n例如,我們簡單地平均(或等價(jià)地,求和)訓(xùn)練集上的損失:

(3.1.6)L(w,b)=1n∑i=1nl(i)(w,b)=1n∑i=1n12(w?x(i)+b?y(i))2.

在訓(xùn)練模型時(shí),我們想找到參數(shù)(w?,b?) 最小化所有訓(xùn)練示例的總損失:

(3.1.7)w?,b?=argminw,bL(w,b).

3.1.1.3. 解析解

與我們將介紹的大多數(shù)模型不同,線性回歸向我們展示了一個(gè)非常簡單的優(yōu)化問題。特別是,我們可以通過應(yīng)用如下簡單公式分析地找到最佳參數(shù)(根據(jù)訓(xùn)練數(shù)據(jù)評(píng)估)。首先,我們可以歸入偏差b進(jìn)入?yún)?shù)w通過將一列附加到由所有元素組成的設(shè)計(jì)矩陣。那么我們的預(yù)測問題就是最小化 ‖y?Xw‖2. 只要設(shè)計(jì)矩陣X具有滿秩(沒有特征與其他特征線性相關(guān)),那么損失面上將只有一個(gè)臨界點(diǎn),它對(duì)應(yīng)于整個(gè)域的損失的最小值。對(duì)損失求導(dǎo)數(shù) w并將其設(shè)置為零會(huì)產(chǎn)生:

(3.1.8)?w‖y?Xw‖2=2X?(Xw?y)=0and henceX?y=X?Xw.

求解w為我們提供了優(yōu)化問題的最優(yōu)解。請(qǐng)注意,此解決方案

(3.1.9)w?=(X?X)?1X?y

只有當(dāng)矩陣X?X是可逆的,即當(dāng)設(shè)計(jì)矩陣的列線性獨(dú)立時(shí)(Golub 和 Van Loan,1996 年)。

雖然像線性回歸這樣的簡單問題可能有解析解,但您不應(yīng)該習(xí)慣這樣的好運(yùn)。盡管解析解可以進(jìn)行很好的數(shù)學(xué)分析,但解析解的要求非常嚴(yán)格,以至于幾乎排除了深度學(xué)習(xí)的所有令人興奮的方面。

3.1.1.4。小批量隨機(jī)梯度下降

幸運(yùn)的是,即使在我們無法解析地解決模型的情況下,我們?nèi)匀豢梢栽趯?shí)踐中經(jīng)常有效地訓(xùn)練模型。此外,對(duì)于許多任務(wù),那些難以優(yōu)化的模型結(jié)果證明要好得多,以至于弄清楚如何訓(xùn)練它們最終是值得的。

優(yōu)化幾乎所有深度學(xué)習(xí)模型的關(guān)鍵技術(shù),以及我們將在整本書中提到的技術(shù),包括通過在逐漸降低損失函數(shù)的方向上更新參數(shù)來迭代減少誤差。該算法稱為 梯度下降。

梯度下降最簡單的應(yīng)用包括對(duì)損失函數(shù)求導(dǎo),它是對(duì)數(shù)據(jù)集中每個(gè)樣本計(jì)算的損失的平均值。實(shí)際上,這可能非常慢:我們必須在進(jìn)行單個(gè)更新之前傳遞整個(gè)數(shù)據(jù)集,即使更新步驟可能非常強(qiáng)大 (Liu 和 Nocedal,1989)。更糟糕的是,如果訓(xùn)練數(shù)據(jù)中存在大量冗余,則完全更新的好處會(huì)更低。

另一個(gè)極端是一次只考慮一個(gè)例子,并一次根據(jù)一個(gè)觀察采取更新步驟。由此產(chǎn)生的算法,隨機(jī)梯度下降(SGD) 可能是一種有效的策略(Bottou,2010 年),即使對(duì)于大型數(shù)據(jù)集。不幸的是,SGD 在計(jì)算和統(tǒng)計(jì)方面都有缺點(diǎn)。一個(gè)問題是處理器對(duì)數(shù)字進(jìn)行乘法和加法運(yùn)算的速度比將數(shù)據(jù)從主內(nèi)存移動(dòng)到處理器緩存的速度快得多。執(zhí)行矩陣-向量乘法的效率比相應(yīng)數(shù)量的向量-向量運(yùn)算高一個(gè)數(shù)量級(jí)。這意味著與整批樣品相比,一次處理一個(gè)樣品可能需要更長的時(shí)間。第二個(gè)問題是某些層,例如批量歸一化(將在第 8.5 節(jié)中描述),只有在我們一次訪問多個(gè)觀察值時(shí)才能正常工作。

這兩個(gè)問題的解決方案是選擇一個(gè)中間策略:我們不是一次獲取完整的批次或只獲取一個(gè)樣本,而是獲取一個(gè)小批量的觀察結(jié)果(Li等人,2014 年)。所述minibatch大小的具體選擇取決于許多因素,例如內(nèi)存量、加速器數(shù)量、層的選擇和總數(shù)據(jù)集大小。盡管如此,一個(gè)介于 32 和 256 之間的數(shù)字,最好是 2, 是一個(gè)好的開始。這將我們引向小批量隨機(jī)梯度下降。

在其最基本的形式中,在每次迭代中t,我們首先隨機(jī)抽取一個(gè)小批量Bt由固定數(shù)組成 |B|的訓(xùn)練例子。然后我們計(jì)算小批量平均損失相對(duì)于模型參數(shù)的導(dǎo)數(shù)(梯度)。最后,我們將梯度乘以一個(gè)預(yù)定的小正值η,稱為學(xué)習(xí)率,并從當(dāng)前參數(shù)值中減去結(jié)果項(xiàng)。我們可以這樣表達(dá)更新:

(3.1.10)(w,b)←(w,b)?η|B|∑i∈Bt?(w,b)l(i)(w,b).

總之,minibatch SGD 進(jìn)行如下:(i)初始化模型參數(shù)的值,通常是隨機(jī)的;(ii) 迭代地從數(shù)據(jù)中抽樣隨機(jī)小批量,在負(fù)梯度方向上更新參數(shù)。對(duì)于二次損失和仿射變換,這有一個(gè)封閉形式的展開:

(3.1.11)w←w?η|B|∑i∈Bt?wl(i)(w,b)=w?η|B|∑i∈Btx(i)(w?x(i)+b?y(i))b←b?η|B|∑i∈Bt?bl(i)(w,b)=b?η|B|∑i∈Bt(w?x(i)+b?y(i)).

因?yàn)槲覀冞x擇了一個(gè)小批量B我們需要按它的大小歸一化|B|. 小批量大小和學(xué)習(xí)率通常是用戶定義的。這種在訓(xùn)練循環(huán)中不更新的可調(diào)參數(shù)稱為超參數(shù)。它們可以通過多種技術(shù)自動(dòng)調(diào)整,例如貝葉斯優(yōu)化 ( Frazier, 2018 )。最后,解決方案的質(zhì)量通常在單獨(dú)的驗(yàn)證數(shù)據(jù)集(或驗(yàn)證集)上進(jìn)行評(píng)估。

在訓(xùn)練了一些預(yù)定的迭代次數(shù)后(或直到滿足其他一些停止標(biāo)準(zhǔn)),我們記錄估計(jì)的模型參數(shù),表示為w^,b^. 請(qǐng)注意,即使我們的函數(shù)是真正線性且無噪聲的,這些參數(shù)也不會(huì)是損失的精確最小值,甚至不是確定性的。盡管該算法向最小化器收斂的速度很慢,但它通常無法在有限的步數(shù)內(nèi)準(zhǔn)確地實(shí)現(xiàn)收斂。此外,小批量B用于更新的參數(shù)是隨機(jī)選擇的。這打破了決定論。

線性回歸恰好是一個(gè)具有全局最小值的學(xué)習(xí)問題(每當(dāng)X是滿秩的,或者等效地,每當(dāng) X?X是可逆的)。然而,深度網(wǎng)絡(luò)的損失面包含許多鞍點(diǎn)和最小值。幸運(yùn)的是,我們通常不關(guān)心找到一組精確的參數(shù),而只關(guān)心任何導(dǎo)致準(zhǔn)確預(yù)測(從而降低損失)的參數(shù)集。在實(shí)踐中,深度學(xué)習(xí)從業(yè)者很少努力尋找能夠最大限度地減少 訓(xùn)練集損失的參數(shù) (Frankle 和 Carbin,2018 年,Izmailov等人,2018 年)。更艱巨的任務(wù)是找到能夠?qū)σ郧翱床灰姷臄?shù)據(jù)進(jìn)行準(zhǔn)確預(yù)測的參數(shù),這一挑戰(zhàn)稱為 泛化。我們將在整本書中回到這些主題。

3.1.1.5。預(yù)測

給定模型w^?x+b^,我們現(xiàn)在可以對(duì)新示例進(jìn)行預(yù)測,例如,根據(jù)面積預(yù)測以前未見過的房屋的銷售價(jià)格x1和年齡 x2. 深度學(xué)習(xí)從業(yè)者已開始將預(yù)測階段稱為推理,但這有點(diǎn)用詞不當(dāng)——推理泛指根據(jù)證據(jù)得出的任何結(jié)論,包括參數(shù)值和未見實(shí)例的可能標(biāo)簽。如果有的話,在統(tǒng)計(jì)學(xué)文獻(xiàn)中,推斷更多地表示參數(shù)推斷,當(dāng)深度學(xué)習(xí)從業(yè)者與統(tǒng)計(jì)學(xué)家交談時(shí),這種術(shù)語的超載會(huì)造成不必要的混淆。在下文中,我們將盡可能堅(jiān)持預(yù)測。

3.1.2. 速度矢量化

在訓(xùn)練我們的模型時(shí),我們通常希望同時(shí)處理整個(gè)小批量示例。有效地做到這一點(diǎn)需要我們矢量化計(jì)算并利用快速線性代數(shù)庫,而不是在 Python 中編寫昂貴的 for 循環(huán)。

為了說明為什么這如此重要,我們可以考慮兩種添加向量的方法。首先,我們實(shí)例化兩個(gè)包含全 1 的 10,000 維向量。在一種方法中,我們使用 Python for 循環(huán)遍歷向量。在另一種方法中,我們依賴于對(duì)+.

n = 10000
a = torch.ones(n)
b = torch.ones(n)

n = 10000
a = np.ones(n)
b = np.ones(n)

n = 10000
a = jnp.ones(n)
b = jnp.ones(n)

n = 10000
a = tf.ones(n)
b = tf.ones(n)

現(xiàn)在我們可以對(duì)工作負(fù)載進(jìn)行基準(zhǔn)測試。首先,我們使用 for 循環(huán)添加它們,一次添加一個(gè)坐標(biāo)。

c = torch.zeros(n)
t = time.time()
for i in range(n):
  c[i] = a[i] + b[i]
f'{time.time() - t:.5f} sec'

'0.18086 sec'

c = np.zeros(n)
t = time.time()
for i in range(n):
  c[i] = a[i] + b[i]
f'{time.time() - t:.5f} sec'

'5.17106 sec'

# JAX arrays are immutable, meaning that once created their contents
# cannot be changed. For updating individual elements, JAX provides
# an indexed update syntax that returns an updated copy
c = jnp.zeros(n)
t = time.time()
for i in range(n):
  c = c.at[i].set(a[i] + b[i])
f'{time.time() - t:.5f} sec'

'19.67977 sec'

c = tf.Variable(tf.zeros(n))
t = time.time()
for i in range(n):
  c[i].assign(a[i] + b[i])
f'{time.time() - t:.5f} sec'

'12.77678 sec'

或者,我們依靠重新加載的+運(yùn)算符來計(jì)算元素總和。

t = time.time()
d = a + b
f'{time.time() - t:.5f} sec'

'0.00015 sec'

t = time.time()
d = a + b
f'{time.time() - t:.5f} sec'

'0.00053 sec'

t = time.time()
d = a + b
f'{time.time() - t:.5f} sec'

'0.02348 sec'

t = time.time()
d = a + b
f'{time.time() - t:.5f} sec'

'0.00055 sec'

第二種方法比第一種方法快得多。矢量化代碼通常會(huì)產(chǎn)生數(shù)量級(jí)的加速。此外,我們將更多的數(shù)學(xué)推向庫,而無需自己編寫那么多的計(jì)算,從而減少了出錯(cuò)的可能性并提高了代碼的可移植性。

3.1.3. 正態(tài)分布和平方損失

到目前為止,我們已經(jīng)給出了平方損失目標(biāo)的一個(gè)相當(dāng)實(shí)用的動(dòng)機(jī):最優(yōu)參數(shù)返回條件期望 E[Y∣X]只要基礎(chǔ)模式真正是線性的,損失就會(huì)對(duì)異常值分配過大的懲罰。我們還可以通過對(duì)噪聲分布進(jìn)行概率假設(shè),為平方損失目標(biāo)提供更正式的動(dòng)機(jī)。

線性回歸是在 19 世紀(jì)初發(fā)明的。雖然長期以來一直爭論高斯或勒讓德首先想到這個(gè)想法,但高斯也發(fā)現(xiàn)了正態(tài)分布(也稱為高斯分布)。事實(shí)證明,正態(tài)分布和具有平方損失的線性回歸比共同的親子關(guān)系更深。

首先,回想一下具有均值的正態(tài)分布μ和方差σ2(標(biāo)準(zhǔn)偏差σ) 給出為

(3.1.12)p(x)=12πσ2exp?(?12σ2(x?μ)2).

下面我們定義一個(gè)函數(shù)來計(jì)算正態(tài)分布。

def normal(x, mu, sigma):
  p = 1 / math.sqrt(2 * math.pi * sigma**2)
  return p * np.exp(-0.5 * (x - mu)**2 / sigma**2)

def normal(x, mu, sigma):
  p = 1 / math.sqrt(2 * math.pi * sigma**2)
  return p * np.exp(-0.5 * (x - mu)**2 / sigma**2)

def normal(x, mu, sigma):
  p = 1 / math.sqrt(2 * math.pi * sigma**2)
  return p * jnp.exp(-0.5 * (x - mu)**2 / sigma**2)

def normal(x, mu, sigma):
  p = 1 / math.sqrt(2 * math.pi * sigma**2)
  return p * np.exp(-0.5 * (x - mu)**2 / sigma**2)

我們現(xiàn)在可以可視化正態(tài)分布。

# Use NumPy again for visualization
x = np.arange(-7, 7, 0.01)

# Mean and standard deviation pairs
params = [(0, 1), (0, 2), (3, 1)]
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
     ylabel='p(x)', figsize=(4.5, 2.5),
     legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])

pYYBAGR5UJeAVWdWAAEbITY7nyI179.svg

# Use NumPy again for visualization
x = np.arange(-7, 7, 0.01)

# Mean and standard deviation pairs
params = [(0, 1), (0, 2), (3, 1)]
d2l.plot(x.asnumpy(), [normal(x, mu, sigma).asnumpy() for mu, sigma in params], xlabel='x',
     ylabel='p(x)', figsize=(4.5, 2.5),
     legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])

poYBAGR5UJmAErVRAAEbKDZv5lI106.svg

# Use JAX NumPy for visualization
x = jnp.arange(-7, 7, 0.01)
# Mean and standard deviation pairs
params = [(0, 1), (0, 2), (3, 1)]
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
     ylabel='p(x)', figsize=(4.5, 2.5),
     legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])

pYYBAGR5UJyAccFUAAEbBgZ7q1M435.svg

# Use NumPy again for visualization
x = np.arange(-7, 7, 0.01)

# Mean and standard deviation pairs
params = [(0, 1), (0, 2), (3, 1)]
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
     ylabel='p(x)', figsize=(4.5, 2.5),
     legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])

pYYBAGR5UJeAVWdWAAEbITY7nyI179.svg

請(qǐng)注意,改變均值對(duì)應(yīng)于沿 x-軸,增加方差會(huì)分散分布,降低其峰值。

使用平方損失激勵(lì)線性回歸的一種方法是假設(shè)觀測值來自噪聲測量,其中噪聲正態(tài)分布如下:

(3.1.13)y=w?x+b+?where?~N(0,σ2).

因此,我們現(xiàn)在可以寫出看到特定的 可能性y對(duì)于給定的x通過

(3.1.14)P(y∣x)=12πσ2exp?(?12σ2(y?w?x?b)2).

因此,可能性因式分解。根據(jù)最大似然原理,參數(shù)的最佳取值w 和b是那些最大化整個(gè)數(shù)據(jù)集的可能性的那些:

(3.1.15)P(y∣X)=∏i=1np(y(i)∣x(i)).

等式如下,因?yàn)樗袑?duì)(x(i),y(i)) 彼此獨(dú)立繪制。根據(jù)最大似然原理選擇的估計(jì)量稱為最大似然估計(jì)量。雖然最大化許多指數(shù)函數(shù)的乘積可能看起來很困難,但我們可以在不改變目標(biāo)的情況下通過最大化似然的對(duì)數(shù)來顯著簡化事情。由于歷史原因,優(yōu)化通常表示為最小化而不是最大化。所以,在不改變?nèi)魏螙|西的情況下,我們可以最小化負(fù)對(duì)數(shù)似然,我們可以表示如下:

(3.1.16)?log?P(y∣X)=∑i=1n12log?(2πσ2)+12σ2(y(i)?w?x(i)?b)2.

如果我們假設(shè)σ是固定的,我們可以忽略第一項(xiàng),因?yàn)樗灰蕾囉趙或者b. 第二項(xiàng)與前面介紹的平方誤差損失相同,除了乘法常數(shù)1σ2. 幸運(yùn)的是,該解決方案不依賴于σ任何一個(gè)。由此可見,最小化均方誤差等同于在加性高斯噪聲假設(shè)下線性模型的最大似然估計(jì)。

3.1.4. 作為神經(jīng)網(wǎng)絡(luò)的線性回歸

雖然線性模型不足以表達(dá)我們將在本書中介紹的許多復(fù)雜的神經(jīng)網(wǎng)絡(luò),但神經(jīng)網(wǎng)絡(luò)足夠豐富,可以將線性模型包含為神經(jīng)網(wǎng)絡(luò),其中每個(gè)特征都由一個(gè)輸入神經(jīng)元表示,所有這些神經(jīng)元都連接在一起直接輸出。

圖 3.1.2將線性回歸描述為神經(jīng)網(wǎng)絡(luò)。該圖突出顯示了連接模式,例如每個(gè)輸入如何連接到輸出,但沒有突出顯示權(quán)重或偏差所采用的特定值。

poYBAGR5UKGAZ11oAACJOz7BEpY192.svg

圖 3.1.2線性回歸是單層神經(jīng)網(wǎng)絡(luò)。

輸入是x1,…,xd. 我們指的是d作為 輸入層中輸入的數(shù)量或特征維度。網(wǎng)絡(luò)的輸出是o1. 因?yàn)槲覀冎皇窃噲D預(yù)測單個(gè)數(shù)值,所以我們只有一個(gè)輸出神經(jīng)元。請(qǐng)注意,輸入值都是給定的。只有一個(gè)計(jì)算 神經(jīng)元。綜上所述,我們可以將線性回歸視為單層全連接神經(jīng)網(wǎng)絡(luò)。在以后的章節(jié)中,我們將遇到層數(shù)更多的網(wǎng)絡(luò)。

3.1.4.1. 生物學(xué)

因?yàn)榫€性回歸早于計(jì)算神經(jīng)科學(xué),所以用神經(jīng)網(wǎng)絡(luò)來描述線性回歸似乎不合時(shí)宜。盡管如此,當(dāng)控制論學(xué)家和神經(jīng)生理學(xué)家 Warren McCulloch 和 Walter Pitts 開始開發(fā)人工神經(jīng)元模型時(shí),它們自然而然地成為了起點(diǎn)??紤]圖 3.1.3中生物神經(jīng)元的卡通圖片,它由 樹突(輸入終端)、細(xì)胞核(CPU)、軸突(輸出線)和軸突終端(輸出終端)組成,能夠連接到其他神經(jīng)元通過突觸。

pYYBAGR5UKOAYjKiAAC9NytI9K4707.svg

圖 3.1.3真實(shí)的神經(jīng)元。

信息xi來自其他神經(jīng)元(或環(huán)境傳感器)的信號(hào)被樹突接收。特別是,該信息由突觸權(quán)重加權(quán) wi,確定輸入的影響,例如,通過產(chǎn)品激活或抑制 xiwi. 來自多個(gè)來源的加權(quán)輸入在核中聚合為加權(quán)和 y=∑ixiwi+b,可能通過一些非線性后處理σ(y). 然后該信息通過軸突發(fā)送到軸突末端,在那里它到達(dá)目的地(例如,諸如肌肉的致動(dòng)器)或通過其樹突被饋送到另一個(gè)神經(jīng)元。

當(dāng)然,許多這樣的單元可以與正確的連接和正確的學(xué)習(xí)算法相結(jié)合,產(chǎn)生比任何一個(gè)神經(jīng)元單獨(dú)表達(dá)的更有趣和復(fù)雜的行為的高級(jí)想法歸功于我們對(duì)真實(shí)生物神經(jīng)系統(tǒng)的研究。與此同時(shí),當(dāng)今深度學(xué)習(xí)的大多數(shù)研究都從更廣泛的來源中汲取靈感。我們?cè)齊ussell 和 Norvig ( 2016 )的觀點(diǎn),他們指出雖然飛機(jī)可能受到鳥類的啟發(fā),但幾個(gè)世紀(jì)以來鳥類學(xué)并不是航空創(chuàng)新的主要驅(qū)動(dòng)力。同樣,如今深度學(xué)習(xí)的靈感同樣或更多地來自數(shù)學(xué)、語言學(xué)、心理學(xué)、統(tǒng)計(jì)學(xué)、計(jì)算機(jī)科學(xué)和許多其他領(lǐng)域。

3.1.5. 概括

在本節(jié)中,我們介紹了傳統(tǒng)的線性回歸,其中選擇線性函數(shù)的參數(shù)以最小化訓(xùn)練集上的平方損失。我們還通過一些實(shí)際考慮以及通過將線??性回歸解釋為線性和高斯噪聲假設(shè)下的最大似然估計(jì)來激發(fā)這種目標(biāo)選擇。在討論了計(jì)算注意事項(xiàng)和與統(tǒng)計(jì)的聯(lián)系之后,我們展示了如何將此類線性模型表示為簡單的神經(jīng)網(wǎng)絡(luò),其中輸入直接連接到輸出。雖然我們很快將完全超越線性模型,但它們足以介紹我們所有模型所需的大部分組件:參數(shù)形式、可微分目標(biāo)、通過小批量隨機(jī)梯度下降進(jìn)行優(yōu)化,以及最終,

3.1.6. 練習(xí)

假設(shè)我們有一些數(shù)據(jù) x1,…,xn∈R. 我們的目標(biāo)是找到一個(gè)常數(shù)b這樣∑i(xi?b)2被最小化。

找到最優(yōu)值的解析解b.

這個(gè)問題及其解決方案與正態(tài)分布有何關(guān)系?

如果我們將損失從∑i(xi?b)2到 ∑i|xi?b|?你能找到最優(yōu)解嗎 b?

證明仿射函數(shù)可以表示為 x?w+b相當(dāng)于線性函數(shù)(x,1).

假設(shè)你想找到的二次函數(shù) x, IE, f(x)=b+∑iwixi+∑j≤iwijxixj. 你會(huì)如何在一個(gè)深度網(wǎng)絡(luò)中表達(dá)這個(gè)?

回想一下,線性回歸問題可解的條件之一是設(shè)計(jì)矩陣 X?X有滿級(jí)。

如果不是這種情況會(huì)怎樣?

你怎么能修好它?如果向所有條目添加少量坐標(biāo)獨(dú)立的高斯噪聲會(huì)發(fā)生什么 X?

設(shè)計(jì)矩陣的期望值是多少 X?X在這種情況下?

當(dāng)隨機(jī)梯度下降時(shí)會(huì)發(fā)生什么 X?X沒有滿級(jí)?

假設(shè)控制加性噪聲的噪聲模型 ?是指數(shù)分布。那是, p(?)=12exp?(?|?|).

寫出模型下數(shù)據(jù)的負(fù)對(duì)數(shù)似然 ?log?P(y∣X).

你能找到一個(gè)封閉形式的解決方案嗎?

建議一個(gè)小批量隨機(jī)梯度下降算法來解決這個(gè)問題。可能會(huì)出現(xiàn)什么問題(提示:當(dāng)我們不斷更新參數(shù)時(shí),駐點(diǎn)附近會(huì)發(fā)生什么)?你能修這個(gè)嗎?

假設(shè)我們要通過組合兩個(gè)線性層來設(shè)計(jì)一個(gè)具有兩層的神經(jīng)網(wǎng)絡(luò)。也就是說,第一層的輸出成為第二層的輸入。為什么這樣天真的構(gòu)圖不起作用?

如果您想使用回歸來估算房屋或股票價(jià)格的實(shí)際價(jià)格會(huì)怎樣?

表明加性高斯噪聲假設(shè)是不合適的。提示:我們可以有負(fù)價(jià)格嗎?波動(dòng)呢?

為什么回歸到價(jià)格的對(duì)數(shù)會(huì)好得多,即y=log?price?

在處理 pennystock(即價(jià)格非常低的股票)時(shí),您需要擔(dān)心什么?提示:你能以所有可能的價(jià)格進(jìn)行交易嗎?為什么這對(duì)廉價(jià)股票來說是一個(gè)更大的問題?

有關(guān)更多信息,請(qǐng)查看著名的期權(quán)定價(jià) Black-Scholes 模型(Black 和 Scholes,1973 年)。

假設(shè)我們想使用回歸來估計(jì)雜貨店出售的蘋果數(shù)量。

高斯加性噪聲模型有什么問題?提示:你賣的是蘋果,不是油。

泊松分布 捕獲計(jì)數(shù)分布。它由 p(k∣λ)=λke?λ/k!. 這里 λ是率函數(shù)和k是您看到的事件數(shù)。證明λ是計(jì)數(shù)的期望值k.

設(shè)計(jì)與泊松分布相關(guān)的損失函數(shù)。

設(shè)計(jì)用于估計(jì)的損失函數(shù)log?λ 反而。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 線性回歸
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    4277
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    794

    瀏覽量

    13010
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    線性回歸的標(biāo)準(zhǔn)方程法使用

    線性回歸-標(biāo)準(zhǔn)方程法示例(python原生實(shí)現(xiàn))
    發(fā)表于 05-07 16:44

    線性回歸定義

    線性回歸與評(píng)價(jià)指標(biāo)-2
    發(fā)表于 09-03 14:24

    生產(chǎn)應(yīng)用中使用線性回歸進(jìn)行實(shí)際操練

    線性回歸】生產(chǎn)應(yīng)用中使用線性回歸進(jìn)行實(shí)際操練
    發(fā)表于 05-08 07:45

    Tensorflow的非線性回歸

    Tensorflow 非線性回歸
    發(fā)表于 05-12 10:19

    TensorFlow實(shí)現(xiàn)簡單線性回歸

    本小節(jié)直接從 TensorFlow contrib 數(shù)據(jù)集加載數(shù)據(jù)。使用隨機(jī)梯度下降優(yōu)化器優(yōu)化單個(gè)訓(xùn)練樣本的系數(shù)。實(shí)現(xiàn)簡單線性回歸的具體做法導(dǎo)入需要的所有軟件包: 在神經(jīng)網(wǎng)絡(luò)中,所有的輸入都線性增加
    發(fā)表于 08-11 19:34

    TensorFlow實(shí)現(xiàn)多元線性回歸(超詳細(xì))

    在 TensorFlow 實(shí)現(xiàn)簡單線性回歸的基礎(chǔ)上,可通過在權(quán)重和占位符的聲明中稍作修改來對(duì)相同的數(shù)據(jù)進(jìn)行多元線性回歸。在多元線性
    發(fā)表于 08-11 19:35

    PyTorch教程2.3之線性代數(shù)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程2.3之線性代數(shù).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 11:32 ?1次下載
    <b class='flag-5'>PyTorch</b>教程2.3之<b class='flag-5'>線性</b>代數(shù)

    PyTorch教程3.1線性回歸

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程3.1線性回歸.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 11:30 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>3.1</b>之<b class='flag-5'>線性</b><b class='flag-5'>回歸</b>

    PyTorch教程3.3之綜合回歸數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程3.3之綜合回歸數(shù)據(jù).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 15:48 ?0次下載
    <b class='flag-5'>PyTorch</b>教程3.3之綜合<b class='flag-5'>回歸</b>數(shù)據(jù)

    PyTorch教程3.4之從頭開始執(zhí)行線性回歸

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程3.4之從頭開始執(zhí)行線性回歸.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 11:25 ?0次下載
    <b class='flag-5'>PyTorch</b>教程3.4之從頭開始執(zhí)行<b class='flag-5'>線性</b><b class='flag-5'>回歸</b>

    PyTorch教程3.5之線性回歸的簡潔實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程3.5之線性回歸的簡潔實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 11:28 ?0次下載
    <b class='flag-5'>PyTorch</b>教程3.5之<b class='flag-5'>線性</b><b class='flag-5'>回歸</b>的簡潔實(shí)現(xiàn)

    PyTorch教程4.1之Softmax回歸

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程4.1之Softmax回歸.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 15:46 ?0次下載
    <b class='flag-5'>PyTorch</b>教程4.1之Softmax<b class='flag-5'>回歸</b>

    PyTorch教程4.4之從頭開始實(shí)現(xiàn)Softmax回歸

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程4.4之從頭開始實(shí)現(xiàn)Softmax回歸.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 15:37 ?0次下載
    <b class='flag-5'>PyTorch</b>教程4.4之從頭開始實(shí)現(xiàn)Softmax<b class='flag-5'>回歸</b>

    PyTorch教程-4.1. Softmax 回歸

    在 SageMaker Studio Lab 中打開筆記本 在3.1 節(jié)中,我們介紹了線性回歸,在3.4 節(jié)中從頭開始實(shí)現(xiàn) ,并在3.5 節(jié)中再次使用深度學(xué)習(xí)框架的高級(jí) API來完成繁重的工作
    的頭像 發(fā)表于 06-05 15:38 ?533次閱讀
    <b class='flag-5'>PyTorch</b>教程-4.1. Softmax <b class='flag-5'>回歸</b>

    多元線性回歸的特點(diǎn)是什么

    何為多元線性回歸?對(duì)比于前一天學(xué)習(xí)的線性回歸,多元線性回歸的特點(diǎn)是什么? 多元
    的頭像 發(fā)表于 10-31 10:34 ?1156次閱讀
    多元<b class='flag-5'>線性</b><b class='flag-5'>回歸</b>的特點(diǎn)是什么