2. 交叉熵的来源

2.1 信息量

一条信息的信息量大小和它的不确定性有很大的关系。一句话如果需要很多外部信息才能确定,我们就称这句话的信息量比较大。比如你听到“云南西双版纳下雪了”,那你需要去看天气预报、问当地人等等查证(因为云南西双版纳从没下过雪)。相反,如果和你说“人一天要吃三顿饭”,那这条信息的信息量就很小,因为条信息的确定性很高。

那我们就能将事件x_0的信息量定义如下(其中p(x_0)表示事件x_0发生的概率):

概率总是一个0-1之间的值,-log(x)的图像如上

2.2 熵

信息量是对于单个事件来说的,但是实际情况一个随机变量有很多种发生的可能,比如掷骰子有可能出现6种情况,明天的天气可能晴、多云或者下雨等等。熵是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。公式如下:

n表示事件可能发生的情况总数

其中一种比较特殊的情况就是掷硬币,只有正、反两种情况,该种情况(二项分布或者0-1分布)熵的计算可以简化如下:

p(x)代表掷正面的概率,1-p(x)则表示掷反面的概率(反之亦然)

2.3 相对熵

相对熵又称KL散度,用于衡量对于同一个随机变量x的两个分布p(x)和q(x)之间的差异。在机器学习中,p(x)常用于描述样本的真实分布,例如[1,0,0,0]表示样本属于第一类,而q(x)则常常用于表示预测的分布,例如[0.7,0.1,0.1,0.1]。显然使用q(x)来描述样本不如p(x)准确,q(x)需要不断地学习来拟合准确的分布p(x)。

KL散度的公式如下:

n表示事件可能发生的情况总数

KL散度的值越小表示两个分布越接近。

2.4 交叉熵

我们将KL散度的公式进行变形,得到:

前半部分就是p(x)的熵,后半部分就是我们的交叉熵:

机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数,其实二者是一样的。

3. 交叉熵作为loss函数的直觉

在回归问题中,我们常常使用均方误差(MSE)作为损失函数,其公式如下:

 注:对于一个样本,它的标签是一个one-hot标签例如如果是3分类任,一个是第0类的样本的标签是(0,0,1)

.+397

对于这个样本的一个得分是(2.0,1.0,0.1)经过softmax之后(0.7,0.2,0.1)

那么对于这个样本的交叉熵是

对于所有的样本就是加起来所有样本÷n

其实这里也比较好理解,因为回归问题要求拟合实际的值,通过MSE衡量预测值和实际值之间的误差,可以通过梯度下降的方法来优化。而不像分类问题,需要一系列的激活函数(sigmoid、softmax)来将预测值映射到0-1之间,这时候再使用MSE的时候就要好好掂量一下了,为啥这么说,请继续看:

假设经过线性预测之后使用了sigmoid,并且使用MSE作为模型好坏的度量

gradient推导过程

上面复杂的推导过程,其实结论就是下面一张图:

C是经过wx+b和sigmoid之后的值,a是预测值

从以上公式可以看出,w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w和b的大小调整得越快,训练收敛得就越快。而我们都知道sigmoid函数长这样:

图片来自:https://blog.csdn.net/u014313009/article/details/51043064

在上图的绿色部分,初始值是0.98,红色部分初始值是0.82,假如真实值是0。直观来看那么0.82下降的速度明显高于0.98,但是明明0.98的误差更大,这就导致了神经网络不能像人一样,误差越大,学习的越快。

 假如在分类问题中一个样本的真实值是1,预测的a是10此时导数很小接近0,无法对w更新从而使预测值下降缓慢

但是如果我们把MSE换成交叉熵会怎么样呢?

 对于每一个样本交叉熵损失是对于预测出的一个one-hots求l,q是one-hots的长度

重新计算梯度:

推导过程

结果的意思就是预测值与真实值的差距越大梯度下降越多

另外sigmoid有一个很好的性质:

我们从结果可以看出梯度中不再含有sigmoid的导数,有的是sigmoid的值和实际值之间的差,也就满足了我们之前所说的错误越大,下降的越快。

这也就是在分类问题中常用cross entropy 而不是 MSE

你是否有过疑问:为啥损失函数很多用的都是交叉熵(cross entropy)? - 云+社区 - 腾讯云

#############################################################################

sigmoid和softmax一个是二分类一个是多分类时,从而起到可以将线性的结果映射到(0,1)之间从而预测概率的作用。

同时在神经网络里,为了让多层感知机不退化为一个线性的,使用非线性的sigmiod这一非线性变化作为激活函数(当我们想要将输出视作二元分类问题的概率时, sigmoid仍然被广泛用作输出单元上的激活函数 (你可以将sigmoid视为softmax的特例)。 然而,sigmoid在隐藏层中已经较少使用, 它在大部分时候被更简单、更容易训练的ReLU所取代。 )

