首页 > 其他分享 >【损失函数】KL散度与交叉熵理解

【损失函数】KL散度与交叉熵理解

时间:2024-09-23 19:51:49浏览次数:9  
标签:交叉 模型 散度 KL 分布 信息论

变分自编码器等模型中会引入Kullback-Leibler散度作为损失函数

 

目录

信息论

KL散度

实际模型

交叉熵与MLE


信息论

谈及熵相关的概念,必须要涉及到信息论。

信息论是一门运用概率论与数理统计的方法研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用数学学科。它起源于20世纪30年代,由美国物理学家克劳德·香农(Claude Shannon)在1948年发表的论文《信息论》(A Mathematical Theory of Communication)中首次提出,并奠定了现代信息论的基础。

信息论涉及很多理论,包括但不限于信源编码理论、信道编码理论、数据压缩理论等。信源编码理论主要研究如何有效地表示和传输信息,以减少信息的冗余和传输成本。其中,霍夫曼编码是一种广泛应用的高效编码方法。信道编码理论则关注如何在有噪声的信道中可靠地传输信息。通过引入冗余信息,信道编码可以提高数据传输的可靠性,降低误码率。数据压缩理论通过研究信息的冗余性,实现数据量的减少和存储空间的节省。无损压缩和有损压缩是数据压缩的两种主要方式。

信息是对不确定性的量化,描述了对某一事件的观测结果所提供的确定性减少量。它是信息论中的核心概念之一。是信息论中用于衡量信息不确定性的重要指标。在信息论中,熵越高表示信息的不确定性越大,反之则越小。信息论和熵的定义存在一些玄妙的解释权的问题,当然也可以不使用目前主流的概念来衡量信息不确定性,不过不得不承认信息论内的很多定义的衍生内容确实具备一些性质,能够较好地契合交叉学科的需求,并且能够有效地work。例如这里将要提到的互信息、KL散度、交叉熵等等。

KL散度

KL散度是一种用于比较两个概率分布的方法,称为Kullback-Leibler散度(简称为KL散度)。

KL散度能够帮助衡量损失的信息。因为在实际应用与计算中,通常会使用较为简单的近似分布来近似替代观察到的数据或者所需要考量的复杂分布,这时候需要一个有效的指标来衡量近似的效果。这有很广泛的应用,例如可以用于变分自编码器VAE中作为损失函数。

在给定分布p、q的情况下,p为真实分布,q为p的近似分布,可以直接定义KL散度

D_{K L}(p \| q) = -\sum_{i=1}^{n} p(x_{i}) \cdot \log \frac{q(x_{i})}{p(x_{i})}

对KL散度的公式做一些推导

\begin{aligned} D_{K L}(p \| q) &= -\sum_{i=1}^{n} p(x_{i}) \cdot \log \frac{q(x_{i})}{p(x_{i})} \\ &= -\sum_{i=1}^{n} p(x_{i}) \cdot \log q(x_{i}) + \sum_{i=1}^{n} p(x_{i}) \cdot \log p(x_{i}) \\ &= H(p,q) - H(p). \end{aligned}\\

通过公式推导可以看到,KL散度可以表示为p和q的交叉熵与真实分布p的熵的差。 

这一点意味着,最小化KL散度,可以使得交叉熵与真实分布的熵接近。

那么这种熵接近是否意味着分布接近或者近似呢?

从逻辑上,这种接近的解释不够严谨,因为可能存在KL散度很小但分布p和q却相差甚远的情况。需要再度考量KL散度的公式,来更直观地说明其能够衡量近似的效果:

\begin{aligned} D_{K L}(p \| q) &= \sum_{i=1}^{N} p\left(x_{i}\right) \cdot \log \frac{p\left(x_{i}\right)}{q\left(x_{i}\right)} \\ &= \sum_{i=1}^{N} p\left(x_{i}\right) \cdot\left(\log p\left(x_{i}\right)-\log q\left(x_{i}\right)\right)\\ &= \mathbb{E}_{x \sim p(x)} [\log p(x)-\log q(x)] \end{aligned}\\

这样推导后可以清晰地看出来,当最小化KL散度时,会迫使分布p和q对在每个x处有效接近,最终使得分布p和q不断近似。

实际模型

在深度学习中,近似认为数据的分布即是真实分布,而模型输出的分布即是用来逼近的分布。这背后实际上是经验风险最小化ERM (Empirical Risk Minimization)的思想。

如果需要基于KL散度做为损失函数训练一个判别模型或生成模型,设训练集大小为n,每个数据点为x_i,KL散度可以写成:

\begin{aligned} D_{K L}(p_{data} \| q_{model}) &= -\sum_{i=1}^{n} p_{data}(x_{i}) \cdot \log q_{model}(x_{i}) + \sum_{i=1}^{n} p_{data}(x_{i}) \cdot \log p_{data}(x_{i}) \\ &= \mathbb{E}_{x \sim p_{data}(x)}[-\log q_{model}(x)] - \mathbb{E}_{x \sim p_{data}(x)}[-\log p_{data}(x)] \\ &= H(p_{data},q_{model}) - H(p_{data}). \end{aligned}\\

在实际模型中,上式H(p_{data})为常数。目的是使得模型的分布q_{model}接近数据的分布p_{data},引入KL散度作为损失函数,那么优化KL散度即等价于优化交叉熵H(p_{data},q_{model})。因此可以使用交叉熵H(p_{data},q_{model})作为损失函数训练辨别模型或者其他模型。

比如随机隐变量遵循高斯分布的VAE变分自编码器模型。其损失函数有效地引入了KL散度保证分布的近似性,并结合MSE均方误差或其他保证输入与输出的近似性。

如上,第一项可以为MSE均方误差或其他保证输入与输出的近似性,第二项为KL散度。

