前面博客说的是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