首页 > 其他分享 >交叉熵(Cross-Entropy)损失

交叉熵(Cross-Entropy)损失

时间:2023-01-15 17:45:56浏览次数:56  
标签:容器 概率 log 交叉 模型 Cross 0.7 Entropy

损失函数和误差函数

在大多数时候,损失函数和误差函数代表了差不多的意思,但他们仍有细微的差别。误差函数计算我们的模型偏离正确预测的程度。损失函数对误差进行操作,以量化得到一个特定大小或特定方向的误差。

Sigmoid

\[f(x)=\frac{1}{1+e^{-x}} \]

Softmax

Sigmoid常被用来处理二分类问题。对于多分类问题,我们常使用softmax函数将各个类的分数指数化,以落在\([0,1]\)的区间内。

假设有n个类,对应的线性分数分别为\(A_{1}, A_{2},...,A_{n}\),各个类的概率为

\[f(i)=\frac{e^{A_{i}}}{\sum_{j=1}^{n}e^{A_{j}}} \]

交叉熵(Cross-Entropy)

克劳德-香农在他1948年的论文《A Mathematical Theory of Communication》中提出了信息熵的概念。根据香农的说法,一个随机变量的熵是该变量的可能结果中固有的"information"、"surprise "或 "uncertainty "的平均水平。

随机变量的熵与误差函数有关。不确定性的平均水平指的是误差。

交叉熵建立在信息论熵的思想上,测量给定随机变量/事件集的两个概率分布的差异。交叉熵可以应用于二分类和多分类问题。

二元交叉熵

假设我们需要判断一个学生是否能通过SAT考试。对象是四个学生。有两个模型,A和B。

在深度学习中,模型对每个输入应用线性回归,即输入特征的线性组合。

  1. A和B都对四个学生应用线性回归函数\(f(x)=wx+b\),以产生线性分数。
  2. 使用Sigmoid函数将线性分数转化成概率。

下图展现了四个学生通过或未通过的概率。红色的数字代表未通过的概率,蓝色的数字代表通过的概率。蓝色区域代表模型预测通过,红色表示未通过/失败。
image

上图显示,模型B比模型A表现得更好,因为它能正确地将所有学生归入各自的区域(蓝色数字都落在蓝色区域,红色亦然)。所有概率的乘积决定了一个模型的最大可能性。

BTW,两个(或多个)独立事件同时发生的概率是通过乘以事件的单独概率来计算的。

我们计算模型的总概率:

\[\text{模型}A总概率=0.1\times 0.7\times 0.6\times 0.2= 0.0084\\ \text{模型}B总概率=0.8\times 0.6\times 0.7\times 0.9= 0.3024 \]

模型B的总概率(乘积概率)比A的好。当我们有几个项目需要预测时,乘积概率的效果更好,但现实生活中的模型预测并非如此。例如,如果我们有一个1000名学生的班级,那么无论模型有多好,乘积概率总是会更接近于0。如果我们也改变一个概率,产品将发生巨大的变化,并给人错误的印象,认为模型表现良好。因此,我们需要使用对数函数将乘积转化为总和。

对于模型A:

\[log(0.1) + log( 0.7) + log( 0.6) + log( 0.2) =-2.073 \]

对于模型B:

\[log(0.8) + log( 0.6) + log( 0.7) + log( 0.9) = -0.505 \]

0和1之间的数字的对数将总是负的。我们将采取预测概率的负对数。

模型A的负对数:

\[-log(0.1) + -log( 0.7) + -log( 0.6) + -log( 0.2) =2.073 \]

模型B的负对数:

\[-log(0.8) +- log( 0.6) + -log( 0.7) + -log( 0.9)=0.505 \]

交叉熵损失是每个对象的预测概率的负对数之和。模型A的交叉熵损失是\(2.073\)且模型B的交叉熵损失是\(0.505\)。交叉熵可以很好地衡量每个模型的有效程度。

对于模型B,

Stu 1 Stu 2 Stu 3 Stu 4
概率 \(P1=0.8\)
(未通过的概率)
\(P2=0.6\)
(未通过的概率)
\(P3=0.7\)
(通过的概率)
\(P4=0.4\)
(通过的概率)
通过的概率 \(1-P1\) \(1-P2\) \(P3\) \(P4\)
是否通过 \(y_1=0\) \(y_2=0\) \(y_3=1\) \(y_4=1\)

\(y_i=0\)表示未通过,\(1\)表示通过。

计算学生3的交叉熵:\(-\sum_{n=i}^{c}\)\(y_{i}log(P3)\)\(+\) \((1-y_{i})log(1-P3)\)

下面是使用激活函数的交叉熵。

image

