一般情况下,我们都认为逻辑回归(LR)用来解决二分类问题,BCE损失函数也是用来解决二分类问题的,那逻辑回归以及BCE损失函数能否用来做多分类任务呢,答案是肯定的。有两种方法
一、将多分类任务拆解成多个二分类任务;
二、对传统的逻辑回归模型进行改造,使之变为softmax回归模型进行多分类任务求解(也就是sklearn中逻辑回归的multi_class=‘multinomial’), 我们可以认为多元逻辑回归就是sofmax回归
- 多分类任务拆解成多个二分类器
将多分类任务拆为多个二分类任务求解,一般有3种拆分策略:
1. OvO(一对一,One vs One):假如数据D中有N个类别,将N个类别进行两两配对,产生N(N-1)/2个二分类器,在预测中,将测试样本输入这N(N-1)/2个二分类器中得到相应个数的预测结果,然后再将被预测结果数最多的(Voting)作为最终分类结果。
2. OvR(一对其余,One vs Rest): 将一个类别作为正例,其余所有类别作为反例,这样N个类别可以产生N个二分类器,将测试样本输入这些二分类器中中得到N个预测结果,如果仅有一个分类器预测为正类,则将对应的预测结果作为最终预测结果。如果有多个分类器预测为正类,则选择置信度最大的类别作为最终分类结果。
3. MvM(多对多,Many vs Many):将数据集中的若干个类作为正例,若干个其他类作为反例。MvM的正、反类构造必须有特殊的设计,而不是随意选取,通常采用“纠错输出码(ECOC)”,产生编码矩阵后划分类别。 - sigmoid->softmax
如上图,softmax各类互斥,概率和为1,形式为(0.7,0.2,0.1)
深度学习框架中的交叉熵损失
一些结论:
- 多项逻辑回归就是sofmax回归
- sofmax回归参数的极大似然估计等价于最小化负对数似然函数
- 损失函数就是负对数似然函数
caffe中的softmaxWithLoss
Softmax Layer 接 Multinomial Logistic Loss Layer(负对数似然损失函数)
pytorch的nn.CrossEntropyLoss == caffe的softmaxWithLoss
log_sofmax 接 nn.NLLLoss
pytorch的nn.NLLLoss == caffe的Multinomial Logistic Loss Layer
负对数似然损失 Negative Log Liklihood loss
softmax回归的 的MLE估计,等价于优化负对数似然损失函数求得的参数;一般用这个损失函数,前面需要添加softmax层
pytorch的nn.BCELoss(二分类)
二类交叉熵损失,就是-Σy_i*log(p_i)
pytorch的nn.BCEWithLogitsLoss()(二分类)
sigmoid+BCEloss