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

交叉熵损失函数原理详解

交叉熵损失函数原理详解

在学习pytorch的神经网络模型里,经常用到交叉熵损失函数(CrossEntropy Loss),只知道它是分类问题中经常使用的一种损失函数,对于其内部的原理总是模模糊糊,而且一般使用交叉熵作为损失函数时,在模型的输出层总会接一个softmax函数,至于为什么要怎么做也是不懂,所以专门花了一些时间打算从原理入手,搞懂它,故在此写一篇博客进行总结,以便以后翻阅。

交叉熵简介

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

信息量

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

太阳从东边升起”,这条信息并没有减少不确定性,因为太阳肯定是从东边升起的,这是一句废话,信息量为0。
全国两会:十四届全国人大一次会议【3月5日】;全国政协十四届一次会议【3月4日】”,从直觉上来看,这句话具有很大的信息量。因为中国队进入世界杯的不确定性因素很大,而这句话消除了进入世界杯的不确定性,所以按照定义,这句话的信息量很大。
根据上述可总结如下:信息量的大小与信息发生的概率成反比。概率越大,信息量越小。概率越小,信息量越大。
设某一事件发生的概率为P(x),其信息量表示为:
I ( x ) = − l o g ( p ( x ) ) I(x) = -log^{(p(x))} I(x)=log(p(x))
其中I(x)表示信息量,这里 l o g ( p ( x ) ) log^{(p(x))} log(p(x))表示以e为底的自然对数。

信息熵

信息熵也被称为,用来表示所有信息量的期望。

期望是试验中每次可能结果的概率乘以其结果的总和。

所以信息量的熵可表示为:(这里的X是一个离散型随机变量)
H ( X ) = − ∑ P ( x i ) l o g ( P ( X i ) ) ( X = x 1 , x 2 , . . . , x n ) H(X) = - \sum P(x_i)log^{(P(X_i))} \quad (X =x_1,x_2,...,x_n) H(X)=P(xi)log(P(Xi))(X=x1,x2,...,xn)
使用明天的天气概率来计算其信息熵:

序号事件概率P信息量
1明天是晴天0.5 − l o g 0.5 -log^{0.5} log0.5
2明天是雨天0.25 − l o g 0.25 -log^{0.25} log0.25
3明天是多云0.25 − l o g 0.25 -log^{0.25} log0.25

即:
H ( X ) = − ( 0.5 ∗ l o g 0.5 + 0.25 ∗ l o g 0.25 + 0.25 ∗ l o g 0.25 ) H(X) = -(0.5 * log^{0.5} + 0.25*log^{0.25} + 0.25 * log^{0.25}) H(X)=(0.5log0.5+0.25log0.25+0.25log0.25)

相对熵(KL散度)

如果对于同一个随机变量X有两个单独的概率分布p(x)q(x),则我们可以使用KL散度来衡量这两个概率分布之间的差异。
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q) = \sum_{i=1}^n p(x_i)log^{(p(x_i)\over q(x_i))} DKL(p∣∣q)=i=1np(xi)logq(xi))(p(xi)
在机器学习中,常常使用 p(x) 表示样本的真实分布,q(x) 表示来表示模型所预测的分布,
KL散度越小,表示p(x)q( x ) 的分布更加接近,可以通过反复训练q(x) 来使 q(x) 的分布逼近p(x)

交叉熵

交叉熵的推导:

首先将KL散度公式拆开:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q) = \sum_{i=1}^n p(x_i)log^{(p(x_i)\over q(x_i))} DKL(p∣∣q)=i=1np(xi)logq(xi))(p(xi)
= ∑ i = 1 n p ( x i ) ( l o g p ( x i ) − l o g q ( x i ) ) = \sum_{i=1}^n p(x_i) (log^{p(x_i)} - log^{q(x_i)} ) =i=1np(xi)logp(xi)logq(xi)
= ∑ i = 1 n p ( x i ) l o g p ( x i ) − ∑ i = 1 n p ( x i ) l o g q ( x i ) ) = \sum_{i=1}^n p(x_i) log^{p(x_i)} - \sum_{i=1}^n p(x_i) log^{q(x_i)} ) =i=1np(xi)logp(xi)i=1np(xi)logq(xi)
= − H ( x ) + [ − ∑ i = 1 n p ( x i ) l o g q ( x i ) ) ] = -H(x) + [- \sum_{i=1}^n p(x_i) log^{q(x_i)} )] =H(x)+[i=1np(xi)logq(xi)]
前者H(X), 即H(p(x))表示信息熵,后者即为交叉熵,KL散度 = 交叉熵 - 信息熵
所以,
交叉熵公式表示为:
H ( x ) = − ∑ i = 1 n p ( x i ) l o g q ( x i ) H(x) = - \sum_{i=1}^n p(x_i) log^{q(x_i)} H(x)=i=1np(xi)logq(xi)
在机器学习训练网络时,输入数据与标签常常已经确定,那么真实概率分布p(x) 也就确定下来了,所以信息熵在这里就是一个常量。由于KL散度的值表示真实概率分布p(x)与预测概率分布q(x) 之间的差异,值越小表示预测的结果越好,所以需要最小化KL散度,而交叉熵等于KL散度加上一个常量(信息熵),且公式相比KL散度更加容易计算,所以在机器学习中常常使用交叉熵损失函数来计算loss。

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

在线性回归问题中,常常使用MSE(Mean Squared Error)作为loss函数,而在分类问题中常常使用交叉熵作为loss函数。


http://www.kler.cn/a/15430.html

相关文章:

  • 鸿蒙网络编程系列48-仓颉版UDP回声服务器示例
  • Spark分布式计算中Shuffle Read 和 Shuffle Write的职责和区别
  • 图像基础算法学习笔记
  • Ansible内置模块之known_hosts
  • 如何进入python交互界面
  • 使用win32com将ppt(x)文件转换为pdf文件
  • c++标准模板(STL)(std::array)(四)
  • 红海云CEO孙伟解密智能化人力资源新范式
  • SaaS云HIS系统源码功能介绍
  • Flink实战-(6)FlinkSQL实现CDC
  • 冬奥会传统文化管理系统【GUI/Swing+MySQL】(Java课设)
  • DJ4-3 连续分配存储管理方式
  • window 10 安装node.js时遇到2502 2503错误(已解决)
  • 从起步到成熟:探讨APP在不同发展阶段的商业化路径和变现模式
  • MySQL提权/条件竞争漏洞分析和利用(37)
  • Android Jetpack Compose —— 控件
  • Linux上常用的防火墙软件iptables详解
  • Html5版贪吃蛇游戏制作(经典玩法)
  • IT 面试手册 - 序
  • 【KVM虚拟化】· 图形化KVM安装linux
  • 企业数字化转型的核心是什么?如何才能真正做到数字化转型?
  • Go官方指南(一)包、变量、函数
  • Vue3 element-plus el-select 无法选中,又不报错
  • Docker在Windows系统中的安装方法和使用方法
  • 【学习笔记】- 零基础学React
  • Linux命令集(Linux文件管理命令--mv指令篇)