损失函数——交叉熵损失函数(CrossEntropy Loss)

交叉熵函数为在处理分类问题中常用的一种损失函数,其具体公式为:

1.交叉熵损失函数由来

交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性。首先我们来了解几个概念。

1.1信息量

信息论奠基人香农(Shannon)认为“信息是用来消除随机不确定性的东西”。也就是说衡量信息量大小就看这个信息消除不确定性的程度。

“太阳从东方升起了”这条信息没有减少不确定性。因为太阳肯定从东面升起。这是句废话,信息量为0。

“六月份下雪了”,这条信息就比较有价值,根据历史统计信息来看,六月份鲜有下雪记录,可知该语句信息量较大。

从上面两个例子可以看出:信息量的大小和事件发生的概率成反比。

由此引出信息量的表示:

其中P(x)表示为, 时间x的发生概率,这里可能会有质疑,我们知道信息量的大小和事件发生的概率成反比,函数形式为减函数,为什么要表现为对数形式呢

这里我们需要了解信息量得三个性质:

1.事件发生的概率越低,信息量越大;

2.事件发生的概率越高,信息量越低;

3.多个事件同时发生的概率是多个事件概率相乘,总信息量是多个事件信息量相加。

根据性质3,可以知道使用对数形式可以满足性质需求,因此为表现该形式。

1.2 信息熵

信息量度量的是一个具体事件发生所带来的信息,而信息熵则是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。

因此我们可以得到其表现公式为:

其中P(x)表示为, 时间x的发生概率

总而言之,信息熵是用来衡量事物不确定性的。信息熵越大,事物越具不确定性,事物越复杂。

1.3 相对熵

相对熵(relative entropy),又被称为Kullback-Leibler散度(KL散度)或信息散度(information divergence),是两个概率分布(probability distribution)间差异的非对称性度量 。在信息理论中,相对熵等价于两个概率分布的信息(Shannon entropy)的差值 。

可以理解为对于同一个随机变量x,有两个概率分布,判断这两个概率分布得差异。假设两个概率分布对应为p(x),q(x), 如何表示这两个分布得差异,我们可以使用信息熵判断,于是相对熵产生。

p(x)分布的信息熵为:

q(x)分布的信息熵为:

相对熵为:

p(x)为样本真实分布,q(x)为预测分布

于是得到相对熵(KL散度)公式为:

KL散度越小,表示P(x) 与Q(x)的分布更加接近,可以通过反复训练Q (x)来使Q (x) 的分布逼近P(x)。

1.4 交叉熵

交叉熵的函数表示为:

我们观察可以看出,这里与相对熵(KL散度)较为相似,个人认为交叉熵为相对熵(KL散度)的变体,由于我们进行模型训练,有监督训练,样本标签已经确定,相当于真实的概率的分布P(x)已经得知,因此这边的固定值,相当于常量

在我们模型训练中:

相对熵(KL散度)变为:

对于其做为损失函数,常量可以忽略,因此得到了交叉熵的表现形式。

2. 交叉熵损失函数应用与实现

2.1 交叉熵损失函数二分类中应用

对于在二分类损失函数中应用,交叉熵损失函数为以下形式。

2.2 交叉熵损失函数实现

在具体在Python中的实现如下:

# tensorflow version
loss = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y), reduction_indices=[1]))# numpy version
loss = np.mean(-np.sum(y_*np.log(y), axis=1))# pytorch version
entroy=nn.CrossEntropyLoss()
output = entroy(input, target)

3 总结

  • 交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。

  • 交叉熵的值越小,模型预测效果就越好。

  • 交叉熵经常搭配softmax使用,将输出的结果进行处理,使其多个分类的预测值和为1,再通过交叉熵来计算损失。

参考

[1] https://blog.csdn.net/b1055077005/article/details/100152102

[2] https://zhuanlan.zhihu.com/p/74075915

[3] https://zhuanlan.zhihu.com/p/70804197

[4] https://blog.csdn.net/francislucien2017/article/details/86763319

[5]https://blog.csdn.net/dog250/article/details/79081043

