机器学习之KL散度推导

机器学习之KL散度推导

预备知识

熵、交叉熵、条件熵

熵 (Entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy)、信息熵 (information entropy)。

对于具体熵的定义和用法推荐大家自己再去理解,本篇文章着重分析和推导KL散度

这里我先给出这个熵的定义如下:

熵: Entropy(x) = H ( X ) = − ∑ x p ( x ) l o g 2 ( x ) \text{Entropy(x)}= H(X) = -\sum_xp(x)log_2(x) Entropy(x)=H(X)=xp(x)log2(x)

条件熵:
H ( Y ∣ X ) = ∑ x p ( x ) H ( Y ∣ X = x ) = − ∑ x p ( x ) ∑ y p ( y ∣ x ) log ⁡ 2 p ( y ∣ x ) = − ∑ x ∑ y p ( x , y ) log ⁡ 2 p ( y ∣ x ) = − ∑ x , y p ( x , y ) log ⁡ 2 p ( y ∣ x ) \begin{align*} H(\mathbf{Y}| \mathbf{X}) &= \sum_{x} p(x) H(\mathbf{Y} | \mathbf{X} = x) \\ &= - \sum_{x} p(x) \sum_{y} p(y|x) \log_2 p(y|x) \\ &= - \sum_{x} \sum_{y} p(x, y) \log_2 p(y|x) \\ &= - \sum_{x,y} p(x, y) \log_2 p(y|x) \end{align*} H(YX)=xp(x)H(YX=x)=xp(x)yp(yx)log2p(yx)=xyp(x,y)log2p(yx)=x,yp(x,y)log2p(yx)
交叉熵: Cross entropy = H ( P , Q ) = − ∑ i P ( x i ) l o g 2 Q ( x i ) \text{Cross entropy} = H(P,Q) = -\sum_iP(x_i)log_2Q(x_i) Cross entropy=H(P,Q)=iP(xi)log2Q(xi)

他们的用处是不同的,对于条件熵来说,主要是用在决策数的信息增益中,用来判断某个信息对样本集合的划分效果的影响力(好坏),当然对于连续变量,条件熵的公式不变,但变量的取值会变,如下:

在这里插入图片描述

而交叉熵则更多的用在KL散度上(据我所知😆),本次就会用到。

KL散度推导

KL散度的理论意义在于度量两个概率分布之间的差异程度,当KL散度越大的时候,说明两者的差异程度越大;而当KL散度小的时候,则说明两者的差异程度小;如果两者相同的话,则该KL散度应该为0。

公式定义为:
K L ( P ∣ ∣ Q ) = ∫ p ( x ) l o g p ( x ) q ( x ) d x KL(P||Q) = \int p(x)log\frac{p(x)}{q(x)}dx KL(P∣∣Q)=p(x)logq(x)p(x)dx

证明KL散度大于等于0:

将KL散度写成离散的形式为: K L ( P ∣ ∣ Q ) = ∑ p ( x ) l o g p ( x ) q ( x ) = − ∑ p ( x ) l o g q ( x ) p ( x ) KL(P||Q) = \sum p(x)log\frac{p(x)}{q(x)} = -\sum p(x)log\frac{q(x)}{p(x)} KL(P∣∣Q)=p(x)logq(x)p(x)=p(x)logp(x)q(x)

因为: l n ( x ) < x − 1 ln(x)<x-1 ln(x)<x1