【李沐】softmax回归-1.使用交叉熵作为损失函数而不是MSE均方误差-(意思就是为什么经过了softmax之后不用MSE) 2.softmax与sigmoid相关推荐

  1. Softmax函数下的交叉熵损失含义与求导

    交叉熵损失函数(CrossEntropy Function)是分类任务中十分常用的损失函数,但若仅仅看它的形式,我们不容易直接靠直觉来感受它的正确性,因此我查阅资料写下本文,以求彻底搞懂. 1.Sof ...

  2. Keras【Deep Learning With Python】逻辑回归·softmax多分类与交叉熵

    文章目录 1 逻辑回归 1.2 Sigmod函数 1.2 逻辑回归损失函数 2 交叉熵 3 softmax分类 1 逻辑回归 回答0或1 1.2 Sigmod函数 0.9是好人 0.1是坏人 二分类 ...

  3. 交叉熵代价函数(损失函数)及其求导推导

    转自:http://blog.csdn.net/jasonzzj/article/details/52017438 前言 交叉熵损失函数 交叉熵损失函数的求导 前言 说明:本文只讨论Logistic回 ...

  4. 交叉熵代价函数(损失函数)及其求导推导 (Logistic Regression)

    目录 1. 前言 2. 交叉熵损失函数 3. 交叉熵损失函数的求导 前言 说明:本文只讨论Logistic回归的交叉熵,对Softmax回归的交叉熵类似(Logistic回归和Softmax回归两者本 ...

  5. 机器学习:什么是困惑度?从信息熵和交叉熵谈起

    一.前言 这片博客从信息论的角度解读信息熵.交叉熵和困惑度.有助于帮助在机器学习之路上理解相应的损失函数和评价指标.要了解交叉熵和困惑度是怎么计算的,以及为什么这样计算是有效的,我们需要从基础的信息量 ...

  6. 熵,交叉熵与softmax

    经常说交叉熵+softmax(或者交叉熵损失函数),应该是对多分类下,softmax作为最后一层输出,交叉熵再判断这softmax的概率和真实值之间的差异(感觉不对,应该是用softmax的公式去求交 ...

  7. 【TensorFlow系列二】经典损失函数(交叉熵、均方差)

    ↑ 点击上方[计算机视觉联盟]关注我们 1.交叉熵 交叉熵是分类问题中使用比较广的一种损失函数,刻画了两个概率分布之间的距离. 给定两个概率分布p和q,通过q来表示p的交叉熵为: 交叉熵刻画的是两个概 ...

  8. 【TensorFlow】TensorFlow从浅入深系列之六 -- 教你深入理解经典损失函数(交叉熵、均方误差)

    本文是<TensorFlow从浅入深>系列之第6篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  9. pytorch学习笔记(八):softmax回归的从零开始实现

    文章目录 1. 获取和读取数据 2. 初始化模型参数 3. 实现softmax运算 4. 定义模型 5. 定义损失函数 6. 计算分类准确率 7. 训练模型 8. 预测 9. 总代码 小结 这一节我们 ...

最新文章

  1. html5media.js 让浏览器兼容VideoAudio 标签
  2. 网易游戏2011.10.15校园招聘会笔试题
  3. php网站分享qq代码下载,HTML5QQ登录的一篇代码分享
  4. 【Python】@property的用法
  5. 产品经理有话说!这个报表神器更新了6大功能,绝对亮眼
  6. springboot的api_【粉丝投稿】无需额外注解的 SpringBoot API文档生成工具
  7. corosync配置与详解
  8. SVN报错 could not connect to server
  9. C++调用tensorflow训练好的SSD物体检测模型-opencv3.4.3
  10. java实现二分排序算法
  11. PHP输出100以内的质数(包括普通写法和数组形式输出)
  12. java split 字符串作为分隔符_Java 字符串分隔 split
  13. 计算机存储介质清除工具,天桥科技存储介质信息消除工具
  14. 图像数据的标准化与归一化
  15. 小甲鱼Python学习笔记之魔法方法
  16. vmware中Linux虚拟机的克隆
  17. WireShark抓包获取简书的登录密码
  18. Android 中的 AccountManager getAuthToken 问题
  19. MongoDB安装过程中出现service MongoDB failed to start,verify that you have sufficient privileges to start...
  20. [转]机器学习中距离和相似性度量分类体系

热门文章

  1. unity源码怎么变成游戏_小白入行游戏建模,怎么才能快速有效?从零基础变成有基础需要学哪些...
  2. 止鼻血6个妙招:白醋涂鼻腔有助止血
  3. iNFTnews丨NFT的影响力有多广?麦当娜、史泰龙和贝克汉姆这些老牌偶像进入了NFT、元宇宙的世界
  4. Docker入门级别笔记
  5. 读书笔记-后端性能测试工具
  6. 简述拥塞控制的四种基本算法
  7. 股票程序化交易如何理解自己的交易系统?
  8. tp5多图上传php,TP5框架实现上传多张图片的方法分析
  9. HBULIDER怎么和后台数据库进行链接获取数据
  10. 原来我依旧那么思念你