softmax函数、交叉熵损失函数与多分类问题
Softmax函数
在多分类问题中,需要计算当前输入属于每一个类别的概率,同时保证这些概率之和为1,可通过Softmax函数实现。假设当前的输入为Vi,则经过Softmax函数的输出为

为扩大不同输入之间的差距,输入通过Softmax函数时会进行指数化处理。
如下图所示,Softmax函数对输入进行的处理可视化为

对于多组数据来说,softmax所做的是将一个矩阵内不同的输入分别计算概率,如下图所示

交叉熵损失函数
假设有一个三分类问题,一共三组测试数据,现使用两个模型对数据进行处理,结果如下表所示
模型一
| 数据编号 | 预测结果 | 真实标签 | 是否正确 |
| 1 | 0.3,0.3,0.4 | 0,0,1 | 正确 |
| 2 | 0.3,0.4,0.3 | 0,1,0 | 正确 |
| 3 | 0.1,0.2,0.7 | 1,0,0 | 错误 |
模型二
| 数据编号 | 预测结果 | 真实标签 | 是否正确 |
| 1 | 0.1,0.2,0.7 | 0,0,1 | 正确 |
| 2 | 0.1,0.7,0.2 | 0,1,0 | 正确 |
| 3 | 0.4,0.3,0.3 | 1,0,0 | 错误 |
对于预测结果来说,模型一的预测结果确定性较差,组内区分度低,而模型二的预测结果具有较好的组内区分度,但两个模型的准确率确实一样的,都为2/3。实际上模型二的性能要由于模型一,这就需要一个损失函数,能够反映上述情况下不同模型的好坏差异,交叉熵损失函数可以解决这个问题。
交叉熵的计算如下
![]()
其中:
- p(真实的标签),即0或1,正确的label为1,反之为0;
- q(预测的概率),即模型预测的概率(经过softmax或sigmoid),(0, 1)区间内的数字。
q为(0, 1)区间上的数字,经过log后为负数,故在损失函数的公式前有一个负号。如果模型对于正确的标签给出的预测概率越大,则损失函数的值就越小(如 log(0.5) = -0.69, log(0.99) = -0.01),即不需要对模型进行太大的调整,模型已经可以胜任部分任务。所以损失可以定义为

其中:
- M为总的样本数量;
- y为实际标签,为one-hot编码格式(下有注解);
- p为模型输出的概率。
在实际中,y只有0和1两种取值,所以负对数似然(negative log-likelihood)可以化简为下面的式子
![]()
-- one-hot编码
one-hot编码又称为一位有效编码,主要采用N位状态寄存器对N个状态进行编码,每个状态都有他独立的寄存器位,且在任意时候只有一位有效。
one-hot编码是分类变量作为二进制向量的表示,是将类别变量转换为机器学习算法易于利用的形式的过程。


浙公网安备 33010602011771号