训练分类器为什么要用cross entropy loss(交叉熵损失函数)而不能用mean square error loss(MSE,最小平方差损失函数)?_为什么分类用交叉熵不用mae-程序员宅基地

技术标签: 深度学习  TensorFlow学习笔记  TensorFlow  

在一个人工智能群里,有人问起,训练分类器为什么要用cross entropy loss(交叉熵损失函数)而不能用mean square error loss(MSE,最小平方差损失函数)呢?

正好,在我的那本《深度学习之美》(第11章)提及这个问题,于是复制了一部分内容,作为回答,群里的同学觉得通俗易懂,于是,把我的回答贴到这里,算是一个总结:

---------

对于多分类的标签(即教师信号),从本质上看,通过One-hot操作,就是把具体的标签(Label)空间,变换到一个概率测度空间(设为 p),如[1,0,0](表示它是第一个品类)。可以这样理解这个概率,如果标签分类的标量输出为1(即概率为100%),其它值为0(即概率为0%)。


而对于多分类问题,在Softmax函数的“加工”下,神经网络的实际输出值就是一个概率向量,如[0.96, 0.04, 0],设其概率分布为q。现在我们想衡量p和q之间的差异(即损失),一种简单粗暴的方式,自然是可以比较p和q的差值,如MSE(不过效果不好而已)[1]。

一种更好的方式是衡量这二者的概率分布的差异,就是交叉熵,因为它的设计初衷,就是要衡量两个概率分布之间的差异。


图1  Softmax输出层示意图

为什么要用softmax一下呢?exp函数是单调递增的,它能很好地模拟max的行为,而且它能让“大者更大”。其背后的潜台词则是让“小者更小”,这个有点类似“马太效应”,强者愈强、弱者愈弱。这个特性,对于分类来说尤为重要,它能让学习效率更高。


举例来说,在图1中,原始的分类分数(或者说特征值)是[4, 1, -2],其中“4”和“1”的差值看起来没有那么大,但经过Softmax“渲染”之后,前者的分类概率接近于96%,而后者则仅在4%左右。而分值为“-2”的概率就“更惨”了,直接趋近于0。这正是Softmax回归的魅力所在。

这样一来,分类标签可以看做是概率分布(由one-hot变换而来),神经网络输出(经过softmax加工)也是一个概率分布,现在想衡量二者的差异(即损失),自然用交叉熵最好了。

参考文献:

[1] Golik P, Doetsch P, Ney H. Cross-Entropy vs. Squared Error Training: a Theoretical and Experimental Comparison[C]// Interspeech. 2013:1756-1760.


节选自 张玉宏 《深度学习之美》第11章,电子工业出版社,博文视点,2018年6月出版

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yhily2008/article/details/80261953

智能推荐

Learning and Using Jakarta Digester-程序员宅基地

文章浏览阅读601次。今天有空再度学习Struts1.3.9的源码,感觉对org.apache.commons.digester.Digester的认识还很少,上网看了一篇文章讲的比较好,特此转载! 文章出处:http://www.onjava.com/pub/a/onjava/2002/10/23/digester.html?page=1 文章中的案例解释: //生成一个digester。主要

自己封装的文件服务苹果手机无法播放视频-程序员宅基地

文章浏览阅读370次。自己封装的文件服务苹果手机无法播放视频

网鼎杯第四场 shenyue2 writeup_ctf shenyue2-程序员宅基地

文章浏览阅读987次。1. shenyue2题目分析这是一道RSA相关的密码学题目,给出了RSA相关的公钥(n,e)(n,e)(n,e),并且给出了额外的两个参数:一个已知素数rrr以及kkk,并且有如下关系: k=(p−r)dk=(p−r)dk=(p-r)d 其实这是一道2018 CodeGate CTF 的原题,直接按照CTF-WIKI中介绍的解法就可以求出来。而我写这篇文章的目的是向大家介绍另外一种方法,..._ctf shenyue2

将11.x.x升级至16.x.x不成功的一系列问题(二)node-sass sass-loader需安装指定版本_node-sass 升级-程序员宅基地

文章浏览阅读1k次,点赞20次,收藏20次。先根据node版本先锁定node-sass版本 然后再来回切换sass-loader版本 这玩应你就试吧 一试一个一个不吱声_node-sass 升级

