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编码是分类变量作为二进制向量的表示,是将类别变量转换为机器学习算法易于利用的形式的过程。

    

 

 

  

 

 

 

 

  

posted @   Liang-ml  阅读(794)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示