当前位置: 首页 > news >正文

交叉熵损失(Cross Entropy Loss)学习笔记

  在分类任务中,我们通常使用交叉熵作为损失函数,首先给出交叉熵的计算公式:
二分类中:
L = 1 N ∑ i L i = 1 N ∑ i − [ y i l o g ( p i ) + ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] \mathcal{L}=\frac1{N}\sum_{i}L_i=\frac1{N}\sum_{i}-[y_ilog(p_i)+(1-y_i)\cdot log(1-p_i)] L=N1iLi=N1i[yilog(pi)+(1yi)log(1pi)]  其中, y i y_i yi表示样本的label, p i p_i pi表示第i个样本预测为正类的概率。
多分类中:
L = 1 N ∑ i = − 1 N ∑ i ∑ c = 1 M y i c l o g ( p i c ) \mathcal{L}=\frac1{N}\sum_{i}=-\frac1{N}\sum_{i}\sum_{c=1}^{M}y_{ic}log(p_{ic}) L=N1i=N1ic=1Myiclog(pic)  其中,M是样本类别的数量, y i c y_{ic} yic是样本i的label取等于c取1,否则取0, p i c p_{ic} pic第i个样本预测属于类别c的概率。
  那么交叉熵为什么好呢,举一个例子:

预测值label是否正确
0.3 0.3 0.40 0 1 (democrat)
0.3 0.4 0.30 1 0 (republican)
0.1 0.2 0.71 0 0 (other)

  如果使用分类误差作为损失函数,该神经网络的分类误差为 1/3,请注意,这个net只是勉强正确地完成了前两个样本,并且在第三个样本上相差甚远。看这个例子:

预测值label是否正确
0.1 0.2 0.70 0 1 (democrat)
0.1 0.7 0.20 1 0 (republican)
0.3 0.4 0.31 0 0 (other)

  这个net的分类误差也是1/3,但是它很明显比上面那两个更好,对于前两个样本它很好的完成了分类,对于第三个样本则比较勉强,我们发现,分类误差是一种非常粗略的性能度量标准。
  对于这两个net我们计算交叉熵的值分别是1.37和0.54,第二个net的损失就比较小,这是符合逻辑的,相比于分类误差,交叉熵会更精细。同样我们也可以计算均方误差(MSE)作为损失,它的公式为: M S E = 1 n ∑ i n ( y i ^ − y i ) 2 MSE=\frac1n\sum_i^n(\hat{y_i}-y_i)^2 MSE=n1in(yi^yi)2  计算出来的值分别是0.81和0.34。但是相比于交叉熵,MSE过于强调不正确的输出,如果使用softmax层进行分类,反向传播的方法训练网络,有可能出现训练停滞不前的情况。

本文的例子来自Why You Should Use Cross-Entropy Error Instead Of Classification Error Or Mean Squared Error For Neural Network Classifier Training

http://www.lryc.cn/news/265062.html

相关文章:

  • python flask alchemy在判断None值时与flake8格式检测冲突
  • Text Intelligence - TextIn.com AI时代下的智能文档识别、处理、转换
  • 55.0/CSS 的应用(详细版)
  • 磁盘类型选择对阿里云RDS MySQL的性能影响
  • 数据结构---算法的时间复杂度
  • 后缀为.vue是什么文件
  • 前端微信小程序AES加密解密踩坑
  • 代码随想录算法训练营第五十八天| 739 每日温度 496 下一个更大元素 |
  • 配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime
  • 华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录
  • css图片属性,图片自适应
  • 【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类
  • 【数据结构和算法】最大连续1的个数 III
  • AngularJS
  • 初级数据结构(七)——二叉树
  • 对比学习综述
  • R语言【cli】——cli_warn可以更便捷的在控制台输出警告信息
  • 从零开始创建GPTs 人人都可以编写自己的ChatGPT产品
  • 人工智能对网络安全的影响
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextInput输入框组件
  • 【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]
  • 安全狗云原生安全-云甲·云原生容器安全管理系统
  • Python 学习路线:介绍、基础语法、数据结构、算法、高级主题、框架及异步编程详解
  • 基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI+Vant 电影院订票管理系统 的设计与实现
  • 轻量级购物小程序H5产品设计经典样例
  • final, finally, finalize 的区别?
  • 4.使用 Blazor 构建 Web 应用程序
  • CentOS操作学习(二)
  • OpenCV技术应用(9)— 视频的暂停播放和继续播放
  • C#时间戳转换