ELAI S.r.l.

模仿 AI 模型:覆盖所有可能,还是集中一种?

完整计算说明:候选族受限时,反转 KL 散度为何改变最佳近似。

模仿 AI 模型:覆盖所有可能,还是集中一种?

同样的概率,两种不同的错误代价

小模型要近似更丰富的分布。在表达能力受限时,惩罚遗漏与惩罚缺乏依据的提议不是同一要求。Kullback–Leibler 散度简称 KL,具有方向性,交换参数可能改变近似选择。我们用三个类别和三个候选,不伪装成大模型训练实验。

谁在为每种误差加权?

p 是参考分布,q 是候选,定义在相同类别上,非负且和为一。自然对数给出单位 nat。D_KL(p||q) 用 p_i 加权 log(p_i/q_i),反向则用 q_i 加权 log(q_i/p_i)。KL 不对称,也不必满足三角不等式,不能称为度量距离。“KL 损失”一词省略了目标函数的重要部分。

D_KL(p||q) = Σ_i p_i log(p_i/q_i); D_KL(q||p) = Σ_i q_i log(q_i/p_i)

p 固定时,第一准则等价于最小化交叉熵 −Σ p_i log q_i,因为 Σ p_i log p_i 对候选不变。即使 q 想忽略,p 中重要类别仍有权重。反向则由 q 决定各区域贡献频率。但这不证明反向 KL 永远选单峰,必须说明候选族约束。

可以完整复算的比较

参考 p=(0.495,0.01,0.495),两端类别常见,中间稀有。宽候选 q_W=(0.34,0.32,0.34) 覆盖两端却过度分配中间;q_L=(0.98,0.01,0.01) 偏向左端,q_R 为镜像。这三个向量构成全部允许族,不声称是高斯网络或某架构训练最优解,只比较有限备选。

p||q_L 的第三项 0.495·log(0.495/0.01) 很大,因为候选几乎删除参考常见事件。q_W||p 的中间项 0.32·log(0.32/0.01) 则惩罚过度生成稀有类别。单项可为负,总 KL 非负。执行结果:p||q 选 W,q||p 则 L、R 并列。

候选p || q(nat)q || p(nat)
W0.3371990.853619
L1.5933940.630315
R1.5933940.630315
比较各候选同色柱:反转方向改变有限族中的最小值。自然对数,未执行训练。
比较各候选同色柱:反转方向改变有限族中的最小值。自然对数,未执行训练。

零改变的不只是数值,还有定义域

按约定零权重项贡献零,但 p_i>0、q_i=0 会令 p||q 无限。硬候选 (0.99,0.01,0) 的正向 KL 无限,对严格正的参考 p,反向却有限。加 epsilon 可去除无穷,却改变分布,必须重新归一并说明近似的问题。

没有约束,两者都选择参考分布

取消三个候选的限制,若 q 可以等于 p,两方向都达零且不能更低。正分布下 log z≤z−1,故 Σp_i log(q_i/p_i)≤Σ(q_i−p_i)=0,取负即 KL≥0,等号要求 q=p;支持边界另按零约定处理。差异来自表达约束,不是互相矛盾的概率真理。

以 q 的正分量作坐标,正向导数为 −p_i/q_i,反向为 log(q_i/p_i)+1。归一参数化还须链式法则与和约束,不能直接当更新规则。真实训练需要采样、梯度估计及表达族分析,本文均未执行,也未测生成文本质量或偏好。

选择方向,就是选择比较方式

反转 KL 不是形式变化,本有限例子中权重不同导致最佳候选改变。蒸馏与生成建模应先写清参考、候选、支持集及约束,再讨论损失。“覆盖”“集中”只是须在具体问题中验证的直觉,不能代替实验。来源说明定义,有限算例是可复现教学分析。

SciPy 1.18.0 — Relative entropy.

import math,json,sys
from pathlib import Path
p=[.495,.01,.495];candidates={'wide':[.34,.32,.34],'left':[.98,.01,.01],'right':[.01,.01,.98]}
def kl(a,b):
 assert abs(sum(a)-1)<1e-12 and abs(sum(b)-1)<1e-12
 if any(x>0 and y==0 for x,y in zip(a,b)):return math.inf
 return math.fsum(x*math.log(x/y) for x,y in zip(a,b) if x>0)
rows=[dict(name=k,q=q,forward=kl(p,q),reverse=kl(q,p)) for k,q in candidates.items()]
assert min(rows,key=lambda x:x['forward'])['name']=='wide'
assert rows[1]['reverse']<rows[0]['reverse'] and abs(rows[1]['reverse']-rows[2]['reverse'])<1e-12
assert kl(p,p)==0 and math.isinf(kl(p,[.99,.01,0])) and math.isfinite(kl([.99,.01,0],p))
r=dict(python=sys.version.split()[0],seed=None,scope='Exact finite candidate comparison, not training or inference benchmark',p=p,rows=rows,hardReverse=kl([.99,.01,0],p),hardForward='infinite',units='nats, natural logarithms')
Path(__file__).with_name('results.json').write_text(json.dumps(r,indent=2),encoding='utf8')

代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 25 日。