線性回歸
主要內(nèi)容包括:
線性回歸的基本要素
線性回歸模型從零開始的實現(xiàn)
線性回歸模型使用pytorch的簡潔實現(xiàn)
線性回歸的基本要素
模型
為了簡單起見衅码,這里我們假設(shè)價格只取決于房屋狀況的兩個因素,即面積(平方米)和房齡(年)。接下來我們希望探索價格與這兩個因素的具體關(guān)系。線性回歸假設(shè)輸出與各個輸入之間是線性關(guān)系:
price=warea?area+wage?age+b
數(shù)據(jù)集
我們通常收集一系列的真實數(shù)據(jù),例如多棟房屋的真實售出價格和它們對應(yīng)的面積和房齡。我們希望在這個數(shù)據(jù)上面尋找模型參數(shù)來使模型的預(yù)測價格與真實價格的誤差最小。在機(jī)器學(xué)習(xí)術(shù)語里有巧,該數(shù)據(jù)集被稱為訓(xùn)練數(shù)據(jù)集(training data set)或訓(xùn)練集(training set),一棟房屋被稱為一個樣本(sample)悲没,其真實售出價格叫作標(biāo)簽(label)篮迎,用來預(yù)測標(biāo)簽的兩個因素叫作特征(feature)。特征用來表征樣本的特點(diǎn)示姿。
損失函數(shù)
在模型訓(xùn)練中甜橱,我們需要衡量價格預(yù)測值與真實值之間的誤差。通常我們會選取一個非負(fù)數(shù)作為誤差栈戳,且數(shù)值越小表示誤差越小岂傲。一個常用的選擇是平方函數(shù)。 它在評估索引為 i 的樣本誤差的表達(dá)式為
l(i)(w,b)=
1
2
(
?
y
(i)?y(i))2,
L(w,b)=
1
n
n
∑
i=1 l(i)(w,b)=
1
n
n
∑
i=1
1
2
(w?x(i)+b?y(i))2.
優(yōu)化函數(shù) - 隨機(jī)梯度下降
當(dāng)模型和損失函數(shù)形式較為簡單時子檀,上面的誤差最小化問題的解可以直接用公式表達(dá)出來譬胎。這類解叫作解析解(analytical solution)。本節(jié)使用的線性回歸和平方誤差剛好屬于這個范疇命锄。然而,大多數(shù)深度學(xué)習(xí)模型并沒有解析解偏化,只能通過優(yōu)化算法有限次迭代模型參數(shù)來盡可能降低損失函數(shù)的值脐恩。這類解叫作數(shù)值解(numerical solution)。
在求數(shù)值解的優(yōu)化算法中侦讨,小批量隨機(jī)梯度下降(mini-batch stochastic gradient descent)在深度學(xué)習(xí)中被廣泛使用驶冒。它的算法很簡單:先選取一組模型參數(shù)的初始值,如隨機(jī)選仍下薄骗污;接下來對參數(shù)進(jìn)行多次迭代,使每次迭代都可能降低損失函數(shù)的值沈条。在每次迭代中需忿,先隨機(jī)均勻采樣一個由固定數(shù)目訓(xùn)練數(shù)據(jù)樣本所組成的小批量(mini-batch)B,然后求小批量中數(shù)據(jù)樣本的平均損失有關(guān)模型參數(shù)的導(dǎo)數(shù)(梯度),最后用此結(jié)果與預(yù)先設(shè)定的一個正數(shù)的乘積作為模型參數(shù)在本次迭代的減小量屋厘。
(w,b)←(w,b)?
η
|B|
∑i∈B ?(w,b)l(i)(w,b)
學(xué)習(xí)率: η代表在每次優(yōu)化中涕烧,能夠?qū)W習(xí)的步長的大小
批量大小: B是小批量計算中的批量大小batch size
總結(jié)一下,優(yōu)化函數(shù)的有以下兩個步驟:
(i)初始化模型參數(shù)汗洒,一般來說使用隨機(jī)初始化议纯;
(ii)我們在數(shù)據(jù)上迭代多次,通過在負(fù)梯度方向移動參數(shù)來更新每個參數(shù)溢谤。
softmax和分類模型
內(nèi)容包含:
softmax回歸的基本概念
如何獲取Fashion-MNIST數(shù)據(jù)集和讀取數(shù)據(jù)
softmax回歸模型的從零開始實現(xiàn)瞻凤,實現(xiàn)一個對Fashion-MNIST訓(xùn)練集中的圖像數(shù)據(jù)進(jìn)行分類的模型
使用pytorch重新實現(xiàn)softmax回歸模型
softmax的基本概念
分類問題
一個簡單的圖像分類問題,輸入圖像的高和寬均為2像素世杀,色彩為灰度阀参。
圖像中的4像素分別記為x1,x2,x3,x4。
假設(shè)真實標(biāo)簽為狗玫坛、貓或者雞结笨,這些標(biāo)簽對應(yīng)的離散值為y1,y2,y3。
我們通常使用離散的數(shù)值來表示類別湿镀,例如y1=1,y2=2,y3=3炕吸。
權(quán)重矢量
o1 =x1w11+x2w21+x3w31+x4w41+b1
o2 =x1w12+x2w22+x3w32+x4w42+b2
o3 =x1w13+x2w23+x3w33+x4w43+b3
神經(jīng)網(wǎng)絡(luò)圖
下圖用神經(jīng)網(wǎng)絡(luò)圖描繪了上面的計算。softmax回歸同線性回歸一樣勉痴,也是一個單層神經(jīng)網(wǎng)絡(luò)赫模。由于每個輸出o1,o2,o3的計算都要依賴于所有的輸入x1,x2,x3,x4,softmax回歸的輸出層也是一個全連接層蒸矛。
Image Name
softmax回歸是一個單層神經(jīng)網(wǎng)絡(luò)
既然分類問題需要得到離散的預(yù)測輸出瀑罗,一個簡單的辦法是將輸出值oi當(dāng)作預(yù)測類別是i的置信度,并將值最大的輸出所對應(yīng)的類作為預(yù)測輸出雏掠,即輸出 argmaxi oi斩祭。例如,如果o1,o2,o3分別為0.1,10,0.1乡话,由于o2最大摧玫,那么預(yù)測類別為2,其代表貓绑青。
輸出問題
直接使用輸出層的輸出有兩個問題:
一方面诬像,由于輸出層的輸出值的范圍不確定,我們難以直觀上判斷這些值的意義闸婴。例如坏挠,剛才舉的例子中的輸出值10表示“很置信”圖像類別為貓,因為該輸出值是其他兩類的輸出值的100倍邪乍。但如果o1=o3=103降狠,那么輸出值10卻又表示圖像類別為貓的概率很低对竣。
另一方面,由于真實標(biāo)簽是離散值喊熟,這些離散值與不確定范圍的輸出值之間的誤差難以衡量柏肪。
softmax運(yùn)算符(softmax operator)解決了以上兩個問題。它通過下式將輸出值變換成值為正且和為1的概率分布:
?
y
1,
?
y
2,
?
y
3=softmax(o1,o2,o3)
其中
?
y
1=
exp(o1)
∑
3
i=1
exp(oi)
,
?
y
2=
exp(o2)
∑
3
i=1
exp(oi)
,
?
y
3=
exp(o3)
∑
3
i=1
exp(oi)
.
容易看出
?
y
1+
?
y
2+
?
y
3=1且0≤
?
y
1,
?
y
2,
?
y
3≤1芥牌,因此
?
y
1,
?
y
2,
?
y
3是一個合法的概率分布烦味。這時候,如果
?
y
2=0.8壁拉,不管
?
y
1和
?
y
3的值是多少谬俄,我們都知道圖像類別為貓的概率是80%。此外弃理,我們注意到
argmaxi oi= argmaxi
?
y
i
因此softmax運(yùn)算不改變預(yù)測類別輸出溃论。
計算效率
單樣本矢量計算表達(dá)式
為了提高計算效率,我們可以將單樣本分類通過矢量計算來表達(dá)痘昌。在上面的圖像分類問題中钥勋,假設(shè)softmax回歸的權(quán)重和偏差參數(shù)分別為
W=[ w11 w12 w13 w21 w22 w23 w31 w32 w33 w41 w42 w43 ],b=[ b1 b2 b3 ],
設(shè)高和寬分別為2個像素的圖像樣本i的特征為
x(i)=[ x
(i)
1
x
(i)
2
x
(i)
3
x
(i)
4
],
輸出層的輸出為
o(i)=[ o
(i)
1
o
(i)
2
o
(i)
3
],
預(yù)測為狗、貓或雞的概率分布為
?
y
(i)=[
?
y
(i)
1
?
y
(i)
2
?
y
(i)
3
].
softmax回歸對樣本i分類的矢量計算表達(dá)式為
o(i) =x(i)W+b,
?
y
(i) =softmax(o(i)).
小批量矢量計算表達(dá)式
為了進(jìn)一步提升計算效率辆苔,我們通常對小批量數(shù)據(jù)做矢量計算算灸。廣義上講,給定一個小批量樣本驻啤,其批量大小為n菲驴,輸入個數(shù)(特征數(shù))為d,輸出個數(shù)(類別數(shù))為q骑冗。設(shè)批量特征為X∈Rn×d赊瞬。假設(shè)softmax回歸的權(quán)重和偏差參數(shù)分別為W∈Rd×q和b∈R1×q。softmax回歸的矢量計算表達(dá)式為
O =XW+b,
?
Y
=softmax(O),
其中的加法運(yùn)算使用了廣播機(jī)制贼涩,O,
?
Y
∈Rn×q且這兩個矩陣的第i行分別為樣本i的輸出o(i)和概率分布
?
y
(i)巧涧。
交叉熵?fù)p失函數(shù)
對于樣本i,我們構(gòu)造向量y(i)∈Rq 遥倦,使其第y(i)(樣本i類別的離散數(shù)值)個元素為1褒侧,其余為0。這樣我們的訓(xùn)練目標(biāo)可以設(shè)為使預(yù)測概率分布
?
y
(i)盡可能接近真實的標(biāo)簽概率分布y(i)谊迄。
平方損失估計
Loss=|
?
y
(i)?y(i)|2/2
然而,想要預(yù)測分類結(jié)果正確烟央,我們其實并不需要預(yù)測概率完全等于標(biāo)簽概率统诺。例如,在圖像分類的例子里疑俭,如果y(i)=3粮呢,那么我們只需要
?
y
(i)
3
比其他兩個預(yù)測值
?
y
(i)
1
和
?
y
(i)
2
大就行了。即使
?
y
(i)
3
值為0.6,不管其他兩個預(yù)測值為多少啄寡,類別預(yù)測均正確豪硅。而平方損失則過于嚴(yán)格,例如
?
y
(i)
1
=
?
y
(i)
2
=0.2比
?
y
(i)
1
=0,
?
y
(i)
2
=0.4的損失要小很多挺物,雖然兩者都有同樣正確的分類預(yù)測結(jié)果懒浮。
改善上述問題的一個方法是使用更適合衡量兩個概率分布差異的測量函數(shù)。其中识藤,交叉熵(cross entropy)是一個常用的衡量方法:
H(y(i),
?
y
(i))=?
q
∑
j=1 y
(i)
j
log
?
y
(i)
j
,
其中帶下標(biāo)的y
(i)
j
是向量y(i)中非0即1的元素砚著,需要注意將它與樣本i類別的離散數(shù)值,即不帶下標(biāo)的y(i)區(qū)分痴昧。在上式中稽穆,我們知道向量y(i)中只有第y(i)個元素y(i)y(i)為1,其余全為0赶撰,于是H(y(i),
?
y
(i))=?log
?
y
y(i)(i)舌镶。也就是說,交叉熵只關(guān)心對正確類別的預(yù)測概率豪娜,因為只要其值足夠大餐胀,就可以確保分類結(jié)果正確。當(dāng)然侵歇,遇到一個樣本有多個標(biāo)簽時骂澄,例如圖像里含有不止一個物體時,我們并不能做這一步簡化惕虑。但即便對于這種情況坟冲,交叉熵同樣只關(guān)心對圖像中出現(xiàn)的物體類別的預(yù)測概率。
假設(shè)訓(xùn)練數(shù)據(jù)集的樣本數(shù)為n溃蔫,交叉熵?fù)p失函數(shù)定義為
?(Θ)=
1
n
n
∑
i=1 H(y(i),
?
y
(i)),
其中Θ代表模型參數(shù)健提。同樣地,如果每個樣本只有一個標(biāo)簽伟叛,那么交叉熵?fù)p失可以簡寫成?(Θ)=?(1/n)∑
n
i=1
log
?
y
(i)
y(i)
私痹。從另一個角度來看,我們知道最小化?(Θ)等價于最大化exp(?n?(Θ))=∏
n
i=1
?
y
(i)
y(i)
统刮,即最小化交叉熵?fù)p失函數(shù)等價于最大化訓(xùn)練數(shù)據(jù)集所有標(biāo)簽類別的聯(lián)合預(yù)測概率紊遵。
模型訓(xùn)練和預(yù)測
在訓(xùn)練好softmax回歸模型后,給定任一樣本特征侥蒙,就可以預(yù)測每個輸出類別的概率暗膜。通常,我們把預(yù)測概率最大的類別作為輸出類別鞭衩。如果它與真實類別(標(biāo)簽)一致学搜,說明這次預(yù)測是正確的娃善。在3.6節(jié)的實驗中,我們將使用準(zhǔn)確率(accuracy)來評價模型的表現(xiàn)瑞佩。它等于正確預(yù)測數(shù)量與總預(yù)測數(shù)量之比聚磺。
獲取Fashion-MNIST訓(xùn)練集和讀取數(shù)據(jù)
在介紹softmax回歸的實現(xiàn)前我們先引入一個多類圖像分類數(shù)據(jù)集。它將在后面的章節(jié)中被多次使用炬丸,以方便我們觀察比較算法之間在模型精度和計算效率上的區(qū)別瘫寝。圖像分類數(shù)據(jù)集中最常用的是手寫數(shù)字識別數(shù)據(jù)集MNIST[1]。但大部分模型在MNIST上的分類精度都超過了95%御雕。為了更直觀地觀察算法之間的差異矢沿,我們將使用一個圖像內(nèi)容更加復(fù)雜的數(shù)據(jù)集Fashion-MNIST[2]。
我這里我們會使用torchvision包酸纲,它是服務(wù)于PyTorch深度學(xué)習(xí)框架的捣鲸,主要用來構(gòu)建計算機(jī)視覺模型。torchvision主要由以下幾部分構(gòu)成:
torchvision.datasets: 一些加載數(shù)據(jù)的函數(shù)及常用的數(shù)據(jù)集接口闽坡;
torchvision.models: 包含常用的模型結(jié)構(gòu)(含預(yù)訓(xùn)練模型)栽惶,例如AlexNet、VGG疾嗅、ResNet等外厂;
torchvision.transforms: 常用的圖片變換,例如裁剪代承、旋轉(zhuǎn)等汁蝶;
torchvision.utils: 其他的一些有用的方法。
多層感知機(jī)
多層感知機(jī)的基本知識
使用多層感知機(jī)圖像分類的從零開始的實現(xiàn)
使用pytorch的簡潔實現(xiàn)
多層感知機(jī)的基本知識
深度學(xué)習(xí)主要關(guān)注多層模型论悴。在這里掖棉,我們將以多層感知機(jī)(multilayer perceptron,MLP)為例膀估,介紹多層神經(jīng)網(wǎng)絡(luò)的概念幔亥。
隱藏層
下圖展示了一個多層感知機(jī)的神經(jīng)網(wǎng)絡(luò)圖,它含有一個隱藏層察纯,該層中有5個隱藏單元帕棉。
Image Name
表達(dá)公式
具體來說,給定一個小批量樣本 X∈Rn×dX∈Rn×d 饼记,其批量大小為 nn 香伴,輸入個數(shù)為 dd 。假設(shè)多層感知機(jī)只有一個隱藏層具则,其中隱藏單元個數(shù)為 hh 瞒窒。記隱藏層的輸出(也稱為隱藏層變量或隱藏變量)為 HH ,有 H∈Rn×hH∈Rn×h 乡洼。因為隱藏層和輸出層均是全連接層崇裁,可以設(shè)隱藏層的權(quán)重參數(shù)和偏差參數(shù)分別為 Wh∈Rd×hWh∈Rd×h 和 bh∈R1×hbh∈R1×h ,輸出層的權(quán)重和偏差參數(shù)分別為 Wo∈Rh×qWo∈Rh×q 和 bo∈R1×qbo∈R1×q 束昵。
我們先來看一種含單隱藏層的多層感知機(jī)的設(shè)計拔稳。其輸出 O∈Rn×qO∈Rn×q 的計算為
HO=XWh+bh,=HWo+bo,
H=XWh+bh,O=HWo+bo,
也就是將隱藏層的輸出直接作為輸出層的輸入。如果將以上兩個式子聯(lián)立起來锹雏,可以得到
O=(XWh+bh)Wo+bo=XWhWo+bhWo+bo.
O=(XWh+bh)Wo+bo=XWhWo+bhWo+bo.
從聯(lián)立后的式子可以看出巴比,雖然神經(jīng)網(wǎng)絡(luò)引入了隱藏層,卻依然等價于一個單層神經(jīng)網(wǎng)絡(luò):其中輸出層權(quán)重參數(shù)為 WhWoWhWo 礁遵,偏差參數(shù)為 bhWo+bobhWo+bo 轻绞。不難發(fā)現(xiàn),即便再添加更多的隱藏層佣耐,以上設(shè)計依然只能與僅含輸出層的單層神經(jīng)網(wǎng)絡(luò)等價政勃。
激活函數(shù)
上述問題的根源在于全連接層只是對數(shù)據(jù)做仿射變換(affine transformation),而多個仿射變換的疊加仍然是一個仿射變換兼砖。解決問題的一個方法是引入非線性變換奸远,例如對隱藏變量使用按元素運(yùn)算的非線性函數(shù)進(jìn)行變換,然后再作為下一個全連接層的輸入讽挟。這個非線性函數(shù)被稱為激活函數(shù)(activation function)懒叛。
下面我們介紹幾個常用的激活函數(shù):
ReLU函數(shù)
ReLU(rectified linear unit)函數(shù)提供了一個很簡單的非線性變換。給定元素 xx 耽梅,該函數(shù)定義為
ReLU(x)=max(x,0).
ReLU(x)=max(x,0).
可以看出薛窥,ReLU函數(shù)只保留正數(shù)元素,并將負(fù)數(shù)元素清零眼姐。為了直觀地觀察這一非線性變換诅迷,我們先定義一個繪圖函數(shù)xyplot。