Direct Discriminative Optimization
- todo: 审阅
DDO (Direct Discriminative Optimization) 的数学核心在于将判别器隐式地参数化为两个生成模型(目标模型与参考模型)的似然比,从而直接将生成任务转化为对抗式分布对齐。
为了彻底理解这一方法,我们将从最基础的概率生成模型目标函数(极大似然估计与前向 KL 散度)开始,逐步推导出 DDO 的完整数学理论体系。
第一部分:前置基础知识
1. 极大似然估计 (MLE) 与前向 KL 散度
在视觉生成领域,无论是像 VAR 这样的自回归模型,还是主流的扩散模型,最经典的训练方式都是极大似然估计 (Maximum Likelihood Estimation, MLE)。
假设真实数据分布为 $p_{\text{data}}(x)$,我们参数化的生成模型为 $p_\theta(x)$。MLE 的优化目标是最大化观测数据的对数似然:
\[\max_\theta \mathbb{E}_{x \sim p_{\text{data}}} [\log p_\theta(x)]\]在信息论中,这等价于最小化真实分布 $p_{\text{data}}$ 与模型分布 $p_\theta$ 之间的前向 KL 散度 (Forward KL Divergence):
\[D_{\text{KL}}(p_{\text{data}} \parallel p_\theta) = \int p_{\text{data}}(x) \log \frac{p_{\text{data}}(x)}{p_\theta(x)} dx = \int p_{\text{data}}(x) \log p_{\text{data}}(x) dx - \mathbb{E}_{x \sim p_{\text{data}}} [\log p_\theta(x)]\]由于第一项与 $\theta$ 无关,因此:
\[\min_\theta D_{\text{KL}}(p_{\text{data}} \parallel p_\theta) \iff \max_\theta \mathbb{E}_{x \sim p_{\text{data}}} [\log p_\theta(x)]\]前向 KL 的“模式覆盖 (Mode-Covering)”缺陷
观察前向 KL 散度的表达式,其积分权重为 $p_{\text{data}}(x)$。 这意味着,只要在某个数据点 $x$ 处真实概率 $p_{\text{data}}(x) > 0$,但模型预测 $p_\theta(x) \approx 0$,那么 $\log \frac{p_{\text{data}}(x)}{p_\theta(x)}$ 就会趋于无穷大。为了避免巨大的惩罚,模型 $p_\theta(x)$ 必须尽力去“覆盖”真实数据分布中的所有模式。 当模型容量(参数量)不足时,这种“宁可多包,不可漏掉”的性质会逼迫模型将概率密度平摊到低概率区域,在视觉生成中表现为图像的模糊和失真。
2. 经典 GAN 的对抗目标与最优判别器
生成对抗网络(GAN)通过引入一个判别器 $d(x)$ 来区分真实样本和生成样本,其极小极大博弈目标函数为:
\[\min_g \max_d V(d, g) = \mathbb{E}_{x \sim p_{\text{data}}} [\log d(x)] + \mathbb{E}_{x \sim p_g} [\log (1 - d(x))]\]对于任意固定的生成器分布 $p_g(x)$(这里我们用目标似然模型 $p_\theta(x)$ 代替),我们来推导其最优判别器 $d^*(x)$ 的解析解。 我们将目标函数展开为积分形式:
\[V(d) = \int \left[ p_{\text{data}}(x) \log d(x) + p_\theta(x) \log (1 - d(x)) \right] dx\]为了使积分最大,我们需要对积分内部的每一项(对应每个 $x$)求最大值。令被积函数为 $f(y) = a \log y + b \log (1-y)$,其中 $y = d(x) \in [0, 1]$,常数 $a = p_{\text{data}}(x)$,$b = p_\theta(x)$。
对 $y$ 求一阶导数并令其为 0:
\[f'(y) = \frac{a}{y} - \frac{b}{1-y} = 0 \implies a(1-y) = by \implies y = \frac{a}{a+b}\]将 $a$ 和 $b$ 替换回原概率密度,即可得到最优判别器:
\[d^*(x) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_\theta(x)}\]第二部分:DDO 核心数学推导
GAN 虽然能产生清晰的边界,但交替训练生成器与判别器极易导致训练崩溃。DDO 的精妙之处在于:彻底丢弃显式判别器,用生成模型自身的似然来表达判别器。
1. 隐式判别器参数化 (Implicit Discriminator Parameterization)
我们首先引入一个已经预训练好且冻结的参考模型 (Reference Model) $p_{\theta_{\text{ref}}}(x)$。我们将生成“假数据”的任务交给 $p_{\theta_{\text{ref}}}$。
根据前述 GAN 的推导,如果要区分真实数据 $p_{\text{data}}$ 和参考模型生成的假数据 $p_{\theta_{\text{ref}}}$,最优判别器的形式为:
\[d^*(x) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_{\theta_{\text{ref}}}(x)}\]我们对其分子分母同除以 $p_{\theta_{\text{ref}}}(x)$:
\[d^*(x) = \frac{\frac{p_{\text{data}}(x)}{p_{\theta_{\text{ref}}}(x)}}{\frac{p_{\text{data}}(x)}{p_{\theta_{\text{ref}}}(x)} + 1}\]利用 Sigmoid 函数 $\sigma(u) = \frac{1}{1 + e^{-u}} = \frac{e^u}{e^u + 1}$ 的性质,上式可以写为:
\[d^*(x) = \sigma\left( \log \frac{p_{\text{data}}(x)}{p_{\theta_{\text{ref}}}(x)} \right)\]由于真实数据分布 $p_{\text{data}}(x)$ 无法直接求出似然,我们无法计算真实的 $d^*(x)$。 但我们的训练目标是让可学习的模型 $p_\theta(x)$ 逼近 $p_{\text{data}}(x)$。因此,DDO 提出:直接用可学习的模型 $p_\theta(x)$ 来替换未知项 $p_{\text{data}}(x)$。从而定义出隐式判别器 (Implicit Discriminator):
\[d_\theta(x) := \sigma\left( \log \frac{p_\theta(x)}{p_{\theta_{\text{ref}}}(x)} \right)\]2. 最优解证明 (Proof of Optimality)
我们将隐式判别器 $d_\theta(x)$ 代入到标准的二分类交叉熵损失中,定义 DDO 的训练目标函数:
\[\min_\theta L(\theta) = - \mathbb{E}_{x \sim p_{\text{data}}} [\log d_\theta(x)] - \mathbb{E}_{x \sim p_{\theta_{\text{ref}}}} [\log (1 - d_\theta(x))]\]现在我们来证明,在模型容量无限的情况下,该目标的全局最优解恰好是 $p_\theta^* = p_{\text{data}}$ Optimal Solution。
将损失展开为积分形式:
\[L(\theta) = - \int \left[ p_{\text{data}}(x) \log \sigma\left( \log \frac{p_\theta(x)}{p_{\theta_{\text{ref}}}(x)} \right) + p_{\theta_{\text{ref}}}(x) \log \left( 1 - \sigma\left( \log \frac{p_\theta(x)}{p_{\theta_{\text{ref}}}(x)} \right) \right) \right] dx\]设 $r_\theta(x) = \log \frac{p_\theta(x)}{p_{\theta_{\text{ref}}}(x)}$。这是一个 pointwise(逐点)的优化问题,根据前面的引理,对于任意固定的 $x$,使 pointwise 损失最小的 Sigmoid 输入对应的值,必须满足:
\[\sigma(r_\theta^*(x)) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_{\theta_{\text{ref}}}(x)}\]由于:
\[\sigma(r_\theta^*(x)) = \sigma\left( \log \frac{p_\theta^*(x)}{p_{\theta_{\text{ref}}}(x)} \right) = \frac{\frac{p_\theta^*(x)}{p_{\theta_{\text{ref}}}(x)}}{\frac{p_\theta^*(x)}{p_{\theta_{\text{ref}}}(x)} + 1} = \frac{p_\theta^*(x)}{p_\theta^*(x) + p_{\theta_{\text{ref}}}(x)}\]因此,我们得到恒等式:
\[\frac{p_\theta^*(x)}{p_\theta^*(x) + p_{\theta_{\text{ref}}}(x)} = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_{\theta_{\text{ref}}}(x)}\]两边交叉相乘:
\[p_\theta^*(x) \left( p_{\text{data}}(x) + p_{\theta_{\text{ref}}}(x) \right) = p_{\text{data}}(x) \left( p_\theta^*(x) + p_{\theta_{\text{ref}}}(x) \right)\] \[p_\theta^*(x) p_{\text{data}}(x) + p_\theta^*(x) p_{\theta_{\text{ref}}}(x) = p_{\text{data}}(x) p_\theta^*(x) + p_{\text{data}}(x) p_{\theta_{\text{ref}}}(x)\]消去共有项 $p_\theta^*(x) p_{\text{data}}(x)$ 得到:
\[p_\theta^*(x) p_{\theta_{\text{ref}}}(x) = p_{\text{data}}(x) p_{\theta_{\text{ref}}}(x)\]在 $p_{\theta_{\text{ref}}}(x) > 0$ 的有效定义域内,两边除以 $p_{\theta_{\text{ref}}}(x)$,即证:
\[p_\theta^*(x) = p_{\text{data}}(x)\]结论: 最小化 DDO 损失 $L(\theta)$,等价于直接让参数化模型 $p_\theta$ 去拟合真实数据分布 $p_{\text{data}}$。
第三部分:DDO 梯度的深层机制分析
为了看清 DDO 在训练时是如何具体“推拉”概率密度的,我们需要对损失函数 $L(\theta)$ 关于模型参数 $\theta$ 求梯度。
1. 梯度推导
首先,我们需要复习 Sigmoid 函数导数的一个重要性质。设 $y = \sigma(u)$,则:
\[\frac{d}{du} \log \sigma(u) = 1 - \sigma(u)\] \[\frac{d}{du} \log(1 - \sigma(u)) = -\sigma(u)\]由于 $r_\theta(x) = \log p_\theta(x) - \log p_{\theta_{\text{ref}}}(x)$ 且参考模型被冻结(对 $\theta$ 的导数为 0),因此:
\[\nabla_\theta r_\theta(x) = \nabla_\theta \log p_\theta(x)\]现在我们对 DDO 损失的两个部分分别求梯度:
- 第一项(真实数据部分)的梯度:
- 第二项(参考模型生成假数据部分)的梯度:
将两项合并,得到 DDO 的总梯度表达式:
\[\nabla_\theta L(\theta) = \int \left[ - p_{\text{data}}(x) (1 - d_\theta(x)) + p_{\theta_{\text{ref}}}(x) d_\theta(x) \right] \nabla_\theta \log p_\theta(x) dx\]现在,我们把隐式判别器 $d_\theta(x) = \frac{p_\theta(x)}{p_\theta(x) + p_{\theta_{\text{ref}}}(x)}$ 及其补色 $1 - d_\theta(x) = \frac{p_{\theta_{\text{ref}}}(x)}{p_\theta(x) + p_{\theta_{\text{ref}}}(x)}$ 代入括号中:
\[- p_{\text{data}}(x) (1 - d_\theta(x)) + p_{\theta_{\text{ref}}}(x) d_\theta(x) = - p_{\text{data}}(x) \frac{p_{\theta_{\text{ref}}}(x)}{p_\theta(x) + p_{\theta_{\text{ref}}}(x)} + p_{\theta_{\text{ref}}}(x) \frac{p_\theta(x)}{p_\theta(x) + p_{\theta_{\text{ref}}}(x)}\]提取公因式 $\frac{p_{\theta_{\text{ref}}}(x)}{p_\theta(x) + p_{\theta_{\text{ref}}}(x)} = 1 - d_\theta(x)$:
\[= (1 - d_\theta(x)) \left[ p_\theta(x) - p_{\text{data}}(x) \right]\]代回积分式,我们得到了极其优雅且物理含义深刻的最终梯度公式 Mechanistic Gradient:
\[\nabla_\theta L(\theta) = \int (1 - d_\theta(x)) \left( p_\theta(x) - p_{\text{data}}(x) \right) \nabla_\theta \log p_\theta(x) dx\]2. 物理意义解析(对比力机制)
在参数空间中,梯度下降的更新方向为 $-\nabla_\theta L(\theta)$。我们可以将该更新拆解为两股相互竞争和修正的“对比力”:
| 条件状态 | 梯度的括号项 $\left( p_\theta(x) - p_{\text{data}}(x) \right)$ | 对模型似然 $\log p_\theta(x)$ 的更新作用 |
|---|---|---|
| 模型高估了该区域的密度 ($p_\theta(x) > p_{\text{data}}(x)$) | 值为正($> 0$) | 压低该处的似然 (促使模型在该点生成概率变小) |
| 模型低估了该区域的密度 ($p_\theta(x) < p_{\text{data}}(x)$) | 值为负($< 0$) | 拉高该处的似然 (促使模型更频繁地在该点生成) |
权重系数 $1 - d_\theta(x)$ 的动态调节作用
梯度公式前的系数 $1 - d_\theta(x)$ 代表了隐式判别器认为样本是假样本的概率。
- 如果某样本非常真实,判别器打分 $d_\theta(x) \approx 1$,则权重 $1 - d_\theta(x) \approx 0$,模型对此样本几乎不更新,防止破坏已有的高保真生成能力。
- 如果某样本被判别器一眼识破为假图像,$d_\theta(x) \approx 0$,则权重 $1 - d_\theta(x) \approx 1$,此时施加最强烈的梯度纠正,迫使模型迅速修改该处的生成分布。
第四部分:DDO 与 DPO 的深层对比
虽然 DDO 与 DPO 都采用了“丢弃显式网络、用似然比表达目标”的哲学,但它们在数学设计和解决的问题上面临着不同的数学边界。
flowchart TD
A[DPO: 偏好对齐] --> B[输入配对数据 y_w, y_l]
B --> C[拉大 y_w 与 y_l 的相对似然差]
D[DDO: 分布对齐] --> E[输入非配对数据 p_data, p_ref]
E --> F[使生成分布 p_θ 拟合真实分布 p_data]
DPO (Direct Preference Optimization): 用于语言模型的人类反馈对齐(RLHF)。它处理的是成对偏好数据 $(y_w, y_l)$(即胜利回答与失败回答)。DPO 的目标是拉大好回答与坏回答之间的似然差距,它并不直接限制模型的绝对概率分布,只优化其相对排序:
\[L_{\text{DPO}}(\theta) = -\mathbb{E} \left[ \log \sigma\left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\theta_{\text{ref}}}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\theta_{\text{ref}}}(y_l|x)} \right) \right]\]DDO (Direct Discriminative Optimization): 用于视觉生成模型的无监督对抗微调。它处理的是非配对的数据(真实的训练数据集 $p_{\text{data}}$,与参考模型生成的假数据 $p_{\theta_{\text{ref}}}$)。它的最终数学目标是实现完整的分布匹配(Distribution Alignment),让整个数据空间的生成概率分布与真实分布重合 Comparison with DPO。
