实现 KL 散度(Kullback-Leibler Divergence)的计算。
KL 散度衡量用分布 Q 去近似分布 P 时损失的信息量,是交叉熵与熵的差值,在知识蒸馏、变分推断、RLHF 的策略约束里都作为正则项出现。
给定 m 组样本,每组包含两个长度为 n 的离散概率分布 P 和 Q,计算每组的 KL 散度并求平均:
DKL(P∥Q)=j=1∑nPjlogQjPj result=m1i=1∑mDKL(P(i)∥Q(i))其中 log 为自然对数。
第一行输入两个整数 m(1≤m≤500)和 n(2≤n≤100),分别表示样本组数和类别数。
接下来 m 行,每行输入 n 个浮点数,表示分布 P,每行和为 1,且每个分量 Pj(0.0001≤Pj≤1)。
再接下来 m 行,每行输入 n 个浮点数,表示分布 Q,每行和为 1,且每个分量 Qj(0.0001≤Qj≤1)。
输出平均 KL 散度,保留 6 位小数。
输入
2 3
0.5000 0.3000 0.2000
0.1000 0.2000 0.7000
0.4000 0.4000 0.2000
0.2000 0.3000 0.5000
输出
0.055195
说明
第 1 组:0.5ln0.40.5+0.3ln0.40.3+0.2ln0.20.2≈0.025267。
第 2 组:0.1ln0.20.1+0.2ln0.30.2+0.7ln0.50.7≈0.085123。
两组平均得 0.055195。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册