损失函数——交叉熵损失函数(CrossEntropy Loss)相关推荐

  1. 【转载】损失函数 - 交叉熵损失函数

    MSE 转载自:损失函数 - MSE[1] 数理统计中均方误差是指参数估计值与参数值之差平方的期望值,记为MSE.MSE是衡量"平均误差"的一种较方便的方法,MSE可以评价数据的变 ...

  2. 损失函数 -交叉熵损失函数

    参考文献: 1)https://zhuanlan.zhihu.com/p/35709485 2)https://jackon.me/posts/why-use-cross-entropy-error- ...

  3. 损失函数——交叉熵损失函数

    交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式.与二次代价函数相比,它能更有效地促进ANN的训练.在介绍交叉熵代价函 ...

  4. 损失函数 - 交叉熵损失函数

    Cross Entropy Error Function(交叉熵损失函数) 例子 表达式 函数性质 学习过程 优缺点 这篇文章中,讨论的Cross Entropy损失函数常用于分类问题中,但是为什么它 ...

  5. 机器学习--- 交叉熵损失(CrossEntropy Loss)--(附代码)

    文章目录 一. Softmax 介绍 1.1 Softmax 的形式 1.2 一些问题 1.2.1 为什么训练阶段需要 Softmax 层?推理阶段通常不使用 Softmax 层? 二.交叉熵损失(C ...

  6. 人脸识别-Loss-2010:Softmax Loss(Softmax激活函数 + “交叉熵损失函数”)【样本3真实标签为c_5,则样本3的损失:loss_3=-log(\hat{y}_5^3)】

    一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等. 全连接层:等号左边部分就是全连接层做的事, W W W 是全连接层的参数,我们也称为权值, X X X 是全连接层的输 ...

  7. sigmoid函数求导_交叉熵损失函数的求导(Logistic回归)

    目录 前言 交叉熵损失函数 交叉熵损失函数的求导 前言 最近有遇到些同学找我讨论sigmoid训练多标签或者用在目标检测中的问题,我想写一些他们的东西,想到以前的博客里躺着这篇文章(2015年读研时机 ...

  8. 【交叉熵损失函数】关于交叉熵损失函数的一些理解

    目录 0. 前言 1.损失函数(Loss Function) 1.1 损失项 1.2 正则化项 2. 交叉熵损失函数 2.1 softmax 2.2 交叉熵 0. 前言 有段时间没写博客了,前段时间主 ...

  9. python交叉熵损失函数实现_Softmax和交叉熵的深度解析和Python实现

    原标题:Softmax和交叉熵的深度解析和Python实现 作者 | PARAS DAHAL 译者 | zzq [导读]如果你稍微了解一点深度学习的知识或者看过深度学习的在线课程,你就一定知道最基础的 ...

最新文章

  1. Java 定时任务调度工具 Quartz(Part 2)
  2. 几种常用的优化方法梯度下降法、牛顿法、)
  3. php 跨域web访问权限,php:跨域 Web程序 - 贪吃蛇学院-专业IT技术平台
  4. html改元素怎么保存,是否可以在NW.js中保存html元素更改?
  5. 作者:刘岩(1982-),男,泰康保险集团股份有限公司数据信息中心高级工程师、高级主管,中国计算机学会会员...
  6. 计算SharePoint两个日期和时间字段之间的时间差值
  7. java堆是gc管理_JVM内存管理及GC机制
  8. 【DFS】LeetCode 51. N-Queens
  9. nginx负载均衡算法
  10. Vim 配置详解_wuyang
  11. 03-4 BGP 默认路由/MED
  12. 数据结构1800题-错题集-第二章
  13. 如何禁止树莓派屏幕休眠
  14. 思岚雷达A2在Linux下的使用教程
  15. conda 安装完了之后安装torch总是失败
  16. 阿里巴巴大数据之路-维度设计
  17. 钢铁侠材质制作——2、线条轮廓部分的制作
  18. android 程序中设置默认输入法
  19. flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕功能
  20. Vue小demo—美团注册页面

热门文章

  1. 基于微信小程序公司企业站系统 系统的设计与实现 开题报告和效果图
  2. Avro的java实现
  3. flume avro java_flume avro 程序报错
  4. uniapp垂直滚动公告栏,可上下拖动内容
  5. 【人工智能】LLM 大型语言模型和 Transformer 架构简介
  6. 蔬菜配送APP开发基本功能
  7. 使用PDF24Tools工具怎么将Word文档转化成PDF文件?
  8. 数据库 oracle function 替换身份证中间字符
  9. CentOS安装 Jdk8
  10. 凤凰新媒体股价暴涨,会重演微博、陌陌们的奇迹吗?