深度学习pytorch--softmax回归(一)
softmax回歸
前幾節(jié)介紹的線性回歸模型適用于輸出為連續(xù)值的情景。在另一類情景中,模型輸出可以是一個像圖像類別這樣的離散值。對于這樣的離散值預測問題,我們可以使用諸如softmax回歸在內(nèi)的分類模型。和線性回歸不同,softmax回歸的輸出單元從一個變成了多個,且引入了softmax運算使輸出更適合離散值的預測和訓練。本節(jié)以softmax回歸模型為例,介紹神經(jīng)網(wǎng)絡中的分類模型。
分類問題
讓我們考慮一個簡單的圖像分類問題,其輸入圖像的高和寬均為2像素,且色彩為灰度。這樣每個像素值都可以用一個標量表示。我們將圖像中的4像素分別記為x1,x2,x3,x4x_1, x_2, x_3, x_4x1?,x2?,x3?,x4?。假設訓練數(shù)據(jù)集中圖像的真實標簽為狗、貓或雞(假設可以用4像素表示出這3種動物),這些標簽分別對應離散值y1,y2,y3y_1, y_2, y_3y1?,y2?,y3?。
我們通常使用離散的數(shù)值來表示類別,例如y1=1,y2=2,y3=3y_1=1, y_2=2, y_3=3y1?=1,y2?=2,y3?=3。如此,一張圖像的標簽為1、2和3這3個數(shù)值中的一個。雖然我們?nèi)匀豢梢允褂没貧w模型來進行建模,并將預測值就近定點化到1、2和3這3個離散值之一,但這種連續(xù)值到離散值的轉(zhuǎn)化通常會影響到分類質(zhì)量。因此我們一般使用更加適合離散值輸出的模型來解決分類問題。
softmax回歸模型
softmax回歸跟線性回歸一樣將輸入特征與權重做線性疊加。與線性回歸的一個主要不同在于,softmax回歸的輸出值個數(shù)等于標簽里的類別數(shù)。因為一共有4種特征(4個像素)和3種輸出動物類別,所以權重包含12個標量(帶下標的www)、偏差包含3個標量(帶下標的bbb),且對每個輸入計算o1,o2,o3o_1, o_2, o_3o1?,o2?,o3?這3個輸出:
o1=x1w11+x2w21+x3w31+x4w41+b1,o2=x1w12+x2w22+x3w32+x4w42+b2,o3=x1w13+x2w23+x3w33+x4w43+b3.\begin{aligned} o_1 &= x_1 w_{11} + x_2 w_{21} + x_3 w_{31} + x_4 w_{41} + b_1,\\ o_2 &= x_1 w_{12} + x_2 w_{22} + x_3 w_{32} + x_4 w_{42} + b_2,\\ o_3 &= x_1 w_{13} + x_2 w_{23} + x_3 w_{33} + x_4 w_{43} + b_3. \end{aligned} o1?o2?o3??=x1?w11?+x2?w21?+x3?w31?+x4?w41?+b1?,=x1?w12?+x2?w22?+x3?w32?+x4?w42?+b2?,=x1?w13?+x2?w23?+x3?w33?+x4?w43?+b3?.?
由此可見,權重(參數(shù))的目的就是用來提取特征,哪個權重大,則說明哪個像素的特征提取得比較多。
下圖用神經(jīng)網(wǎng)絡圖描繪了上面的計算。softmax回歸同線性回歸一樣,也是一個單層神經(jīng)網(wǎng)絡。由于每個輸出o1,o2,o3o_1, o_2, o_3o1?,o2?,o3?的計算都要依賴于所有的輸入x1,x2,x3,x4x_1, x_2, x_3, x_4x1?,x2?,x3?,x4?,softmax回歸的輸出層也是一個全連接層。
既然分類問題需要得到離散的預測輸出,一個簡單的辦法是將輸出值oio_ioi?當作預測類別是iii的置信度,并將值最大的輸出所對應的類作為預測輸出,即輸出 arg?max?ioi\underset{i}{\arg\max} o_iiargmax?oi?。例如,如果o1,o2,o3o_1,o_2,o_3o1?,o2?,o3?分別為0.1,10,0.10.1,10,0.10.1,10,0.1,由于o2o_2o2?最大,那么預測類別為2,其代表貓。
然而,直接使用輸出層的輸出有兩個問題。一方面,由于輸出層的輸出值的范圍不確定,我們難以直觀上判斷這些值的意義。例如,剛才舉的例子中的輸出值10表示“很置信”圖像類別為貓,因為該輸出值是其他兩類的輸出值的100倍。但如果o1=o3=103o_1=o_3=10^3o1?=o3?=103,那么輸出值10卻又表示圖像類別為貓的概率很低。另一方面,由于真實標簽是離散值,這些離散值與不確定范圍的輸出值之間的誤差難以衡量。
softmax運算符(softmax operator)解決了以上兩個問題。它通過下式將輸出值變換成值為正且和為1的概率分布:
y^1,y^2,y^3=softmax(o1,o2,o3)\hat{y}_1, \hat{y}_2, \hat{y}_3 = \text{softmax}(o_1, o_2, o_3) y^?1?,y^?2?,y^?3?=softmax(o1?,o2?,o3?)
其中
y^1=exp?(o1)∑i=13exp?(oi),y^2=exp?(o2)∑i=13exp?(oi),y^3=exp?(o3)∑i=13exp?(oi).\hat{y}_1 = \frac{ \exp(o_1)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}_2 = \frac{ \exp(o_2)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}_3 = \frac{ \exp(o_3)}{\sum_{i=1}^3 \exp(o_i)}. y^?1?=∑i=13?exp(oi?)exp(o1?)?,y^?2?=∑i=13?exp(oi?)exp(o2?)?,y^?3?=∑i=13?exp(oi?)exp(o3?)?.
容易看出y^1+y^2+y^3=1\hat{y}_1 + \hat{y}_2 + \hat{y}_3 = 1y^?1?+y^?2?+y^?3?=1且0≤y^1,y^2,y^3≤10 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 10≤y^?1?,y^?2?,y^?3?≤1,因此y^1,y^2,y^3\hat{y}_1, \hat{y}_2, \hat{y}_3y^?1?,y^?2?,y^?3?是一個合法的概率分布。這時候,如果y^2=0.8\hat{y}_2=0.8y^?2?=0.8,不管y^1\hat{y}_1y^?1?和y^3\hat{y}_3y^?3?的值是多少,我們都知道圖像類別為貓的概率是80%。此外,我們注意到
arg?max?ioi=arg?max?iy^i\underset{i}{\arg\max} o_i = \underset{i}{\arg\max} \hat{y}_i iargmax?oi?=iargmax?y^?i?
因此softmax運算不改變預測類別輸出。
單樣本分類的矢量計算表達式
為了提高計算效率,我們可以將單樣本分類通過矢量計算來表達。在上面的圖像分類問題中,假設softmax回歸的權重和偏差參數(shù)分別為
W=[w11w12w13w21w22w23w31w32w33w41w42w43],b=[b1b2b3],\boldsymbol{W} = \begin{bmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \\ w_{31} & w_{32} & w_{33} \\ w_{41} & w_{42} & w_{43} \end{bmatrix},\quad \boldsymbol{b} = \begin{bmatrix} b_1 & b_2 & b_3 \end{bmatrix}, W=?????w11?w21?w31?w41??w12?w22?w32?w42??w13?w23?w33?w43???????,b=[b1??b2??b3??],
W中每一列代表一個樣本的所有權重,3列就代表有3個輸出
設高和寬分別為2個像素的圖像樣本iii的特征為
x(i)=[x1(i)x2(i)x3(i)x4(i)],\boldsymbol{x}^{(i)} = \begin{bmatrix}x_1^{(i)} & x_2^{(i)} & x_3^{(i)} & x_4^{(i)}\end{bmatrix},x(i)=[x1(i)??x2(i)??x3(i)??x4(i)??],
輸出層的輸出為
o(i)=[o1(i)o2(i)o3(i)],\boldsymbol{o}^{(i)} = \begin{bmatrix}o_1^{(i)} & o_2^{(i)} & o_3^{(i)}\end{bmatrix},o(i)=[o1(i)??o2(i)??o3(i)??],
預測為狗、貓或雞的概率分布為
y^(i)=[y^1(i)y^2(i)y^3(i)].\boldsymbol{\hat{y}}^{(i)} = \begin{bmatrix}\hat{y}_1^{(i)} & \hat{y}_2^{(i)} & \hat{y}_3^{(i)}\end{bmatrix}.y^?(i)=[y^?1(i)??y^?2(i)??y^?3(i)??].
softmax回歸對樣本iii分類的矢量計算表達式為
o(i)=x(i)W+b,y^(i)=softmax(o(i)).\begin{aligned} \boldsymbol{o}^{(i)} &= \boldsymbol{x}^{(i)} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{y}}^{(i)} &= \text{softmax}(\boldsymbol{o}^{(i)}). \end{aligned} o(i)y^?(i)?=x(i)W+b,=softmax(o(i)).?
小批量樣本分類的矢量計算表達式
為了進一步提升計算效率,我們通常對小批量數(shù)據(jù)做矢量計算。廣義上講,給定一個小批量樣本,其批量大小為nnn,輸入個數(shù)(特征數(shù))為ddd,輸出個數(shù)(類別數(shù))為qqq。設批量特征為X∈Rn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}X∈Rn×d。假設softmax回歸的權重和偏差參數(shù)分別為W∈Rd×q\boldsymbol{W} \in \mathbb{R}^{d \times q}W∈Rd×q和b∈R1×q\boldsymbol{b} \in \mathbb{R}^{1 \times q}b∈R1×q。softmax回歸的矢量計算表達式為
O=XW+b,Y^=softmax(O),\begin{aligned} \boldsymbol{O} &= \boldsymbol{X} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{Y}} &= \text{softmax}(\boldsymbol{O}), \end{aligned} OY^?=XW+b,=softmax(O),?
其中的加法運算使用了廣播機制,O,Y^∈Rn×q\boldsymbol{O}, \boldsymbol{\hat{Y}} \in \mathbb{R}^{n \times q}O,Y^∈Rn×q且這兩個矩陣的第iii行分別為樣本iii的輸出o(i)\boldsymbol{o}^{(i)}o(i)和概率分布y^(i)\boldsymbol{\hat{y}}^{(i)}y^?(i)。
交叉熵損失函數(shù)
前面提到,使用softmax運算后可以更方便地與離散標簽計算誤差。我們已經(jīng)知道,softmax運算將輸出變換成一個合法的類別預測分布。實際上,真實標簽也可以用類別分布表達:對于樣本iii,我們構造向量y(i)∈Rq\boldsymbol{y}^{(i)}\in \mathbb{R}^{q}y(i)∈Rq ,使其第y(i)y^{(i)}y(i)(樣本iii類別的離散數(shù)值)個元素為1,其余為0。這樣我們的訓練目標可以設為使預測概率分布y^(i)\boldsymbol{\hat y}^{(i)}y^?(i)盡可能接近真實的標簽概率分布y(i)\boldsymbol{y}^{(i)}y(i)。
我們可以像線性回歸那樣使用平方損失函數(shù)∥y^(i)?y(i)∥2/2\|\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}\|^2/2∥y^?(i)?y(i)∥2/2。然而,想要預測分類結果正確,我們其實并不需要預測概率完全等于標簽概率。例如,在圖像分類的例子里,如果y(i)=3y^{(i)}=3y(i)=3,那么我們只需要y^3(i)\hat{y}^{(i)}_3y^?3(i)?比其他兩個預測值y^1(i)\hat{y}^{(i)}_1y^?1(i)?和y^2(i)\hat{y}^{(i)}_2y^?2(i)?大就行了。即使y^3(i)\hat{y}^{(i)}_3y^?3(i)?值為0.6,不管其他兩個預測值為多少,類別預測均正確。而平方損失則過于嚴格,例如y^1(i)=y^2(i)=0.2\hat y^{(i)}_1=\hat y^{(i)}_2=0.2y^?1(i)?=y^?2(i)?=0.2比y^1(i)=0,y^2(i)=0.4\hat y^{(i)}_1=0, \hat y^{(i)}_2=0.4y^?1(i)?=0,y^?2(i)?=0.4的損失要小很多,雖然兩者都有同樣正確的分類預測結果。
改善上述問題的一個方法是使用更適合衡量兩個概率分布差異的測量函數(shù)。其中,交叉熵(cross entropy)是一個常用的衡量方法:
H(y(i),y^(i))=?∑j=1qyj(i)log?y^j(i),H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},H(y(i),y^?(i))=?j=1∑q?yj(i)?logy^?j(i)?,
其中帶下標的yj(i)y_j^{(i)}yj(i)?是向量y(i)\boldsymbol y^{(i)}y(i)中非0即1的元素,需要注意將它與樣本iii類別的離散數(shù)值,即不帶下標的y(i)y^{(i)}y(i)區(qū)分。在上式中,我們知道向量y(i)\boldsymbol y^{(i)}y(i)中只有第y(i)y^{(i)}y(i)個元素yy(i)(i)y^{(i)}_{y^{(i)}}yy(i)(i)?為1,其余全為0,于是H(y(i),y^(i))=?log?y^y(i)(i)H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\log \hat y_{y^{(i)}}^{(i)}H(y(i),y^?(i))=?logy^?y(i)(i)?。也就是說,交叉熵只關心對正確類別的預測概率,因為只要其值足夠大,就可以確保分類結果正確。當然,遇到一個樣本有多個標簽時,例如圖像里含有不止一個物體時,我們并不能做這一步簡化。但即便對于這種情況,交叉熵同樣只關心對圖像中出現(xiàn)的物體類別的預測概率。
假設訓練數(shù)據(jù)集的樣本數(shù)為nnn,交叉熵損失函數(shù)定義為
?(Θ)=1n∑i=1nH(y(i),y^(i)),\ell(\boldsymbol{\Theta}) = \frac{1}{n} \sum_{i=1}^n H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ),?(Θ)=n1?i=1∑n?H(y(i),y^?(i)),
其中Θ\boldsymbol{\Theta}Θ代表模型參數(shù)。同樣地,如果每個樣本只有一個標簽,那么交叉熵損失可以簡寫成?(Θ)=?(1/n)∑i=1nlog?y^y(i)(i)\ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{y^{(i)}}^{(i)}?(Θ)=?(1/n)∑i=1n?logy^?y(i)(i)?。從另一個角度來看,我們知道最小化?(Θ)\ell(\boldsymbol{\Theta})?(Θ)等價于最大化exp?(?n?(Θ))=∏i=1ny^y(i)(i)\exp(-n\ell(\boldsymbol{\Theta}))=\prod_{i=1}^n \hat y_{y^{(i)}}^{(i)}exp(?n?(Θ))=∏i=1n?y^?y(i)(i)?,即最小化交叉熵損失函數(shù)等價于最大化訓練數(shù)據(jù)集所有標簽類別的聯(lián)合預測概率。
模型預測及評價
在訓練好softmax回歸模型后,給定任一樣本特征,就可以預測每個輸出類別的概率。通常,我們把預測概率最大的類別作為輸出類別。如果它與真實類別(標簽)一致,說明這次預測是正確的。在之后的實驗中,我們將使用準確率(accuracy)來評價模型的表現(xiàn)。它等于正確預測數(shù)量與總預測數(shù)量之比。
小結
- softmax回歸適用于分類問題。它使用softmax運算輸出類別的概率分布。
- softmax回歸是一個單層神經(jīng)網(wǎng)絡,輸出個數(shù)等于分類問題中的類別個數(shù)。
- 交叉熵適合衡量兩個概率分布的差異。
注:本節(jié)與原書基本相同,原書此節(jié)傳送門
轉(zhuǎn)載文章:動手學習深度學習pytorch
本文中的黃字為自己思考后加的。
總結
以上是生活随笔為你收集整理的深度学习pytorch--softmax回归(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大气的名字大全850个
- 下一篇: 深度学习pytorch--MNIST数据