所以:令 q ( x ) p ( x ) = x \frac{q(x)}{p(x)} = x p(x)q(x)=x
∑ p ( x ) l o g q ( x ) p ( x ) < ∑ p ( x ) ( q ( x ) p ( x ) − 1 ) ∑ p ( x ) l o g q ( x ) p ( x ) < ∑ ( q ( x ) − p ( x ) ) ∑ p ( x ) l o g q ( x ) p ( x ) < ∑ ( q ( x ) − ∑ p ( x ) ∑ p ( x ) l o g q ( x ) p ( x ) < 0 ( 概率的和为1 ) \begin{align*} \sum p(x)log\frac{q(x)}{p(x)} &< \sum p(x) \left(\frac{q(x)}{p(x)} - 1\right)\\ \sum p(x)log\frac{q(x)}{p(x)} &<\sum \left(q(x) - p(x)\right)\\ \sum p(x)log\frac{q(x)}{p(x)} &<\sum (q(x) - \sum p(x)\\ \sum p(x)log\frac{q(x)}{p(x)} &<0(\text{概率的和为1})\\ \end{align*} p(x)logp(x)q(x)p(x)logp(x)q(x)p(x)logp(x)q(x)p(x)logp(x)q(x)<p(x)(p(x)q(x)1)<(q(x)p(x))<(q(x)p(x)<0(概率的和为1)
所以:
K L ( P ∣ ∣ Q ) = ∑ p ( x ) l o g p ( x ) q ( x ) = − ∑ p ( x ) l o g q ( x ) p ( x ) > 0 KL(P||Q) = \sum p(x)log\frac{p(x)}{q(x)} = -\sum p(x)log\frac{q(x)}{p(x)} > 0 KL(P∣∣Q)=p(x)logq(x)p(x)=p(x)logp(x)q(x)>0
l o g p ( x ) q ( x ) log\frac{p(x)}{q(x)} logq(x)p(x)进行分解,可以转换为:
K L ( P ∣ ∣ Q ) = ∑ p ( x ) l o g p ( x ) q ( x ) = ∑ p ( x ) l o g p ( x ) − ∑ p ( x ) l o g q ( x ) = H ( P , Q ) − H ( P ) \begin{align*} KL(P||Q) &= \sum p(x)log\frac{p(x)}{q(x)}\\ &=\sum p(x)log p(x) - \sum p(x)log q(x)\\ &=H(P,Q) - H(P) \end{align*} KL(P∣∣Q)=p(x)logq(x)p(x)=p(x)logp(x)p(x)logq(x)=H(P,Q)H(P)

问题来了, K L ( P ∣ ∣ Q ) ≥ 0 KL(P||Q)\geq 0 KL(P∣∣Q)0,那 K L ( Q ∣ ∣ P ) KL(Q||P) KL(Q∣∣P)是否大于等于0?

答案是大于等于0,这是因为KL散度只是衡量数据之间的差异

例如:

  • K L ( P ∣ ∣ Q ) KL(P||Q) KL(P∣∣Q)衡量 Q 相对于 P 的差异

  • K L ( Q ∣ ∣ P ) KL(Q||P) KL(Q∣∣P)衡量 P 相对于 Q 的差异

设 $ P = {0.9, 0.1} , , Q = {0.8, 0.2} $

计算可得:
KL ( P ∣ ∣ Q ) = 0.9 ln ⁡ 0.9 0.8 + 0.1 ln ⁡ 0.1 0.2 ≈ 0.011 + 0.069 = 0.08 \text{KL}(P||Q) = 0.9 \ln \frac{0.9}{0.8} + 0.1 \ln \frac{0.1}{0.2} \approx 0.011 + 0.069 = 0.08 KL(P∣∣Q)=0.9ln0.80.9+0.1ln0.20.10.011+0.069=0.08
KL ( Q ∣ ∣ P ) = 0.8 ln ⁡ 0.8 0.9 + 0.2 ln ⁡ 0.2 0.1 ≈ − 0.094 + 0.139 = 0.045 \text{KL}(Q||P) = 0.8 \ln \frac{0.8}{0.9} + 0.2 \ln \frac{0.2}{0.1} \approx -0.094 + 0.139 = 0.045 KL(Q∣∣P)=0.8ln0.90.8+0.2ln0.10.20.094+0.139=0.045

可见二者结果不同,体现 KL 散度的不对称特性。

总结

KL散度是非负的,也是不对称的。

在机器学习中KL散度常用于:

  • 生成模型(如 VAE)中衡量生成分布与真实分布的差异;
  • 优化问题中引导分布逼近目标分布(如强化学习的策略更新)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37775.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用PlotNeuralNet绘制ResNet50模型

一、下载所需软件 1、下载MikTex 作用:将.tex文件转换为PDF文件 下载官网链接:Getting MiKTeX 2、下载Git 作用:将PlotNeuralNet库从GitHub上下载下来,在cmd使用命令行: git clone https://github.com/SamuraiBUPT/PlotNeuralNet-Windows.git 就可以将PlotNeuralNet…

10分钟打造专属AI助手:用ms-swift实现自我认知微调

想象一下&#xff0c;你是辛辛苦苦利用开源模型打造一个专属的AI产品助手。这个助手不仅能高效解答客户的问题&#xff0c;还能自豪地告诉大家&#xff1a;“我是某某打造的某某助手&#xff0c;代表着我们的品牌和价值观。” 然而&#xff0c;当前市面上的开源AI模型虽然技术先…

尝试使用tauri2+Django+React的项目

前言 使用Tauri2前端&#xff0c;本质是进程间的通信。并非前后端。 而想使用nw&#xff0c;先后端打包exe&#xff0c;再和前端打包成exe&#xff0c;并没有完成成功。 而笔者从Tauri中看到这种可能性。很有可能成功基于SeaORMMySQLTauri2ViteReact等的CRUD交互项目-CSDN博…

【JavaWeb学习Day27】

Tlias前端 员工管理 条件分页查询&#xff1a; 页面布局 搜索栏&#xff1a; <!-- 搜索栏 --><div class"container"><el-form :inline"true" :model"searchEmp" class"demo-form-inline"><el-form-item label…

Milvus WeightedRanker 对比 RRF 重排机制

省流:优先选择WeightedRanker 以rag为例,优先选择bm25全文检索,其次选择向量检索 Milvus混合搜索中的重排机制 Milvus通过hybrid_search() API启用混合搜索功能&#xff0c;结合复杂的重排策略来优化多个AnnSearchRequest实例的搜索结果。本主题涵盖了重排过程&#xff0c;…

PLY格式文件如何转换成3DTiles格式——使用GISBox软件实现高效转换

一、概述 在三维GIS和数字孪生领域&#xff0c;3DTiles格式已成为主流的数据格式之一。它由Cesium团队提出&#xff0c;专为大规模3D数据可视化设计&#xff0c;能够高效地加载和展示海量模型数据。而PLY格式则是一种常见的三维模型文件格式&#xff0c;主要用于存储点云数据或…

Junit在测试过程中的使用方式,具体使用在项目测试中的重点说明

JUnit 是一个广泛使用的 Java 单元测试框架,主要用于编写和运行可重复的测试。以下是 JUnit 在项目测试中的使用方式和重点说明: 1. 基本使用 场景:测试一个简单的 Java 类。 示例: import org.junit.Test; import static org.junit.Assert.*;public class CalculatorTe…

《C++11 基于CAS无锁操作的atomic原子类型》

count; count--; 我们知道&#xff0c;/--操作并不是原子性的&#xff0c;其实对应三条汇编指令来完成的。 读取&#xff1a;从内存中把变量的值读取到寄存器修改&#xff1a;在寄存器里将变量的值1/-1写入&#xff1a;把修改后的值写入到内存 在单线程环境下&#xff0c;这…

网络编程之客户端聊天(服务器加客户端共三种方式)

最终效果&#xff1a; serve.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/select.h>#define MAX_CLIENTS 2 // 只允许两个客户端 #define BUF_SIZE 1024i…

《深度学习》—— 模型部署

文章目录 模型部署模型准备选择部署平台部署配置与服务化测试与验证优化与维护常用工具与框架Flask本地部署模型 模型部署 模型部署是将训练好的机器学习或深度学习模型投入实际生产环境&#xff0c;使其能够处理实时数据并提供预测或推理服务的过程。 模型准备 模型格式转换…

解码小米714亿资本棋局:雷军“押宝”AI新战场

目录 小米的AI战略&#xff1a;70亿投入背后的逻辑 1. ​AI成为核心战略&#xff0c;聚焦三大方向 2. ​资本开支超100亿&#xff0c;投资AI基础层公司 3. ​自研芯片与大模型突破 小米的资本棋局&#xff1a;从智能硬件到AI生态 1. ​714亿投资布局&#xff0c;构建产业…

如何为在线游戏选择合适的游戏盾?

在当今这个互联网高速发展的时代&#xff0c;在线游戏已经成为许多人日常生活中不可或缺的一部分。然而&#xff0c;随着游戏人数的不断增加&#xff0c;网络安全问题也层出不穷。游戏盾的问世便是为了解决这一系列安全隐患&#xff0c;确保玩家在游戏中能够拥有安全、畅快的体…

自适应柔顺性策略:扩散引导控制中学习近似的柔顺

24年10月来自斯坦福大学和 TRI 的论文“Adaptive Compliance Policy: Learning Approximate Compliance for Diffusion Guided Control”。 柔顺性在操作中起着至关重要的作用&#xff0c;因为它可以在不确定的情况下平衡位置和力的并发控制。然而&#xff0c;当今的视觉运动策…

w264民族婚纱预定系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

栈/堆/static/虚表

在 C 里&#xff0c;栈空间主要用来存放局部变量、函数调用信息等。下面为你介绍栈空间在 C 里的运用方式。 1. 局部变量的使用 在函数内部定义的变量会被存于栈空间&#xff0c;当函数执行结束&#xff0c;这些变量会自动被销毁。 #include <iostream>void exampleFu…

SpringBoot实现异步调用的方法

在Java中使用Spring Boot实现异步请求和异步调用是一个常见的需求&#xff0c;可以提高应用程序的性能和响应能力。以下是实现这两种异步操作的基本方法&#xff1a; 一、异步请求&#xff08;Asynchronous Request&#xff09; 异步请求允许客户端发送请求后立即返回&#x…

基于 Prompt 的实体关系抽取:原理与优势解析

一、信息抽取的现状与挑战 在当今数字化时代&#xff0c;信息抽取作为自然语言处理&#xff08;NLP&#xff09;领域的核心技术&#xff0c;具有不可替代的重要性。从海量的非结构化文本数据中精准提取出有价值的信息&#xff0c;例如实体&#xff08;如人名、组织名&#xff…

SolidWorks使用显卡教程

操作步骤&#xff1a; 打开注册表编辑器 按下键盘上的 Win R 组合键&#xff0c;输入 regedit 并按回车键&#xff0c;打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径&#xff1a; plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…

spring-tx笔记

编程式事务与声明式事务的理解 补充&#xff1a;什么是事务&#xff1f; 事务是一个重要概念&#xff0c;尤其在数据库管理系统中。事务是指一组操作。&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;确保数据的一致性和完整性 编程式事务 编…

使用excel.EasyExcel实现导出有自定义样式模板的excel数据文件,粘贴即用!!!

客户要求导出的excel文件是有好看格式的&#xff0c;当然本文举例模板文件比较简单&#xff0c;内容丰富的模板可以自行设置&#xff0c;话不多说&#xff0c;第一步设置一个"好看"的excel文件模板 上面要注意的地方是{.变量名} &#xff0c;这里的变量名对应的就是…