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)}
$$

🔍 关键参数解释

  1. **π_θπ_ref**(核心参数)

    • π_θ: 当前策略模型
      • 带参数θ的神经网络(例如PPO正在训练的策略)
      • 策略的数学表示:π_θ(y|x) = 在状态x下选择动作y的概率
      • 动态更新:通过梯度下降不断优化
    • π_ref: 参考策略模型
      • 通常表示旧的冻结的策略版本
      • 在PPO中,通常指上次参数更新前的策略
      • 保持固定:在每次训练迭代中不变
    • 物理意义:KL散度衡量的是 当前策略(π_θ) 相对于参考策略(π_ref) 的变化程度
  2. **(y|x)**(策略条件)

    • x: 当前状态/观察输入
      • 例如:机器人传感器数据,游戏画面像素等
    • y: 要选择的动作
      • 例如:机器人的关节控制指令,游戏中的按键操作
    • 整体含义:表示在给定状态x下采取动作y的概率分布
  3. **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)

  4. 期望形式(右半部分)

    • 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,靠琴生不等式来推