softmax與分類模型

softmax與分類模型

模型功能

softmax使用於多分類模型,softmax對於每個分類標籤都會輸出一個概率,概率最大的那個作爲輸出結果。

引入

假設樣本有四個特徵x1,x2,x3,x4x_1, x_2, x_3, x_4,有三種可能標籤y1,y2,y3y_1, y_2, y_3
o1=x1w11+x2w21+x3w31+x4w41+b1 \begin{aligned} o_1 &= x_1 w_{11} + x_2 w_{21} + x_3 w_{31} + x_4 w_{41} + b_1 \end{aligned}

o2=x1w12+x2w22+x3w32+x4w42+b2 \begin{aligned} o_2 &= x_1 w_{12} + x_2 w_{22} + x_3 w_{32} + x_4 w_{42} + b_2 \end{aligned}

o3=x1w13+x2w23+x3w33+x4w43+b3 \begin{aligned} o_3 &= x_1 w_{13} + x_2 w_{23} + x_3 w_{33} + x_4 w_{43} + b_3 \end{aligned}

對於上層的式子,我們可以用如下的單層神經網絡圖來表示:

我們的目標就是求出argmaxioi\underset{i}{\arg\max} o_i,例如o1,o2,o3o_1,o_2,o_3分別爲0.1,10,0.10.1,10,0.1,那麼我們最後輸出的結果應該是2。

這個方法可以用在多分類問題中,但是存在兩個問題:

  1. 輸出值的意義不明,各個值之間大小差異可能也很大,人不易理解。
  2. 輸出值的輸出範圍不定,而原始標籤是一個個離散值,難以表示兩者之前的誤差。

softmax函數

爲了解決上面兩個問題,提出了softmax函數,softmax函數通過如下變化將輸出變化爲和爲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=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+y^2+y^3=1\hat{y}_1 + \hat{y}_2 + \hat{y}_3 = 10y^1,y^2,y^310 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 1,因此y^1,y^2,y^3\hat{y}_1, \hat{y}_2, \hat{y}_3是一個合法的概率分佈。這時候,如果y^2=0.8\hat{y}_2=0.8,我們就知道圖像類別爲貓的概率是80%。此外,我們注意到

argmaxioi=argmaxiy^i \underset{i}{\arg\max} o_i = \underset{i}{\arg\max} \hat{y}_i

所以softmax運算其實不改變預測類別輸出。

計算效率

  • 單樣本矢量計算表達式
    爲了提高計算效率,我們可以將單樣本分類通過矢量計算來表達。在上面的圖像分類問題中,假設softmax迴歸的權重和偏差參數分別爲

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},

設高和寬分別爲2個像素的圖像樣本ii的特徵爲

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},

輸出層的輸出爲

o(i)=[o1(i)o2(i)o3(i)], \boldsymbol{o}^{(i)} = \begin{bmatrix}o_1^{(i)} & o_2^{(i)} & o_3^{(i)}\end{bmatrix},

預測爲狗、貓或雞的概率分佈爲

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}.

softmax迴歸對樣本ii分類的矢量計算表達式爲

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}

  • 小批量矢量計算表達式
    爲了進一步提升計算效率,我們通常對小批量數據做矢量計算。廣義上講,給定一個小批量樣本,其批量大小爲nn,輸入個數(特徵數)爲dd,輸出個數(類別數)爲qq。設批量特徵爲XRn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}。假設softmax迴歸的權重和偏差參數分別爲WRd×q\boldsymbol{W} \in \mathbb{R}^{d \times q}bR1×q\boldsymbol{b} \in \mathbb{R}^{1 \times 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}

其中的加法運算使用了廣播機制,O,Y^Rn×q\boldsymbol{O}, \boldsymbol{\hat{Y}} \in \mathbb{R}^{n \times q}且這兩個矩陣的第ii行分別爲樣本ii的輸出o(i)\boldsymbol{o}^{(i)}和概率分佈y^(i)\boldsymbol{\hat{y}}^{(i)}

交叉熵損失函數

對於樣本ii,我們構造向量y(i)Rq\boldsymbol{y}^{(i)}\in \mathbb{R}^{q} ,我們假設每個使其對應類別的向量元素爲1,其餘爲0。

