動手深度學習5-softmax迴歸

softmax迴歸

前幾節介紹的是線性迴歸模型適用於輸出連續值的狀況,在另一類狀況下,模型輸出的是一個圖像的類別這樣的離散值。對於離散值預測的問題,咱們能夠採用諸如softmax迴歸在內的分類模型。
和線性迴歸不一樣,softmax迴歸的輸出單元從一個變成了多個,且引入了運算使輸出值更適合離散值的預測和訓練。以softmax迴歸模型爲例,介紹神經網絡中的分類模型。網絡

讓咱們先考慮一個簡單的圖像分類維內託,其輸入圖像的高和寬均爲2像素,且色彩是灰度。這樣的像素值均可以用一個標量表示。咱們將圖像中的4像素分別記爲\(x_{1},x_{2},x_{3},x_{4}\)。假設訓練數據中圖像的真實標籤爲狗,貓或者雞(假設能夠用4個像素表示出這三種動物),這些標籤分別對應的離散值\(y_{1},y_{2},y_{3}\)。咱們一般使用離散值的數值來表示類別,例如\(y_{1}=1,y_{2}=2,y_{3}=3\)。這樣一張圖片的標籤爲1,2和3這三個數值中的一個。可是這種連續值到離散值的轉化一般會影響到分類的質量。所以咱們使用更加適合離散值輸出的模型來解決分類問題函數

softmax 迴歸模型

softmax迴歸和線性迴歸同樣將輸入特徵與權重作線性疊加。與線性迴歸的一個主要不一樣在於,softmax迴歸的輸出值的個數等於標籤裏的類別數。所以一共有4個特徵和3個類別的動物類別,因此權重包含12個標量帶下標的\(w\),誤差包含3個標量帶下標的\(b\),且對於每一個輸入計算\(o_{1},o_{2},o_{3}\)這三個輸出spa

\(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_{2}\)..net

下圖用神經網絡描繪了上面的計算。softmax迴歸同線性迴歸同樣,也是一個單層神經網絡。因爲每一個輸出\(o_{1},o_{2},o_{3}\)的計算都有以來與全部的輸入\(x_{1},x_{2},x_{3},x_{4}\),softmax迴歸的輸出層也是一個全鏈接層。
code

既然分類問題須要輸出離散的預測結果,一個簡單的方法就是把計算出來的\(o_{1},o_{2},o_{3}\)做爲預測類別的是i的置信度,並將值最大的輸出所對應的類做爲預測輸出,即
\(\underset{i}{\arg\max}o_{i}\),若是\(o_{1},o_{2},o_{3}\)分別爲0.1,10,0.1,因爲\(o_{2}\)最大,那麼預測的類別爲2,其表明貓blog

  • 輸出層的值的範圍不肯定,很難直觀的判斷這些值的意義。
  • 真實標籤是離散值,離散值與不肯定範圍的輸出值之間的偏差難以衡量,
    而經過softmax運算解決了以上兩個問題,它經過下式將輸出值轉換成值爲正,且和爲1的機率分佈:
    \(\hat{y}_{1},\hat{y}_{2},\hat{y}_{3}\) = \(softmax(o_{1},o_{2},o_{3})\)
    其中

\[ \hat { y } _ { 1 } = \frac { \exp ( o_{1} ) } { \sum _ { i = 1 } ^ { 3 } \exp ( o_{i }) } , \quad \hat { y } _ { 2 } = \frac { \exp \left( o _ { 2 } \right) } { \sum _ { i = 1 } ^ { 2 } \exp \left( o _ { i } \right) } , \quad \hat { y } _ { 3 } = \frac { \exp \left( o _ { 3 } \right) } { \sum _ { i = 1 } ^ { 3 } \exp \left( o _ { i } \right) } \]圖片

容易看出\(\hat{y}_{1}+\hat{y}_{2}+\hat{y}_{3}=1\),且0<=\(\hat{y}_{1},\hat{y}_{2},\hat{y}_{3}\)<=1。\(\hat{y}_{1},\hat{y}_{2},\hat{y}_{3}\)是一個合理的機率分佈。這時候,若是\(\hat{y}_{2}\)=0.8,無論其餘兩個值是多少,咱們都知道圖像類別爲貓的機率爲80%,此外
\(\underset{i}{\arg\max}o_{i}\) = \(\underset{i}{\arg\max}\hat{y}_{i}\),softmax運算不會改變預測類別的輸出結果。get

單樣本分類的矢量計算表達式