其中\(s_i\)是分数,\(i\)是需要预测的类,\(t\)是目标预测值,\(f\)是当前的激活函数sigmoid。二元交叉熵的计算公式如下。

\[\text{Binary Cross-Entropy(BCE)}= -\sum_{n=i}^{c}t_ilog(f(s_i))+(1-t_i)log(1-f(s_i)) \]

多元分类交叉熵

我们将多类交叉熵用于多类分类问题。例如,我们创建一个模型,预测水果的类型/类别。我们有三种类型的水果(橙子、苹果、柠檬)放在不同的容器中。另外,每个容器的概率之和应该为1,例如,对于容器X,\(p_1+p_2+p_3=1\)

水果 容器A的概率 容器B的概率 容器C的概率 容器X的概率
橘子 0.7 0.3 0.1 \(p_1\)
苹果 0.2 0.4 0.5 \(p_2\)
柠檬 0.1 0.3 0.4 \(p_3\)
容器A 容器B 容器C
正确的水果类型 橘子 柠檬 柠檬
预测成功的概率 0.7 0.3 0.4

交叉熵损失是每个对象的预测概率的负对数之和,我们可以得到当前的交叉熵损失为

\[-log(0.7)-log(0.3)-log(0.4)=1.073 \]

另外,还可以对每个容器(对象)计算交叉熵。假设类\((1,2,3)\)为\(i\),容器\((A,B,C)\)为\(j\)

我们为每个观察值的每个类别标签单独计算损失,并将结果相加,那么总交叉熵为

\[-\sum_{n=i}^{n}\sum_{j=1}^{c}y_{i,j}log(p_{i,j}) \]

Reference

https://ml-cheatsheet.readthedocs.io/en/latest/loss_functions.html

https://neptune.ai/blog/cross-entropy-loss-and-its-applications-in-deep-learning

https://zhuanlan.zhihu.com/p/54066141

标签:容器,概率,log,交叉,模型,Cross,0.7,Entropy
From: https://www.cnblogs.com/vv123infinity/p/17053805.html

相关文章

  • golang交叉编译
    先设置为运行平台,再设置内核类型,再编译产出常见平台有:android、darwin、linux、windows内核类型提供uname-a可以查看:amd64、arm64、386  setGOOS=linuxsetGOARC......
  • 在 host 上查看交叉编译的可执行程序依赖的动态库(无法使用 ldd)
    问题描述交叉编译的可执行文件,无法在host上使用ldd命令查看其依赖的动态库,可以用交叉编译工具链中的readelf来实现类似的功能。解决方案假设交叉编译用的readelf......
  • 【每日一读】SWOPE:Efficient Approximate Algorithms for Empirical Entropy and Mut
    目录​​简介​​​​简介​​​​ABSTRACT​​​​1INTRODUCTION​​​​2PRELIMINARIES​​​​2.1ProblemDefinition​​​​2.2ExistingSolutions​​​​6EXPER......
  • Pytorch的cross_entropy为什么等于log_softmax加nll_loss
    首先我们要知道nll_loss是怎么算的,看下面的代码label1=torch.tensor([0,3])pred1=torch.tensor([[0.2,0.7,0.8,0.1],[0.1,0.3,0.5,0.7]])lo......
  • RTMP、X264与交叉编译
    RTMP、X264与交叉编译​ 与HTTP(超文本传输协议)同样是一个基于TCP的RealTimeMessagingProtocol(实时消息传输协议)。由AdobeSystems公司为Flash播放器和服务器之间音频......
  • 9个时间序列交叉验证方法的介绍和对比
    评估性能对预测模型的开发至关重要。交叉验证是一种流行的技术。但是在处理时间序列时,应该确保交叉验证处理了数据的时间依赖性质。在之前的文章中,我们也做过相应的介绍。......
  • Crossing River
    CrossingRiver题解:贪心经典过河问题:先对过河的人速度降序排序,我们要知道想要使时间最短,有两个地方可以贪心1.去的时候减少时间浪费,就是说让两个速度慢的人一起过河2.......
  • 交叉编译链名字含义概述
    我们使用交叉编译链时,常常会看到这样的名字:arm-none-linux-gnueabi-gccarm-cortex_a8-linux-gnueabi-gccmips-malta-linux-gnu-gcc其中,对应的前缀为:a......
  • 单细胞 | Entropy
     Wequantifiedthistimedependentincreaseinbasal-luminalmixingusingentropyofcell-typeprobabilities,whichrobustlyagreeswithourper-samplemeasu......
  • cocos2d-x基于windows平台交叉编辑android工程
    cocos2d-x确实是一款优秀的引擎,尽管和正规军的unity3d比起来它显得有点土,但它在移动平台上的性能表现着实惊艳。以下讲解如何将win32工程交叉编译到android平台。 一、环境......