前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉

一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉

作者头像
AI科技大本营
发布于 2018-07-23 09:51:56
发布于 2018-07-23 09:51:56
2.8K3
举报

作者 | 田思洋(北京科技大学在读博士生,主要研究方向图像识别,表面检测)

▌关于交叉熵在loss函数中使用的理解

交叉熵(cross entropy)是深度学习中常用的一个概念,一般用来求目标与预测值之间的差距。以前做一些分类问题的时候,没有过多的注意,直接调用现成的库,用起来也比较方便。最近开始研究起对抗生成网络(GANs),用到了交叉熵,发现自己对交叉熵的理解有些模糊,不够深入。遂花了几天的时间从头梳理了一下相关知识点,才算透彻的理解了,特地记录下来,以便日后查阅。

信息论

交叉熵是信息论中的一个概念,要想了解交叉熵的本质,需要先从最基本的概念讲起。

1 信息量

首先是信息量。假设我们听到了两件事,分别如下:

事件A:巴西队进入了2018世界杯决赛圈。

事件B:中国队进入了2018世界杯决赛圈。

仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。

假设X是一个离散型随机变量,其取值集合为χ,概率分布函数

,定义事件

的信息量为:

由于是概率所以

的取值范围是[0,1],绘制为图形如下:

可见该函数符合我们对信息量的直觉

2 熵

考虑另一个问题,对于某个事件,有n种可能性,每一种可能性都有一个概率p(xi)。

这样就可以计算出某一种可能性的信息量。举一个例子,假设你拿出了你的电脑,按下开关,会有三种可能性,下表列出了每一种可能的概率及其对应的信息量

注:文中的对数均为自然对数

我们现在有了信息量的定义,而熵用来表示所有信息量的期望,即:

其中n代表所有的n种可能性,所以上面的问题结果就是

然而有一类比较特殊的问题,比如投掷硬币只有两种可能,字朝上或花朝上。买彩票只有两种可能,中奖或不中奖。我们称之为0-1分布问题(也叫二项分布),对于这类问题,熵的计算方法可以简化为如下算式:

3 相对熵(KL散度)

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异

维基百科对相对熵的定义

In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.

即如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。

在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]

直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。

KL散度的计算公式:

(3.1)

n为事件的所有可能性。

DKL的值越小,表示q分布和p分布越接近。

4 交叉熵

对式3.1变形可以得到:

等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:

在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即

,由于KL散度中的前一部分

不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用交叉熵做loss,评估模型。

▌机器学习中交叉熵的应用

1 为什么要用交叉熵做loss函数?

在逻辑回归问题中,常常使用MSE(Mean Squared Error)作为loss函数,比如:

这里的m表示m个样本的,loss为m个样本的loss均值。

MSE在逻辑回归问题中比较好用,那么在分类问题中还是如此么?

让我们来看一下不同loss的函数曲线:

首先所有节点输出都用的softmax

分别拿一个样本来做示例,首先是使用MSE的loss

其中

都是常数,loss简化为:

,

绘图如下

显然,这个函数是非凸的,对优化问题来讲,不太好优化,容易陷入局部极值点。

再来看使用交叉熵的loss

由于one-hot标签的特殊性,一个1,剩下全是0,loss可以简化为:

绘制曲线如下:

曲线是一个凸函数,自变量的取值范围是[0,1]。凸函数便于梯度下降反向传播,便于优化。所以一般针对分类问题采用交叉熵作为loss函数

2 交叉熵在单分类问题中的使用

这里的单类别是指,每一张图像样本只能有一个类别,比如只能是狗或只能是猫。

交叉熵在单分类问题上基本是标配的方法

上式为一张样本的loss计算方法。式2.1中n代表着n种类别。

举例说明,比如有如下样本

对应的标签和预测值

那么

对应一个batch的loss就是

m为当前batch的样本数

3 交叉熵在多分类问题中的使用

这里的多类别是指,每一张图像样本可以有多个类别,比如同时包含一只猫和一只狗。

和单分类问题的标签不同,多分类的标签是n-hot。

比如下面这张样本图,即有青蛙,又有老鼠,所以是一个多分类问题。

对应的标签和预测值

值得注意的是,这里的Pred不再是通过softmax计算的了,这里采用的是sigmoid。将每一个节点的输出归一化到[0,1]之间。所有Pred值的和也不再为1。换句话说,就是每一个Label都是独立分布的,相互之间没有影响。所以交叉熵在这里是单独对每一个节点进行计算,每一个节点只有两种可能值,所以是一个二项分布。前面说过对于二项分布这种特殊的分布,熵的计算可以进行简化。

同样的,交叉熵的计算也可以简化,即

注意,上式只是针对一个节点的计算公式。这一点一定要和单分类loss区分开来。

例子中可以计算为:

单张样本的loss即为loss=loss猫+loss蛙+loss鼠

每一个batch的loss就是:

式中m为当前batch中的样本量,n为类别数。

▌总结

路漫漫,要学的东西还有很多啊。

参考:

  • https://www.zhihu.com/question/65288314/answer/244557337
  • https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
  • https://jamesmccaffrey.wordpress.com/2013/11/05/why-you-should-use-cross-entropy-error-instead-of-classification-error-or-mean-squared-error-for-neural-network-classifier-training/

来源:田思洋的CSDN博客 https://blog.csdn.net/tsyccnh/article/details/79163834 作者GitHub地址: https://github.com/tsycnh