交叉熵与MLE

在实际模型中,KL散度中的交叉熵可能在事实上实现了极大似然估计的效果

基于前面实际模型的假定和结果,将模型的输出q_{model}(x_i)显性表示为q_{model}(x_i; \theta),随后便能够以极大似然估计的思想去理解这个模型输出的分布结果,将其进行参数化,并求取极大/极小的结果,公式可以表示为:

\theta_{MLE} = \operatorname{argmin}_{\theta} - \sum_{i=1}^{n} \log q_{model}(x_{i} ; \theta).\\\\

再作进一步推导,p_{data}视为\frac{1}{n},对于极小化参数不产生影响,但是有效契合交叉熵的公式,再进一步用采样的形式表示期望,可以发现这里交叉熵在事实上与极大似然估计等价。

\begin{aligned} \theta_{MLE} &= \operatorname{argmin}_{\theta} - \sum_{i=1}^{n} \log q_{model}(x_{i} ; \theta) \\ &= \operatorname{argmin}_{\theta} - \sum_{i=1}^{n} \frac{1}{n} \log q_{model}(x_{i} ; \theta) \\ &= \operatorname{argmin}_{\theta} \mathbb{E}_{x \sim p_{data}(x)}[-\log q_{model}(x; \theta)] \\ &= \operatorname{argmin}_{\theta} H(p_{data},q_{model}). \end{aligned}\\

极大似然估计(Maximum Likelihood Estimation, MLE)是一种在统计学中用来估计模型参数的方法。其基本思想是,给定观测数据,通过调整模型参数来最大化观测数据出现的“似然性”(likelihood),即这些数据在模型参数下的联合概率分布或密度函数。这种方法广泛应用于机器学习、数据分析、经济学和许多其他领域。

 

标签:交叉,模型,散度,KL,分布,信息论
From: https://blog.csdn.net/weixin_73404807/article/details/142456818

相关文章

  • XGBoost6种优化算法分类模型一键对比 +交叉验证 Matlab代码
    ......
  • 特征工程与交叉验证在机器学习中的应用
    数据入口:学生考试表现影响因素数据集-Heywhale.com本数据集提供了关于影响学生考试成绩的多种因素的全面概述。数据集包含了有关学习习惯、出勤率、家长参与、资源获取等方面的信息。数据说明字段名说明Hours_Studied每周学习的小时数Attendance出勤率(上课出席的百分比)Par......
  • Scikit-learn (`sklearn`) 教程
    Scikit-learn(sklearn)教程Scikit-learn是Python中最流行的机器学习库之一,提供了丰富的机器学习算法、数据预处理工具以及模型评估方法,广泛应用于分类、回归、聚类和降维等任务。在本教程中,我们将介绍如何使用Scikit-learn进行数据加载、特征处理、模型训练与评估,......
  • 机器学习之Python中Scikit-Learn(sklearn)入门
    文章目录机器学习之Python中Scikit-Learn(sklearn)入门一、引言二、安装与导入1、安装2、导入库三、LinearRegression线性回归1、算法简介2、模型创建与训练2.1、创建模型2.2、数据准备2.3、划分数据集2.4、模型训练3、模型评估4、模型使用四、总结机器学习之Python......
  • 香橙派5Pro+虚拟机Ubuntu18.04交叉编译+Opencv4.7
    1.基础工具安装①Ubuntu虚拟机下交叉编译工具链安装香橙派5Pro为Arm64位架构,因此需要安装g++-aarch64-linux-gnu以及gcc-aarch64-linux-gnu(有其它交叉编译器,本文以此编译器为例)更新软件源sudoaptupdatesudoaptupgrate点击查看交叉编译工具链安装apt-cachesearcha......
  • 交叉编译valgrind在嵌入式设备上调试程序
    valgrind是一个很好的内存检测工具,可以让程序员避免用“瞪眼法”去定位内存泄露问题。下面记录一下本人在arm64上使用valgrind的过程。目录1.下载最新版本的valgrind源码2.解压3.编译4.打包4.运行5.报错及解决方法1.下载最新版本的valgrind源码https://sourceware.org/ftp/valg......
  • 基于单片机设计的激光测距仪(采用XKC-Kl200模块)
    一、前言随着科技的不断进步和应用需求的增加,测距仪成为了许多领域必备的工具之一。传统的测距仪价格昂贵、体积庞大,使用起来不够方便。本项目采用STC89C52单片机作为主控芯片,结合XKC-KL200激光测距模块和LCD1602显示器,实现了一个简易且高效的激光测距仪。这个测距仪可以帮助用户快......
  • Redis基础数据结构之 quicklist 和 listpack 源码解读
    目录标题quicklist为什么要设计quicklist?quicklist特点ziplistquicklist数据结构listpacklistpack是什么?listpack数据结构ziplist干啥去了?为什么有listpack?什么是ziplist的连锁更新?listpack如何避免连锁更新?listpack替代了quicklist吗?quicklist为什么要设计qu......
  • python标准库模块 pickle 详解
    什么是pickle模块?pickle是Python的一个标准库,用于序列化和反序列化Python对象。所谓序列化,就是将一个Python对象转换成字节流,以便存储到磁盘或通过网络传输。反序列化则是将字节流恢复为原来的Python对象。为什么使用pickle?保存Python对象:可以将Python中的各......
  • Improving Weakly-Supervised Object Localization Using Adversarial Erasing and Ps
    一、背景        CAM的方法通常只定位了对象中最具判别性的部分(训练过程中缺乏详细的位置信息),后续一些先进的方法定位目标区域包括:利用多个特征映射;采用对抗性擦除;合并伪标签;设计替换架构;引入额外处理或者利用单独的网络或者伪标签生成器等    这篇论文专注......