KL散度
KL散度
🧩 KL散度公式解析
图片中的KL散度公式为:
$$
D_{KL}(\pi_{\theta}||\pi_{ref})=\sum_{\theta}\pi_{\theta}(y|x)\log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)} = E_{y\sim \pi_{\theta}(y|x)}\log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)}
$$
🔍 关键参数解释
**
π_θ
和π_ref
**(核心参数)π_θ
: 当前策略模型- 带参数θ的神经网络(例如PPO正在训练的策略)
- 策略的数学表示:
π_θ(y|x)
= 在状态x
下选择动作y
的概率 - 动态更新:通过梯度下降不断优化
π_ref
: 参考策略模型- 通常表示旧的或冻结的策略版本
- 在PPO中,通常指上次参数更新前的策略
- 保持固定:在每次训练迭代中不变
- 物理意义:KL散度衡量的是 当前策略(π_θ) 相对于参考策略(π_ref) 的变化程度
**
(y|x)
**(策略条件)x
: 当前状态/观察输入- 例如:机器人传感器数据,游戏画面像素等
y
: 要选择的动作- 例如:机器人的关节控制指令,游戏中的按键操作
- 整体含义:表示在给定状态
x
下采取动作y
的概率分布
**
D_KL(π_θ||π_ref)
**(核心概念)非对称性:
D_KL(P||Q) ≠ D_KL(Q||P)
在PPO中的物理意义:
$$
D_{KL}(\pi_{\theta}||\pi_{ref}) = \begin{cases}
0 & \text{完全一致} \0 & \text{存在差异} \
\infty & \text{分布无重叠}
\end{cases}
$$计算值表示:用π_ref的编码系统描述π_θ时,平均需要的额外信息量(单位为nats)
期望形式(右半部分)
E_{y∼π_θ}
: 表示从当前策略π_θ采样动作y的期望- 物理意义:在当前策略产生的动作分布上,评估新旧策略的概率比值的对数期望
⚙️ 在PPO中的具体作用
方面 | 解释 |
---|---|
目标 | 防止策略更新过大导致崩溃 |
实现方式 | 在损失函数中加入KL惩罚项: |
L_total = L_policy - β * D_KL(π_θ‖π_ref) |
|
β (beta) | 调节KL惩罚强度的超参数 |
过大→策略更新保守,过小→可能更新过度 | |
工作流程 | 1. 收集经验 2. 冻结π_ref=当前策略 3. 多次更新π_θ 4. 当KL>阈值时停止更新 |
📊 直观理解:KL散度就像给策略更新加了一个”安全带”,确保新策略不会突然偏离旧策略太远,导致训练不稳定。在微调语言模型时(如RLHF),这相当于约束新模型不要过度偏离原始基础模型的行为特征。
需要进一步说明的是:PPO中的实际实现通常用概率比值的裁剪(Clipped Surrogate Objective)替代直接的KL惩罚,但KL散度仍是理解策略约束的核心数学基础。
均方差和均方误差:https://zhuanlan.zhihu.com/p/673342488
KL散度恒大于0,靠琴生不等式来推
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Roger-Lv's space!
评论