——【完】——

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
3 条评论
热度
最新
配置文件不知道在哪
配置文件不知道在哪
11点赞举报
我好几年前的文章了。吓得我赶紧给你回复下 `/etc/nginx`
我好几年前的文章了。吓得我赶紧给你回复下 `/etc/nginx`
回复回复点赞举报
好兄弟,怎么改配置文件呢?
好兄弟,怎么改配置文件呢?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
CentOS 7安装Nginx简明教程
配置Nginx仓库 执行命令: vi /etc/yum.repos.d/nginx.repo 添加如下内容: [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1 更新仓库索引并安装Nginx yum update yum install nginx 开机启动Nginx systemctl enable nginx 启动Nginx sudo
DevOps持续交付
2021/01/28
3360
centos8.0下安装Nginx1.17.1
#安装yum工具包 sudo yum install yum-utils #构建链接 vim /etc/yum.repos.d/nginx.repo # i 进入insert状态 # 把下面内容复制粘贴进去 [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/key
诡途
2022/05/09
1510
centos8.0下安装Nginx1.17.1
Ngin服务学习(3)-yum安装ngi
cat /etc/redhat-release 查看系统版本 uname -a 查看系统内核详情
py3study
2020/01/17
4290
centos7安装Lnmp(Linux+Nginx+MySql+Php)及Apache
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx是一个高性能的HTTP和反向代理服务器,Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,我们学习PHP,以及搭建我们自己的LNMP环境,不妨先在本机上尝试学习,下面我们一步一步来完成在CentOS7 下安装LNMP(Linux+Nginx+MySQL+PHP)及Apache。
botkenni
2019/09/03
1.5K0
centos7安装Lnmp(Linux+Nginx+MySql+Php)及Apache
搭建Ghost博客详细教程之Ghost安装与部署
yum groupinstall "Development Tools" #安装开发工具包
Bug生活2048
2018/08/31
3.1K0
搭建Ghost博客详细教程之Ghost安装与部署
CentOS 7下 yum方式安装Nginx
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有众多非常优越的特性。诸如低开销,高并发,支持缓存,支持正反向代理,支持负载均衡,支持正则,支持rewrite等等不一而足。所以众多粉丝们也是不计其数。本文基于CentOS 7简要描述yum方式的安装部署,供大家参考。
Leshami
2018/08/06
5370
CentOS 7下 yum方式安装Nginx
什么是yum源?如何对其进行配置?
哈喽,大家好呀!这里是码农后端。今天来聊一聊Linux下的yum源及其配置相关的内容。简单来说,yum源就相当于一个管理软件的工具,可以想象成一个很大的仓库,里面存放着各种我们所需要的软件包及其依赖。
reload
2024/06/25
6810
什么是yum源?如何对其进行配置?
Linux安装nginx
指剑
2023/05/31
1.4K0
Linux安装nginx
Linux下使用yum安装LNMP环境
如何使用yum搭建有需求的LNMP环境 本人使用的是centos7系统,就以centos7的系统搭建为例 Nginx安装 下载/安装步骤:http://nginx.org/en/linux_packages.html#stable 创建/编辑文件:vi /etc/yum.repos.d/nginx.repo 编辑内容:OS代表系统 OSRELEASE 代表系统版本号 [nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/O
北溟有鱼QAQ
2019/12/18
3.1K0
修改软件默认源为腾讯源
pip install 走公网到files.pythonhosted.org 跨境质量差,用内网源没问题
Windows技术交流
2020/07/16
13.7K2
第十四章·Linux软件管理-YUM工具及源码包
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
7850
第十四章·Linux软件管理-YUM工具及源码包
Nginx:nginx在centos下的安装及网关配置
Freedom123
2024/03/29
3410
Centos7 mini 配置 php7+nginx+mysql 最详细过程,为linux小白送福利
本来不想写这篇的,因为网上都有,但是最近问关于这些环境配置的朋友有点多,于是整理一番,全部都是本人实战验证过的。
躺平程序员老修
2023/09/05
4710
Centos7 mini 配置 php7+nginx+mysql 最详细过程,为linux小白送福利
Centos7安装Nginx详细安装步骤
说明:centos系统中默认的yum仓库中没有nginx的安装包, 所以要想安装nginx需要单独指定它的仓库地址
全栈程序员站长
2022/08/13
4.8K0
Centos7安装Nginx详细安装步骤
CentOS7系统Yum安装Nginx
配置Nginx源 cat >/etc/yum.repos.d/nginx.repo<<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainlin
院长技术
2020/12/10
7130
SSH服务搭建之YUM源配置与静态IP配置
哈喽,大家好呀!这里是码农后端。一般我们在搭建服务之前,都需要做一些准备工作,如实验环境下关闭防火墙和selinux、配置yum源等等。本篇介绍了SSH服务搭建之YUM源配置与静态IP配置。
reload
2024/07/04
1670
SSH服务搭建之YUM源配置与静态IP配置
CentOS使用yum安装Nginx
如何在CentOS安装Nginx,在网上搜了一圈,大部分都是下载源代码进行编译,感觉不太方便。查看了一下官方文档,其实官方是有提供安装源的。
Mr. Wei
2021/01/16
1.4K0
Yum安装nginx
1、先下载前置包 yum install yum-utils 报错的话看最下边 2、进入文件配置信息 cd /etc/yum.repos.d/ vim nginx.repo 输入以下信息 [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_sig
高大北
2022/06/14
5.3K0
Yum安装nginx
CentOS7安装elk,并监控Nginx的access.log日志
详细安装java参考https://www.cnblogs.com/sxdcgaq8080/p/7492426.html
院长技术
2020/08/20
1K0
在Centos7.3搭建Yum私有仓库
使用本地iso镜像创建本地yum仓库,该方法不推荐,只针对yum服务器无法上公网的环境下操作,毕竟iso镜像里的包非常有限。
菲宇
2019/06/12
2.1K0
在Centos7.3搭建Yum私有仓库
相关推荐
CentOS 7安装Nginx简明教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档