【李沐】softmax回归-1.使用交叉熵作为损失函数而不是MSE均方误差-(意思就是为什么经过了softmax之后不用MSE) 2.softmax与sigmoid
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相关推荐
- Softmax函数下的交叉熵损失含义与求导
交叉熵损失函数(CrossEntropy Function)是分类任务中十分常用的损失函数,但若仅仅看它的形式,我们不容易直接靠直觉来感受它的正确性,因此我查阅资料写下本文,以求彻底搞懂. 1.Sof ...
- 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是坏人 二分类 ...
- 交叉熵代价函数(损失函数)及其求导推导
转自:http://blog.csdn.net/jasonzzj/article/details/52017438 前言 交叉熵损失函数 交叉熵损失函数的求导 前言 说明:本文只讨论Logistic回 ...
- 交叉熵代价函数(损失函数)及其求导推导 (Logistic Regression)
目录 1. 前言 2. 交叉熵损失函数 3. 交叉熵损失函数的求导 前言 说明:本文只讨论Logistic回归的交叉熵,对Softmax回归的交叉熵类似(Logistic回归和Softmax回归两者本 ...
- 机器学习:什么是困惑度?从信息熵和交叉熵谈起
一.前言 这片博客从信息论的角度解读信息熵.交叉熵和困惑度.有助于帮助在机器学习之路上理解相应的损失函数和评价指标.要了解交叉熵和困惑度是怎么计算的,以及为什么这样计算是有效的,我们需要从基础的信息量 ...
- 熵,交叉熵与softmax
经常说交叉熵+softmax(或者交叉熵损失函数),应该是对多分类下,softmax作为最后一层输出,交叉熵再判断这softmax的概率和真实值之间的差异(感觉不对,应该是用softmax的公式去求交 ...
- 【TensorFlow系列二】经典损失函数(交叉熵、均方差)
↑ 点击上方[计算机视觉联盟]关注我们 1.交叉熵 交叉熵是分类问题中使用比较广的一种损失函数,刻画了两个概率分布之间的距离. 给定两个概率分布p和q,通过q来表示p的交叉熵为: 交叉熵刻画的是两个概 ...
- 【TensorFlow】TensorFlow从浅入深系列之六 -- 教你深入理解经典损失函数(交叉熵、均方误差)
本文是<TensorFlow从浅入深>系列之第6篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...
- pytorch学习笔记(八):softmax回归的从零开始实现
文章目录 1. 获取和读取数据 2. 初始化模型参数 3. 实现softmax运算 4. 定义模型 5. 定义损失函数 6. 计算分类准确率 7. 训练模型 8. 预测 9. 总代码 小结 这一节我们 ...
最新文章
- html5media.js 让浏览器兼容VideoAudio 标签
- 网易游戏2011.10.15校园招聘会笔试题
- php网站分享qq代码下载,HTML5QQ登录的一篇代码分享
- 【Python】@property的用法
- 产品经理有话说!这个报表神器更新了6大功能,绝对亮眼
- springboot的api_【粉丝投稿】无需额外注解的 SpringBoot API文档生成工具
- corosync配置与详解
- SVN报错 could not connect to server
- C++调用tensorflow训练好的SSD物体检测模型-opencv3.4.3
- java实现二分排序算法
- PHP输出100以内的质数(包括普通写法和数组形式输出)
- java split 字符串作为分隔符_Java 字符串分隔 split
- 计算机存储介质清除工具,天桥科技存储介质信息消除工具
- 图像数据的标准化与归一化
- 小甲鱼Python学习笔记之魔法方法
- vmware中Linux虚拟机的克隆
- WireShark抓包获取简书的登录密码
- Android 中的 AccountManager getAuthToken 问题
- MongoDB安装过程中出现service MongoDB failed to start,verify that you have sufficient privileges to start...
- [转]机器学习中距离和相似性度量分类体系