机器学习(回归八)——Softmax回归

前面博客说的是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
如果分子和分母不用指数的形式,直接 θ k T x θ_k^T x 作为分子, l = 1 K θ l T x \sum_{l=1}^Kθ_l^T x 作为分母,结果也是0到1之间的概率,为什么还要用指数形式呢?
因为:e为底的指数函数,当自变量大小1时,因变量变化是特别剧烈的。如 θ 1 x = 100 θ 2 x = 101 θ_1 x=100 ,θ_2 x=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}

损失函数
我们根据逻辑回归的损失函数,稍微变化一下
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)
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}

假如有一条样本 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) 属于 j 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)}}} 越大越好,也就是 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) 越大越好。总共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)}}} 取值是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) 为负数,取相反数后, 的值为正,便得上面的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 + α 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}

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

  • softmax和其他多分类的求解方式很不一样。其他多分类要构建很多个模型,而softmax只构建一个。
  • softmax属于各类别的概率都算出来,以最大的为标准,和深度学习最一个隐层的功能非常类似。所以深度学习最后一层是softmax
发布了119 篇原创文章 · 获赞 350 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/zhanglianhai555/article/details/104122220