前面博客說的是logistic邏輯迴歸,這篇博客則是Softmax迴歸,可以說Softmax迴歸是logistic迴歸的一般化(因爲logistic是二分類的),適用於K分類的問題。Softmax函數的本質就是將一個K維的任意實數向量壓縮(映射)成另一個K維的實數向量,其中向量中的每個元素取值都介於(0,1)之間。
概念函數
p(y=k∣x;θ)=∑l=1keθkTxeθkTx,k=1,2,...,K
如果分子和分母不用指數的形式,直接 θkTx作爲分子,∑l=1KθlTx 作爲分母,結果也是0到1之間的概率,爲什麼還要用指數形式呢?
因爲:e爲底的指數函數,當自變量大小1時,因變量變化是特別劇烈的。如 θ1x=100,θ2x=101 ,此時變化比較小,如果變成指數形式,差異就會被放大很多,這是我們期望看到的。
原理
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(θ)=−m1i=1∑mj=1∑kI(y(i)=j)ln(∑l=1keθkTx(i)eθkTx(i))
I(y(i)=j)={1,y(i)=j0,y(i)=j
假如有一條樣本 (x(i),y(i)) 屬於 j 類,我們希望的是這條樣本爲此類別時 (y(i)=j) 的概率越大越好,即此時的 ∑l=1keθkTx(i)eθkTx(i) 越大越好,也就是 ln(∑l=1keθkTx(i)eθkTx(i)) 越大越好。總共m條樣本,累加起來再除上m,最後再取相反數。
∑l=1keθkTx(i)eθkTx(i) 取值是0~1,則 ln(∑l=1keθkTx(i)eθkTx(i)) 爲負數,取相反數後, 的值爲正,便得上面的J(θ)。
所以,我們期望的是 J(θ) 越小越好,所以我們可以令 J(θ) 爲損失函數。
梯度下降法求解
∂θ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=θ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