之前讲了一下逻辑回归,主要是用于二分类的。对于多分类的问题,我们可以用softmax回归。逻辑回归使用的是sigmoid函数,将wx+b的值映射到(0, 1)的区间,输出的结果为样本标签等于1的概率值;而softmax回归采用的是softmax函数,将wx+b的值映射到[0, 1]的区间,输出的结果为一个向量,向量里的值为样本属于每个标签的概率值.
我们先来看一下softmax函数,它将非标准化的输入, 归一化为概率分布,所以
。指数函数将
的值映射到
,
为归一化常数。
softmax建模使用的分布是分类分布,当仅有两种类别时就是伯努利分布,也就是logistic所使用的分布。
下面我们来看一下softmax回归。
为了对应输出的结果为一个向量,需要对样本的标签值要进行one-hot编码。例如,现在有三类样本,分别为红,绿和蓝。假设样本x的标签为红,进行one-hot编码以后该样本的标签就为[1,0,0],一个长度等于类别数目,只有该样本所对应的标签为1,其他类别标签都为0的向量.
假设函数:
为模型参数,一共有k个类别。其中每一
为一个向量,表示的类别等于 j 时的每个特征分量的权重。
对数损失函数 :
为指示函数,当样本的标签等于要计算的标签时为1,否则为0。
采用梯度下降法跟新参数,对参数求偏导:
这时,softmax回归在求解参数时最小化的解不止一个。 假设我们从参数向量 中减去了向量
,这时,每一个
都变成了
(
)。此时假设函数变成了以下的式子:
从上面的推导,我们可以看到推导出的结果和原来参数未减去
的结果是相等的(见红方框)。换句话说,从
中减去
完全不影响假设函数的预测结果。这表明此时的softmax回归模型中存在冗余的参数。更正式一点来说,softmax模型被过度参数化了。对于任意一个用于拟合数据的假设函数,可以求出多组参数值,这些参数得到的是完全相同的假设函数。
进一步而言,如果参数是损失函数的极小值,那么
同样也是它的极小值点,其中
可以是任意向量。因此是损失函数最小化的解不是唯一的。感觉这个和SVM里面的函数间隔很像,函数间隔可以对参数成比例的变化,但是得到的超平面并没有变。(有趣的是,由于损失函数仍然是一个凸函数,因此梯度下降时不会遇到局部最优解的问题。但是Hessian矩阵是不可逆的,这会直接导致采用牛顿优化就遇到数值计算的问题)
为了解决这个问题,可以添加权重衰减项来约束参数, n为样本的维度,k为样本的类别数,感觉这个就是L2正则化,所以还可以防止过拟合。加了权重衰减项以后的对数损失函数为:
这个时候损失函数为严格的凸函数,可以保证收敛到全局的最优解。
对参数求偏导:
然后使用梯度下降法迭代求解参数。
其实在做多分类是也可以使用oneVSall方法,建立多个独立的逻辑回归模型。但这两中方法在使用场景下有些许区别。
softmax回归:适用于样本的标签互斥的情况。比如,样本的标签为,房子,小车和自行车,这三类之间是没有关系的。样本只能是属于其中一个标签。
逻辑回归:使用于样本的标签有重叠的情况。比如:外套,大衣和毛衣,一件衣服可以即属于大衣,由属于外套。这个时候就需要三个独立的逻辑回归模型。
参考链接:http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92