如何用 KL 散度监控输出分布漂移并设置动态阈值?

解读

在国内大模型上线后,监管要求“输出内容必须可追溯、可回滚”,因此线上监控不能只看准确率,而要实时捕捉“模型说了什么”的分布变化。KL 散度(Kullback-Leibler Divergence)天然适合度量“旧分布”与“新分布”的差异,是工信部《生成式人工智能服务管理暂行办法》中隐式认可的统计指标之一。面试官问这道题,想看你是否能把数学指标做成7×24 小时无人值守的告警系统,并且符合等保 2.0 日志留存 180 天的合规要求。

知识点

  1. KL 散度定义:DKL(P||Q)=∑iP(i)logP(i)/Q(i),非负、非对称,越大表示漂移越严重。
  2. 输出分布的“桶”怎么建:中文场景下用BPE 词表 50000 维直接算会爆炸,工业界做法是把 Top-5000 Token + 1 个“其他”做归一化,既降维又保留 99.6% 概率质量。
  3. 参考分布 P 的选取
    • 离线 Golden Batch:上线前 7 天稳定流量的每小时输出分布做平滑后存为 P;
    • 在线滑动窗口:用过去 24 h 的指数加权平均作为 P,可自适应节日热点。
  4. 动态阈值三要素
    • 基线 μ 与 σ:过去 14 天 DKL 序列的指数加权均值与标准差;
    • 业务系数 k:客服场景 k=2,医疗场景 k=3,满足**《人工智能医疗器械注册审查指导原则》**对误报率<1% 的要求;
    • 阈值公式:τt = μt + k·σt + ε,ε=0.02 防止 σ→0 时的抖动。
  5. 工程落地
    • 日志流:Kafka → Flink SQL 计算每 5 min 窗口的 Top-K 概率 → Redis 存 P、Q;
    • 告警:当 DKL>τt 连续 2 个窗口即触发,写入 Elasticsearch 并同步到企业微信机器人
    • 回滚:自动将流量打到上一版模型,并生成**符合《互联网信息服务算法推荐管理规定》**的人工复核工单。
  6. 合规细节
    • 所有分布向量AES-256 加密落盘,密钥托管在国有云 KMS
    • 告警记录包含 trace-id、版本号、DKL 值、Top-10 漂移 Token,保存 180 天备查

答案

给面试官一个可直接落地的 90 秒回答:
“我会先对线上模型每 5 分钟采样一次输出 Top-5000 Token 概率,归一化后得到 Qt;参考分布 Pt 采用过去 24 小时指数加权平均,既抗热点又省存储。KL 散度 DKL(Pt||Qt) 计算后进入动态阈值系统:用过去 14 天的 DKL 序列算指数加权 μt 与 σt,阈值 τt=μt+k·σt+0.02,k 按业务风险选 2 或 3。连续两次超过 τt 即触发告警,自动回滚并生成合规工单,所有数据加密后存 180 天,满足等保与算法备案要求。整个链路用 Flink+Redis+Elasticsearch,端到端延迟 <30 s,已在实际项目运行 6 个月,零误报回滚 3 次,均发现是上游 Prompt 模板被运营误改导致。”

拓展思考

  1. 多语言场景:如果模型同时输出中英文,可按语言 ID 拆分两个分布分别算 KL,避免英文 Token 膨胀稀释中文漂移。
  2. 稀疏化升级:对 100B 模型可用Count-Min Sketch + 哈希分桶把 Top-K 降到 Top-256,内存占用从 200 MB 降到 3 MB,适合边缘节点。
  3. 与奖励模型联动:当 KL 告警触发后,可用同一批日志立刻计算奖励模型均值,若奖励也下降则确认是质量漂移而非分布“良性扩张”,实现二次确认降低误报
  4. 监管沙箱:在上海、北京人工智能创新应用先导区试点中,监管部门要求企业提交“分布漂移日报”,可把每日 τt、μt、σt 自动打包成 CSV,通过国密算法签名后上传,实现一键合规。