前面博客说的是logistic逻辑回归,这篇博客则是Softmax回归,可以说Softmax回归是logistic回归的一般化(因为logistic是二分类的),适用于K分类的问题。Softmax函数的本质就是将一个K维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。

概念函数
p(y=k∣x;θ)=eθkTx∑l=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 p(y=kx;θ)=l=1keθkTxeθkTx,k=1,2,...,K
如果分子和分母不用指数的形式,直接 θkTxθ_k^T xθkTx作为分子,∑l=1KθlTx\sum_{l=1}^Kθ_l^T xl=1KθlTx 作为分母,结果也是0到1之间的概率,为什么还要用指数形式呢?
因为:e为底的指数函数,当自变量大小1时,因变量变化是特别剧烈的。如 θ1x=100,θ2x=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=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} hθ(x)=p(y(i)=1x(i);θ)p(y(i)=2x(i);θ)...p(y(i)=kx(i);θ)=j=1keθjTx(i)1θ=θ11θ21θk1θ12θ22θk2θ1nθ2nθkn

损失函数
我们根据逻辑回归的损失函数,稍微变化一下
J(θ)=−1m∑i=1m∑j=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) J(θ)=m1i=1mj=1kI(y(i)=j)ln(l=1keθkTx(i)eθkTx(i))
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} I(y(i)=j)={1,y(i)=j0,y(i)=j

假如有一条样本 (x(i),y(i))(x^{(i)}, y^{(i)})(x(i),y(i)) 属于 jjj 类,我们希望的是这条样本为此类别时 (y(i)=j)(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)}}}l=1keθkTx(i)eθkTx(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)ln(l=1keθkTx(i)eθkTx(i)) 越大越好。总共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)}}}l=1keθkTx(i)eθkTx(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)ln(l=1keθkTx(i)eθkTx(i)) 为负数,取相反数后, 的值为正,便得上面的J(θ)。
所以,我们期望的是 J(θ)J(θ)J(θ) 越小越好,所以我们可以令 J(θ)J(θ)J(θ) 为损失函数。

梯度下降法求解
∂∂θjJ(θ)=∂∂θj−I(y(i)=j)ln⁡(eθkTx(i)∑l=1keθkTx(i))=∂∂θj−I(y(i)=j)ln⁡(θjTx(i)−ln⁡(∑l=1keθlTx(i)))=−I(y(i)=j)(1−eθ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} θjJ(θ)=θjI(y(i)=j)ln(l=1keθkTx(i)eθkTx(i))=θjI(y(i)=j)ln(θjTx(i)ln(l=1keθlTx(i)))=I(y(i)=j)(1l=1keθkTx(i)eθkTx(i))x(i)

所以对于批量或随机梯度下降有以下式子:
θj=θj+α∑i=1mI(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=1mI(y(i)=j)(1p(y(i)=jx(i);θ))x(i)=θj+αI(y(i)=j)(1p(y(i)=jx(i);θ))x(i)

逻辑回归在真正的二分类中,效果还是可以的,但它不适合多分类,虽然softmax可以做,但实际应用中,对于多分类很少用softmax。但有两点需要注意

  • softmax和其他多分类的求解方式很不一样。其他多分类要构建很多个模型,而softmax只构建一个。
  • softmax属于各类别的概率都算出来,以最大的为标准,和深度学习最一个隐层的功能非常类似。所以深度学习最后一层是softmax
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