前面部落格說的是logistic邏輯回歸,這篇部落格則是Softmax回歸,可以說Softmax回歸是logistic回歸的一般化(因為logistic是二分類的),适用于K分類的問題。Softmax函數的本質就是将一個K維的任意實數向量壓縮(映射)成另一個K維的實數向量,其中向量中的每個元素取值都介于(0,1)之間。
概念函數
p ( y = k ∣ x ; θ ) = e θ k T x ∑ l = 1 k e θ k T x , 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 p(y=k∣x;θ)=∑l=1keθkTxeθkTx,k=1,2,...,K
如果分子和分母不用指數的形式,直接 θ k T x θ_k^T x θkTx作為分子, ∑ l = 1 K θ l T x \sum_{l=1}^Kθ_l^T x ∑l=1KθlTx 作為分母,結果也是0到1之間的機率,為什麼還要用指數形式呢?
因為:e為底的指數函數,當自變量大小1時,因變量變化是特别劇烈的。如 θ 1 x = 100 , θ 2 x = 101 θ_1 x=100 ,θ_2 x=101 θ1x=100,θ2x=101 ,此時變化比較小,如果變成指數形式,差異就會被放大很多,這是我們期望看到的。
原理
h θ ( x ) = [ p ( y ( i ) = 1 ∣ x ( i ) ; θ ) p ( y ( i ) = 2 ∣ x ( i ) ; θ ) . . . p ( y ( i ) = k ∣ x ( i ) ; θ ) ] = 1 ∑ j = 1 k e θ j T x ( i ) ⟹ θ = [ θ 11 θ 12 ⋯ θ 1 n θ 21 θ 22 ⋯ θ 2 n ⋮ ⋮ ⋱ ⋮ θ k 1 θ k 2 ⋯ θ k n ] 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} hθ(x)=⎣⎢⎢⎡p(y(i)=1∣x(i);θ)p(y(i)=2∣x(i);θ)...p(y(i)=k∣x(i);θ)⎦⎥⎥⎤=∑j=1keθjTx(i)1⟹θ=⎣⎢⎢⎢⎡θ11θ21⋮θk1θ12θ22⋮θk2⋯⋯⋱⋯θ1nθ2n⋮θkn⎦⎥⎥⎥⎤
損失函數
我們根據邏輯回歸的損失函數,稍微變化一下
J ( θ ) = − 1 m ∑ i = 1 m ∑ j = 1 k I ( y ( i ) = j ) ln ( e θ k T x ( i ) ∑ l = 1 k e θ k T x ( 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) J(θ)=−m1i=1∑mj=1∑kI(y(i)=j)ln(∑l=1keθkTx(i)eθkTx(i))
I ( y ( i ) = j ) = { 1 , y ( i ) = j 0 , y ( i ) ≠ j I(y^{(i)}=j)=\begin{cases} 1, y^{(i)}=j\\ 0,y^{(i)} \neq j \end{cases} I(y(i)=j)={1,y(i)=j0,y(i)=j
假如有一條樣本 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i)) 屬于 j j j 類,我們希望的是這條樣本為此類别時 ( y ( i ) = j ) (y^{(i)}=j) (y(i)=j) 的機率越大越好,即此時的 e θ k T x ( i ) ∑ l = 1 k e θ k T x ( i ) \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} ∑l=1keθkTx(i)eθkTx(i) 越大越好,也就是 ln ( e θ k T x ( i ) ∑ l = 1 k e θ k T x ( i ) ) \ln \left( \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} \right) ln(∑l=1keθkTx(i)eθkTx(i)) 越大越好。總共m條樣本,累加起來再除上m,最後再取相反數。
e θ k T x ( i ) ∑ l = 1 k e θ k T x ( i ) \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} ∑l=1keθkTx(i)eθkTx(i) 取值是0~1,則 ln ( e θ k T x ( i ) ∑ l = 1 k e θ k T x ( i ) ) \ln \left( \frac{e^{\theta ^T_k x^{(i)}}}{\sum_{l=1}^k e^{\theta ^T_k x^{(i)}}} \right) ln(∑l=1keθkTx(i)eθkTx(i)) 為負數,取相反數後, 的值為正,便得上面的J(θ)。
是以,我們期望的是 J ( θ ) J(θ) J(θ) 越小越好,是以我們可以令 J ( θ ) J(θ) J(θ) 為損失函數。
梯度下降法求解
∂ ∂ θ j J ( θ ) = ∂ ∂ θ j − I ( y ( i ) = j ) ln ( e θ k T x ( i ) ∑ l = 1 k e θ k T x ( i ) ) = ∂ ∂ θ j − I ( y ( i ) = j ) ln ( θ j T x ( i ) − ln ( ∑ l = 1 k e θ l T x ( i ) ) ) = − I ( y ( i ) = j ) ( 1 − e θ k T x ( i ) ∑ l = 1 k e θ k T x ( 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(θ)=∂θj∂−I(y(i)=j)ln(∑l=1keθkTx(i)eθkTx(i))=∂θj∂−I(y(i)=j)ln(θjTx(i)−ln(l=1∑keθlTx(i)))=−I(y(i)=j)(1−∑l=1keθkTx(i)eθkTx(i))x(i)
是以對于批量或随機梯度下降有以下式子:
θ j = θ j + α ∑ i = 1 m I ( y ( i ) = j ) ( 1 − p ( y ( i ) = j ∣ x ( i ) ; θ ) ) x ( i ) θ j = θ j + α I ( y ( i ) = j ) ( 1 − p ( y ( i ) = j ∣ x ( 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} θjθj=θj+αi=1∑mI(y(i)=j)(1−p(y(i)=j∣x(i);θ))x(i)=θj+αI(y(i)=j)(1−p(y(i)=j∣x(i);θ))x(i)
邏輯回歸在真正的二分類中,效果還是可以的,但它不适合多分類,雖然softmax可以做,但實際應用中,對于多分類很少用softmax。但有兩點需要注意
- softmax和其他多分類的求解方式很不一樣。其他多分類要建構很多個模型,而softmax隻建構一個。
- softmax屬于各類别的機率都算出來,以最大的為标準,和深度學習最一個隐層的功能非常類似。是以深度學習最後一層是softmax