Softmax简介
记得之前做过的logistic regression的练习是一个二类分类的问题,模型的假设函数是
这个函数判断给定的x在当前的模型theta下被预测为1的概率,显然预测为0的概率就是1减去预测为1的概率即可。LR实际上就是在训练数据中的空间中找一条超平面把正负样本分开,与感知机、SVM(支持向量机)也有点类似,但是损失函数是不一样的。LR的损失函数为
LR也可以被扩展到多类分类问题,此时变为Softmax Regression问题,训练数据的类别属于1,2,...,k。这时有k个模型分别预测训练数据属于那个类别的概率。
模型theta为:
损失函数
我们知道LR的损失函数为:
扩展到Softmax Regression的损失函数为(交叉熵或者可看成是根据最大似然推出来的):
对损失函数J求导是关键的一步,求导结果如下(这个要自己动手推一推):
从求导结果我们可以大概看出,假设只有一个样本时,如果样本类别为j,则括号里面的指示函数为真,值为1,减去在当前模型theta下属于类j的概率,如果theta_j与其它theta_k (k!=j)相比较小,计算出的p就相对较小,则对theta_j的梯度就较小(为负数,theta_j越小,该负数越小),而对其它theta_k的p较大,梯度就较大(正数,theta_k越大,该正数越大),然后进行梯度更新时,由于是加上负梯度,所以theta_j就变大,theta_k变小了,这样就往正确结果走进了一步。(应该不是theta_j变大,而是theta_j*x变大,这样模型就能以更大的概率产生数据了,只要根据梯度更新规则:theta_j=theta_j+(1-p_j)*x,两边同时乘x,由于(1-p_j)*x*x>0,这样theta_j*x就变大了,同理,其它的theta_k*x就变小了)
Softmax Regression有一个特点就是冗余的参数集,表现如下:
说明theta被过度参数化了,每个theta_i减去同样的一个数后,都是得到相同的模型,说明最优解不唯一。但是由于J(theta)仍然是一个凸函数,所以梯度下降法求解是能得到全局最优解的,所以可能是在最优解处是平坦的,但是用牛顿法就会遇到问题了,因为hessen矩阵是奇异的(不可逆)。
加入权重衰减后的模型为:
求导函数变为:
当k=2时,Softmax回归可以退化为Logistic回归:
那么什么时候该用Softmax回归,又什么时候该用Logistc回归呢?当类别是严格互斥时用Softmax回归,当不是严格互斥,即某些数据可能属于多个类别时就用Logistic回归。
参考:
http://blog.csdn.net/freeliao/article/details/18447757
http://ufldl.stanford.edu/wiki/index.php/Softmax_Regression