機器學習(迴歸八)——Softmax迴歸

前面博客說的是logistic邏輯迴歸,這篇博客則是Softmax迴歸,可以說Softmax迴歸是logistic迴歸的一般化(因爲logistic是二分類的),適用於K分類的問題。Softmax函數的本質就是將一個K維的任意實數向量壓縮(映射)成另一個K維的實數向量,其中向量中的每個元素取值都介於(0,1)之間。

概念函數
p(y=kx;θ)=eθkTxl=1keθkTx,k=1,2,...,K p(y=k|x;\theta)=\frac{e^{\theta ^T_k x}}{\sum_{l=1}^k e^{\theta ^T_k x}},k=1,2,...,K
如果分子和分母不用指數的形式,直接 θkTxθ_k^T x作爲分子,l=1KθlTx\sum_{l=1}^Kθ_l^T x 作爲分母,結果也是0到1之間的概率,爲什麼還要用指數形式呢?
因爲:e爲底的指數函數,當自變量大小1時,因變量變化是特別劇烈的。如 θ1x=100θ2x=101θ_1 x=100 ,θ_2 x=101 ,此時變化比較小,如果變成指數形式,差異就會被放大很多,這是我們期望看到的。

原理
hθ(x)=[p(y(i)=1x(i);θ)p(y(i)=2x(i);θ)...p(y(i)=kx(i);θ)]=1j=1keθjTx(i)θ=[θ11θ12θ1nθ21θ22θ2nθk1θk2θkn] h_\theta(x) = \begin{bmatrix} p(y^{(i)}=1|x^{(i)};\theta) \\ p(y^{(i)}=2|x^{(i)};\theta) \\ ...\\ p(y^{(i)}=k|x^{(i)};\theta) \end{bmatrix} =\frac{1}{\sum_{j=1}^k e^{\theta ^T_j x^{(i)}}} \, \Longrightarrow \theta= \begin{bmatrix} \theta_{11} & \theta_{12} & \cdots & \theta_{1n} \\ \theta_{21} & \theta_{22} & \cdots& \theta_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ \theta_{k1} & \theta_{k2} & \cdots & \theta_{kn} \\ \end{bmatrix}

損失函數
我們根據邏輯迴歸的損失函數,稍微變化一下
J(θ)=1mi=1mj=1kI(y(i)=j)ln(eθkTx(i)l=1keθkTx(i)) J(\theta)=-\frac{1}{m} \sum_{i=1}^m \sum_{j=1}^k I(y^{(i)}=j) \ln \left( \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} \right)
I(y(i)=j)={1,y(i)=j0,y(i)j I(y^{(i)}=j)=\begin{cases} 1, y^{(i)}=j\\ 0,y^{(i)} \neq j \end{cases}

假如有一條樣本 (x(i),y(i))(x^{(i)}, y^{(i)}) 屬於 jj 類,我們希望的是這條樣本爲此類別時 (y(i)=j)(y^{(i)}=j) 的概率越大越好,即此時的 eθkTx(i)l=1keθkTx(i)\frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} 越大越好,也就是 ln(eθkTx(i)l=1keθkTx(i))\ln \left( \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} \right) 越大越好。總共m條樣本,累加起來再除上m,最後再取相反數。
eθkTx(i)l=1keθkTx(i)\frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} 取值是0~1,則 ln(eθkTx(i)l=1keθkTx(i))\ln \left( \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} \right) 爲負數,取相反數後, 的值爲正,便得上面的J(θ)。
所以,我們期望的是 J(θ)J(θ) 越小越好,所以我們可以令 J(θ)J(θ) 爲損失函數。

梯度下降法求解
θjJ(θ)=θjI(y(i)=j)ln(eθkTx(i)l=1keθkTx(i))=θjI(y(i)=j)ln(θjTx(i)ln(l=1keθlTx(i)))=I(y(i)=j)(1eθkTx(i)l=1keθkTx(i))x(i) \begin{aligned} \frac{\partial}{\partial \theta _j} J(\theta) &= \frac{\partial}{\partial \theta _j} -I(y^{(i)}=j) \ln \left( \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} \right)\\ &=\frac{\partial}{\partial \theta _j} -I(y^{(i)}=j) \ln \left( \theta^T_j x^{(i)} - \ln \left( \sum_{l=1}^k e^{\theta_l^T x^{(i)}} \right) \right)\\ &= -I(y^{(i)}=j) \left( 1- \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} \right) x^{(i)} \end{aligned}

所以對於批量或隨機梯度下降有以下式子:
θj=θj+αi=1mI(y(i)=j)(1p(y(i)=jx(i);θ))x(i)θj=θj+αI(y(i)=j)(1p(y(i)=jx(i);θ))x(i) \begin{aligned} \theta_j &= \theta_j + \alpha \sum_{i=1}^m I(y^{(i)}=j)(1-p(y^{(i)}=j | x^{(i)};\theta))x^{(i)}\\ \theta_j &= \theta_j + \alpha I(y^{(i)}=j)(1-p(y^{(i)}=j | x^{(i)};\theta))x^{(i)} \end{aligned}

邏輯迴歸在真正的二分類中,效果還是可以的,但它不適合多分類,雖然softmax可以做,但實際應用中,對於多分類很少用softmax。但有兩點需要注意

  • softmax和其他多分類的求解方式很不一樣。其他多分類要構建很多個模型,而softmax只構建一個。
  • softmax屬於各類別的概率都算出來,以最大的爲標準,和深度學習最一個隱層的功能非常類似。所以深度學習最後一層是softmax
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章