這裏我們**假設是一個單標籤預測問題,並且標籤數量爲q,**我們假設向量y(i)\boldsymbol{y}^{(i)}的第h(i)h(i)個元素爲1,其餘爲0,h(i)[0,m1]h(i) \in [0, m-1]

這樣我們的訓練目標可以設爲使預測概率分佈y^(i)\boldsymbol{\hat y}^{(i)}儘可能接近真實的標籤概率分佈y(i)\boldsymbol{y}^{(i)}

  • 平方損失估計

Loss=y^(i)y(i)2/2 \begin{aligned}Loss = |\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}|^2/2\end{aligned}

然而,想要預測分類結果正確,我們其實並不需要預測概率完全等於標籤概率。例如,在圖像分類的例子裏,如果y(i)=3y^{(i)}=3,那麼我們只需要y^3(i)\hat{y}^{(i)}_3比其他兩個預測值y^1(i)\hat{y}^{(i)}_1y^2(i)\hat{y}^{(i)}_2大就行了。即使y^3(i)\hat{y}^{(i)}_3值爲0.6,不管其他兩個預測值爲多少,類別預測均正確。而平方損失則過於嚴格,例如y^1(i)=y^2(i)=0.2\hat y^{(i)}_1=\hat y^{(i)}_2=0.2y^1(i)=0,y^2(i)=0.4\hat y^{(i)}_1=0, \hat y^{(i)}_2=0.4的損失要小很多,雖然兩者都有同樣正確的分類預測結果。

  • 交叉熵損失函數

改善上述問題的一個方法是使用更適合衡量兩個概率分佈差異的測量函數。其中,交叉熵(cross entropy)是一個常用的衡量方法:

H(y(i),y^(i))=j=1qyj(i)logy^j(i), H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},

其中帶下標的yj(i)y_j^{(i)}表示向量y(i)\boldsymbol y^{(i)}的第j1j-1個元素(元素起指示作用,非0即1,1代表屬於對應類別)。

在上式中,我們知道向量y(i)\boldsymbol y^{(i)}中只有第h(i)h(i)個元素爲1,其餘全爲0,於是H(y(i),y^(i))=logy^h(i)(i)H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\log \hat y_{h(i)}^{(i)}。也就是說,交叉熵只關心對正確類別的預測概率,因爲只要其值足夠大,就可以確保分類結果正確。當然,遇到一個樣本有多個標籤時,例如圖像裏含有不止一個物體時,我們並不能做這一步簡化。但即便對於這種情況,交叉熵同樣只關心對圖像中出現的物體類別的預測概率。

Example

假設有三個樣本,且每個樣本的損失計算如下:
L1=(0×log0.3+0×log0.3+1×log0.4)=0.91L2=(0×log0.3+1×log0.4+0×log0.3)=0.91L3=(1×log0.1+0×log0.2+0×log0.7)=2.30 L1 = -(0 \times log0.3 + 0 \times log0.3 +1 \times log0.4 ) = 0.91\\ L2 = -(0 \times log0.3 + 1 \times log0.4 +0 \times log0.3 ) = 0.91\\ L3 = -(1 \times log0.1 + 0 \times log0.2 +0 \times log0.7 ) = 2.30
假設訓練數據集的樣本數爲nn,交叉熵損失函數定義爲
(Θ)=1ni=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 ),

對應到上面的例子,即
MSE=0.91+0.91+2.33=1.37 \begin{aligned} MSE = {0.91 + 0.91 + 2.3 \over 3 } = 1.37 \end{aligned}
其中Θ\boldsymbol{\Theta}代表模型參數。同樣地,如果每個樣本只有一個標籤(即單標籤預測問題),那麼交叉熵損失可以簡寫成(Θ)=(1/n)i=1nlogy^h(i)(i)\ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{h(i)}^{(i)}從另一個角度來看,我們知道最小化(Θ)\ell(\boldsymbol{\Theta})等價於最大化exp(n(Θ))=i=1ny^h(i)(i)\exp(-n\ell(\boldsymbol{\Theta}))=\prod_{i=1}^n \hat y_{{h(i)}}^{(i)},即最小化交叉熵損失函數等價於最大化訓練數據集所有標籤類別的聯合預測概率。

發佈了72 篇原創文章 · 獲贊 37 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章