爲了提升計算效率,咱們能夠將單樣本分類經過矢量計算來表達。在上面的圖像分類問題中,假設softmax迴歸的權重和誤差參數分別爲
\[ \boldsymbol { W } = \left[ \begin{array} { l l l } { 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{array} \right] , \quad \boldsymbol { b } = \left[ \begin{array} { l l l } { b _ { 1 } } & { b _ { 2 } } & { b _ { 3 } } \end{array} \right] \]博客

設高和寬分別爲2個像素的圖像樣本i的特徵爲
\[x^{(i)} = \left[ \begin{array} { l l 1 1} { x _ { 1 }^{(i)} } & { x _ { 2 }^{(i)} } & { x _ { 3 }^{(i)} }&{x_{4}^{(i)}} \end{array} \right]\],
輸出層的輸出爲
\[\boldsymbol { o^{(i)} } = \left[ \begin{array} { l l l } { o _ { 1 }^{(i)} } & { o _ { 2 }^{(i)}} & { o _ { 3 }^{(i)} } \end{array} \right]\],
預測爲狗、貓或者雞的機率分佈爲
\[\boldsymbol {\hat{\boldsymbol{y}}^{(i)} } = \left[ \begin{array} { l l l } { \hat{y} _ { 1 }^{(i)} } & { \hat{y} _ { 2 }^{(i)}} & { \hat{y} _ { 3 }^{(i)} } \end{array} \right]\],class

softmax迴歸對樣本i分類的矢量計算表達式爲
\[o^{(i)}=x^{(i)} \boldsymbol{W} +b\]
\[\hat{y}^{(i)} = softmax(o^{(i)})\]

小批量樣本分類的矢量計算表達式

爲了進一步的提高效率,咱們一般對小批量的數據作矢量計算。廣義上講,給定一個小批量樣本,其批量大小爲n,輸入個數(特徵個數)爲d,輸出個數爲(類別數)爲q。
設批量特徵爲\(\boldsymbol{X}∈R^{nxd}\)。假設softmax迴歸的權重和誤差參數爲\(\boldsymbol{W}∈R^{d✖️q}和\boldsymbol{b}∈R^{1✖️q}\) softmax迴歸的矢量計算表達式爲
\[\boldsymbol{O}=\boldsymbol{X}\boldsymbol{W}+\boldsymbol{b}\]
\[\boldsymbol{\hat{Y}} = softmax(\boldsymbol{O})\]

其中的假髮運算使用了廣播機制,\(\boldsymbol{O},\boldsymbol{\hat{Y}}∈R^{n✖️q}且這兩個矩陣的第i行分別爲樣本i的輸出o^{(i)}和機率分佈\hat{y}^{(i)}\)

交叉熵損失函數

使用softmax運算後能夠方便的與離散標籤計算偏差。咱們已經知道,softmax運算變成一個合理的類別預測分佈。實際上,真實標籤也能夠用類別分佈表達:對於樣本i,咱們能夠構造向量\(y^{(i)} ∈R^q,使其第y^{(i)}個元素爲1,其他爲0.這樣咱們的訓練目標能夠設置爲使預測機率分佈\hat{y}^{(i)}儘量的接近真實的標籤機率分佈y^{(i)}\)

咱們能夠像線性迴歸那樣使用平方損失函數\(||\hat{y}^{(i)}-y^{(i)}||^2/2\),然而想要預測出正確的分類結果,並不須要預測機率徹底等於標籤機率。交叉熵(cross entropy)是一個經常使用的衡量方法:
\[ H \left( \boldsymbol { y } ^ { ( i ) } , \hat { \boldsymbol { y } } ^ { ( i ) } \right) = - \sum _ { j = 1 } ^ { q } y _ { j } ^ { ( i ) } \log \hat { y } _ { j } ^ { ( i ) } \]

假設訓練樣本的樣本數爲n,交叉熵損失函數定義爲
\(\ell\left({Θ}\right)\) = \(\frac{1}{n}\sum_{i=1}^{n}H\left(\boldsymbol{y^{(i)}},\hat{\boldsymbol{y}}^{(i)}\right)\)

\(Θ\)表明模參數嗎,具體細節能夠參考
討論區
博客

cross entropy通常是用來量化兩個機率分佈之間的差距的
舉個例子,你如今要預測一張圖片是狗或貓
你的模型獲得的機率是
狗 = 0.4, 貓 = 0.6
而真實的機率則是
狗 = 0.0, 貓 = 1.0

那麼預測出來的機率和真實的機率,二者之間的差距有多大呢?這就是cross entropy要量化的事情了
根據上述的例子,咱們可知道cross entropy爲

-( 0.0 * log(0.4) + 1.0*log(0.6) ) = 0.22

0.22表明的是你的model預測出來的機率和真實的機率之間,差距有多大
模型預測以及評價

在訓練好softmax迴歸模型後,給定任意樣本特徵,就能夠預測出每一個輸出類別的機率。一般咱們把預測機率最大類別做爲輸出類別。若是它與真實標籤一致,說明預測是正確的。後續分類問題將採用準確率accuracy 來評估模型的表現。

小結
  • softmax迴歸適用於分類問題,它使用softmax運算輸出類別的機率分佈
  • softmax迴歸是一個單層神經網絡,輸出個數等於分類問題中的類別個數
  • 交叉熵適合衡量兩個機率分佈的差別
相關文章
相關標籤/搜索