Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 信息论基础(熵、KL散度)

信息论基础(熵、KL散度)

1. 熵(Entropy):不确定性的度量

1.1 定义与直观理解

熵是信息论中衡量随机变量不确定性的核心指标。对于离散随机变量XXX,其熵H(X)H(X)H(X)定义为:

H(X)=−∑x∈Xp(x)log⁡p(x)H(X) = -\sum_{x \in \mathcal{X}} p(x) \log p(x) H(X)=−x∈X∑​p(x)logp(x)

其中X\mathcal{X}X是XXX的取值空间。熵的单位取决于对数底数(比特/nat)。

物理意义:表示编码该分布所需的最小平均比特数,或系统混乱程度。

1.2 微分熵(连续情形)

对于连续随机变量,定义微分熵:

h(X)=−∫Xp(x)log⁡p(x)dxh(X) = -\int_{\mathcal{X}} p(x) \log p(x) dx h(X)=−∫X​p(x)logp(x)dx

注意:微分熵可负值,且不满足尺度不变性。

1.3 性质与重要定理

  • 极值性:均匀分布时熵最大
  • 链式法则:H(X,Y)=H(X)+H(Y∣X)H(X,Y) = H(X) + H(Y|X)H(X,Y)=H(X)+H(Y∣X)
  • 信息不等式:H(X)≥0H(X) \geq 0H(X)≥0(离散情形)

2. KL散度(Kullback-Leibler Divergence)

2.1 定义与性质

衡量两个概率分布ppp和qqq的差异:

DKL(p∥q)=∑x∈Xp(x)log⁡p(x)q(x)(离散)D_{KL}(p \| q) = \sum_{x \in \mathcal{X}} p(x) \log \frac{p(x)}{q(x)} \quad (\text{离散}) DKL​(p∥q)=x∈X∑​p(x)logq(x)p(x)​(离散)

DKL(p∥q)=∫p(x)log⁡p(x)q(x)dx(连续)D_{KL}(p \| q) = \int p(x) \log \frac{p(x)}{q(x)} dx \quad (\text{连续}) DKL​(p∥q)=∫p(x)logq(x)p(x)​dx(连续)

关键性质:

  • 非对称性:DKL(p∥q)≠DKL(q∥p)D_{KL}(p \| q) \neq D_{KL}(q \| p)DKL​(p∥q)=DKL​(q∥p)
  • 非负性:DKL(p∥q)≥0D_{KL}(p \| q) \geq 0DKL​(p∥q)≥0(等号当且仅当p=qp=qp=q)
  • 不满足三角不等式

2.2 在扩散模型中的作用

  • 训练目标:最小化真实分布与模型分布的KL散度
  • 变分推断:作为证据下界(ELBO)的组成部分
  • 分数匹配:KL散度与Fisher信息矩阵的关联

3. 交叉熵与互信息

3.1 交叉熵(Cross-Entropy)

H(p,q)=−∑xp(x)log⁡q(x)=H(p)+DKL(p∥q)H(p,q) = -\sum_x p(x)\log q(x) = H(p) + D_{KL}(p \| q) H(p,q)=−x∑​p(x)logq(x)=H(p)+DKL​(p∥q)

在机器学习中常用作损失函数。

3.2 互信息(Mutual Information)

衡量两个随机变量的依赖程度:

I(X;Y)=DKL(p(x,y)∥p(x)p(y))=H(X)−H(X∣Y)I(X;Y) = D_{KL}(p(x,y) \| p(x)p(y)) = H(X) - H(X|Y) I(X;Y)=DKL​(p(x,y)∥p(x)p(y))=H(X)−H(X∣Y)

4. 扩散模型中的典型应用

4.1 正向过程的熵变

正向扩散过程q(xt∣xt−1)q(x_t|x_{t-1})q(xt​∣xt−1​)的熵变化分析:

H(q(xt∣xt−1))=12log⁡(2πeβt)H(q(x_t|x_{t-1})) = \frac{1}{2} \log(2\pi e \beta_t) H(q(xt​∣xt−1​))=21​log(2πeβt​)

其中βt\beta_tβt​为噪声方差。

4.2 逆向过程的KL目标

逆向去噪过程通过最小化:

Eq[DKL(q(xt−1∣xt)∥pθ(xt−1∣xt))]\mathbb{E}_q\left[ D_{KL}(q(x_{t-1}|x_t) \| p_\theta(x_{t-1}|x_t)) \right] Eq​[DKL​(q(xt−1​∣xt​)∥pθ​(xt−1​∣xt​))]

5. 信息论视角的扩散过程

5.1 信息逐渐衰减

正向过程可看作逐步擦除原始数据信息(熵增过程)

5.2 率失真理论视角

扩散过程与信息压缩的率失真函数存在深刻联系


图表建议:

  1. 熵随分布变化的示意图(高斯分布 vs 均匀分布)
  2. KL散度的非对称性可视化
  3. 扩散过程中信息量变化的曲线图

代码示例(计算离散KL散度):

import numpy as np

def kl_divergence(p, q):
    """计算离散分布的KL散度"""
    p = np.asarray(p, dtype=np.float)
    q = np.asarray(q, dtype=np.float)
    return np.sum(p * np.log(p / q))

# 示例
p = [0.4, 0.6]
q = [0.5, 0.5]
print(f"KL(p||q) = {kl_divergence(p, q):.4f}")

案例研究:

  • 在图像生成中,分析不同噪声级别下的熵变化
  • 使用KL散度作为损失函数的变分自动编码器(VAE)与扩散模型的对比
Last Updated:: 5/28/25, 11:37 PM