python openpyxl ValueError: Value does not match pattern ^[$]?([A-Za-z]{1,3})[$]?(\d+)(:[$]?-程序员宅基地

文章浏览阅读6.7k次。这种问题是因为sheet名称有问题,一般是名字两边有空格?解决:新建一个sheet,然后查看代码,输进去这些,一运行就出来了Sub listSheetName()i = 1For Each sSheet In Application.SheetsCells(i, 1).Value = sSheet.Namei = i + 1NextsSheetEndSub获取到所有..._valueerror: value does not match pattern ^[$]?([a-za-z]{1,3})[$]?(\d+)(:[$]?

Linux 下 对‘pthread_create’未定义的引用_linux 中pthread_create()未定义-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏2次。pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a,在编译中要加-lpthreadgcc xxx.c.pp -lpthread 针对直接编译的target_link_libraries(thread libpthread.so) 针对cmake的这里thread是我的二进制文件..._linux 中pthread_create()未定义

随便推点

spring 自定义注解,动态注入Bean-程序员宅基地

文章浏览阅读5k次,点赞3次,收藏18次。文章目录背景ImportBeanDefinitionRegistrar1.定义注解2.启动注解3.实现接口4.扫描器5.使用Bean6.使用注解7.启动类总结背景@Configuration 注解的类会被spring自动的扫描注入为Bean,如果想自己定义一个注解实现相同的功能如何来实现ImportBeanDefinitionRegistrar熟悉spring源码的同学应该知道,注册bean实际上就是注册beandefinition这个类刚好有接口可以实现default void regis

Qt实现TCP网络通信_qt tcpserver-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏8次。用Qt实现TCP服务器与客户端的信息收发_qt tcpserver

【hbase】hbase使用MR统计行数指定yarn队列,及后续遇到的问题_org.apache.hadoop.hbase.mapreduce.rowcounter 增加参数-程序员宅基地

文章浏览阅读1.1k次。一、前言最近需要统计一张hbase表的条数,网上的很多案例都是使用MR的方式来进行统计,所以我们也采用这个方式。但是在实施过程中,遇到一些问题。使用MR去统计时,如果不指定队列,那么就会使用默认的YARN队列,而我们的默认队列是完全没有资源的。网上关于指定YARN队列的文章也比较少,这里整理并记录一下。二、准备这里我们使用 hbase.RowCounter包执行MR的任务。[hbase@bi-hadoop02 ~]$ hbase org.apache.hadoop.hbase.mapreduce_org.apache.hadoop.hbase.mapreduce.rowcounter 增加参数

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(me-程序员宅基地

文章浏览阅读1.8k次。FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas_failed: execution error, return code 1 from org.apache.hadoop.hive.ql.exec.d

python计算机毕设【附源码】医用仓库管理系统(django+mysql+论文)-程序员宅基地

文章浏览阅读518次,点赞6次,收藏10次。在数据库管理工具的选择上,使用了Navicat 11,这是一个用户友好且功能强大的数据库管理软件,它支持多种数据库系统,包括MySQL,并提供了图形化界面,使得数据库的管理和维护工作更加便捷。开发环境方面,我们选择了PyCharm作为主要的集成开发环境(IDE),它提供了丰富的Python开发工具和插件,支持Django框架,有助于提高开发效率和代码质量。此外,系统还可以记录操作人员的操作记录,便于追踪和审计。提高物资利用率:通过对医用物资的有效管理,可以避免物资的浪费和积压,提高物资利用率。

WIN10 LTSC 2019 安装新版Mircosoft Edge浏览器,解决无法安装问题_ltsc安装不了edge-程序员宅基地

文章浏览阅读1.8w次,点赞3次,收藏7次。WIN10 LSTC 2019 安装新版Mircosoft Edge浏览器,解决无法安装问题自己的笔记本一直使用WIN10 2019 LSTC(MSDN下载的)这一版本,因为这一版本真的太轻快简洁了,最近换电脑也是安装的Win10 LSTC 2019,但是安装完毕后在安装新版edge浏览器的时候提示系统版本低安装不了,自己的旧电脑就是LSTC却安装上,不知道什么原因,后来回想了一下旧电脑的使用过程并对新旧电脑的系统做了详细对比,发现是旧电脑上的系统补丁包版本高,而新电脑是刚安装的系统,补丁包还没有过升级_ltsc安装不了edge

推荐文章

热门文章

相关标签