模型90%置信还翻车一篇讲透证据深度学习手把手教会模型说我不知道【免费下载链接】annotated_deep_learning_paper_implementations 60 Implementations/tutorials of deep learning papers with side-by-side notes ; including transformers (original, xl, switch, feedback, vit, ...), optimizers (adam, adabelief, sophia, ...), gans(cyclegan, stylegan2, ...), reinforcement learning (ppo, dqn), capsnet, distillation, ... 项目地址: https://gitcode.com/gh_mirrors/an/annotated_deep_learning_paper_implementations如果你花了两周训出一个在测试集上准确率 99% 的分类模型部署第一天就被一张模糊图片打脸——它信誓旦旦给出 95% 置信度结果完全判错——那你大概率正被一个老毛病困扰模型过度自信。要根治它annotated_deep_learning_paper_implementations 项目里的证据深度学习Evidential Deep Learning模块值得你花半小时读懂它位于 labml_nn/uncertainty/evidence/专门用来量化分类模型的不确定性让 AI 学会在拿不准的时候老实说我不知道。一个真实翻车现场99% 置信度的分类器为何在真实场景不堪一击假设你是一家工厂的质检工程师负责用视觉模型筛选皮带轮瑕疵。训练集里全是清晰锐利的样本模型表现近乎完美。可某天来了一张带水渍、光线诡异的图片模型非但不犹豫反而以 96% 的把握判为良品随后流入市场。更气人的是你回头查看推理日志发现它给出的概率分布非常干净——某个类别几乎独占 1.0。这合理吗显然不合理但如果你只用了 softmax你甚至找不到地方说理。softmax 概率到底在说什么——矮子里拔将军式的归一化先给个人话版解释softmax 的作用只是把一堆任意数值归一化成总和为 1。它保证的是这些类里谁相对更高而不是这个判断有多可靠。它像一场不允许弃权的考试——哪怕完全不会也必须每题都写个答案最后每道题都得有分数。哪怕输入来自它完全没见过的分布它照样能吐出一个看起来胸有成竹的漂亮分布。两种不知道别混为一谈偶然不确定性aleatoric数据本身模糊——图片虚焦、类别天然重叠。这种不确定性给再多数据也消不掉物理世界里它就长这样。认知不确定性epistemic模型见识不够——训练分布外的东西、没见过的新情况。这种不确定性可以通过更多数据、更充分的训练来降低。对部署来说真正要命的是第二种模型把没见过误当成很确定。而证据深度学习最擅长的正是把这种没见过显式地量化出来。破局思路别逼模型表态给它一张弃权票证据深度学习的理论根基是 Dempster–Shafer 证据理论。它和 softmax 最大的不同在于不再把概率一次性押在某一个类上而是把信念质量分配给一组类。当模型说我对所有类都持有信念时意思就是——这个我真拿不准可能是任何一个。这就像一位老练的医生看 CT 片子看得准的时候明确说倾向于是 A 病看不准的时候不会硬编结论而是说这个影像我不能确定建议做进一步检查。证据深度学习给了模型说建议进一步检查的合法出口——这个出口就是不确定性质量 u。信念质量与不确定性质量一张票怎么分模型对每个类输出一个非负的证据 e_k表示我收集到多少支持第 k 类的线索然后换算成两个量信念质量 b_k e_k / S不确定性质量 u K / S其中 S Σ(e_k 1)K 是类别数并且 u Σb_k 1 恒成立。直觉上非常好懂如果所有证据都小得可怜S 就接近 Ku 逼近 1——模型等于在说我什么都没见过全靠猜如果某一类的证据异常庞大S 被顶上去u 趋近于 0——模型非常笃定。证据越多弃权票越少逻辑完全自洽。为什么 u 比 softmax 概率诚实softmax 的结构决定了它永远被迫表态而 u 是专门用来装我不知道的桶。一个对分布外输入给出高 u 的模型比一个强行归一化给出 95% 的模型在工程上可信得多——因为前者没有把无知伪装成自信。这也是证据深度学习作为深度学习不确定性估计方案与朴素加个置信度最大的分野。证据从哪来——最后一层换成 ReLU/Softplus 就够了好消息是你不必重写模型。证据深度学习只动最后一层之后。原本输出 logits可以是负数的最后一层在外面套一个 ReLU 或 Softplus 激活函数就把输出限制成非负的证据 e_k ≥ 0证据再通过一步换算变成狄利克雷分布的参数 α_k e_k 1。狄利克雷分布可以理解成对类别概率分布的概率分布。它像抛硬币实验里的贝叶斯更新你只抛了 10 次得到的概率估计很平坦、很没底抛了一万次估计就尖锐、笃定。证据多α 大分布尖锐证据少α 接近 1分布平坦。整套换算在源码 labml_nn/uncertainty/evidence/init.py 里不过几十行。证据→狄利克雷核心换算只有三个数给定证据向量 e你只需要记住三个派生量狄利克雷参数 α_k e_k 1狄利克雷强度 S Σα_k期望概率 p̂_k α_k / S不确定性 u K / Sp̂_k 负责该选哪一类决策u 负责这次决策可不可信信任度。一个管冲锋一个管刹车各司其职。训练诚实模型的四份考卷选错损失会教坏孩子光有结构还不够模型得靠损失函数学会何时该有把握、何时该认怂。项目实现了三种可选的主损失外加一份常驻的正则附加题完整清单都在 labml_nn/uncertainty/evidence/init.py 里。考卷一、二最大似然与交叉熵贝叶斯风险MaximumLikelihoodLoss类型二最大似然把狄利克雷当成先验对类别概率积分后求负对数边际似然鼓励正确类别积累证据。CrossEntropyBayesRisk交叉熵贝叶斯风险把交叉熵当作判断错误的代价在所有可能的类别概率分布上求期望代价公式里会出现 digamma 函数。简单说它既看答案对不对也看代价大不大。考卷三平方误差风险——把误差和方差拆开算这是训练实验里的默认选项也最值得玩味。它的损失可以优雅地拆成两项(y_k − p̂_k)² p̂_k(1 − p̂_k) / (S 1)第一项是答案偏了多少误差项第二项是这个估计本身有多没底方差项而且方差会随着狄利克雷强度 S 增大而缩小。换句话说模型想降低损失光答对不行还得把证据做足、让底气和准确度一起提上来——这恰好是诚实的数学化表达。考卷四KL 正则——答错时不许硬撑KLDivergenceLoss 是始终叠加的正则项先把正确类的证据从样本里摘掉α̃ y (1−y)α再让剩下的分布尽量贴近完全无知的均匀先验。翻译成人话就是如果一个样本你没把握答对那就老老实实把证据收到接近零别为了凑答案硬编证据。照着源码跑一遍 MNIST三个值得抄走的工程细节项目提供了开箱即用的 MNIST 训练脚本 labml_nn/uncertainty/evidence/experiment.py用的是 LeNet 风格的小网络配合 Adam、0.5 的 Dropout默认用 Softplus 出证据、平方误差贝叶斯风险做主损失。直接照抄时有三个细节特别值得留意。细节一KL 惩罚要退火先学会再要求诚实训练早期就施加强 KL 正则会让模型躺平——反正答错也不罚干脆什么都不学。项目用一个退火系数 λ_t 从 0 平滑升到 1对应训练进度 0%→20%→100% 分别是 0→0.01→1让模型先正常学会分类再逐步加强不许硬撑的要求。这个先学走路、再立规矩的思路是能直接搬到其他任务上的通用技巧。细节二训练时就盯住 u.succ 与 u.fail 两条曲线TrackStatistics 模块会在训练中分别统计预测正确时的不确定性和预测错误时的不确定性。理想情况下答错的样本 u 应该明显高于答对的样本——如果两条曲线几乎重合说明模型还没学会区分懂和不懂该调损失函数或证据激活了。把它当成模型的诚实度仪表盘来用。细节三证据转换选 Softplus 比 ReLU 更稳ReLU 会把负数直接截成 0导致大量样本的证据为零、梯度容易消失Softplus 光滑且处处可微输出永远是正数训练更稳。除非你有明确理由否则别轻易换回 ReLU。让不确定性真正上岗三个落地动作模型学会了说不知道接下来就看你怎么用这个信号。动作一给 u 设阈值把低置信样本转人工在生产里给 u 定一个阈值用验证集标定u 超限的样本不直接给结论而是进入人工复核队列。这相当于给系统装了一条拿不准就问人的逃生通道对质检、医疗、风控这类场景几乎是刚需。动作二用高 u 样本做主动学习把不确定性当成哪些数据最值得标注的信号优先让人工标注 u 高的样本往往能用最少的人力最快提升模型在疑难区域的性能比随机采样划算得多。动作三风险敏感场景把 u 写进决策函数当错判和拒答的代价不对称时比如把次品放行 vs 把良品拦下复检可以把 u 直接作为决策权重让系统在拿不准时自动倾向更安全的动作而不是硬着头皮二选一。写在最后给 AI 装刹车而不是只教它踩油门回头看那个翻车现场问题的根源不在于模型不够聪明而在于我们训练它时从来没给它承认无知的选项。证据深度学习最打动人的地方是它把我不知道变成了一等公民结构上给你弃权票不确定性 u训练上给你诚实的考卷四类损失部署上给你可操作的信号u 阈值、主动学习。如果你想亲手感受这种变化最快的方式是克隆仓库 https://gitcode.com/gh_mirrors/an/annotated_deep_learning_paper_implementations 跑一遍 labml_nn/uncertainty/evidence/experiment.py 的 MNIST 实验再对比三种主损失下的 u.succ 与 u.fail 曲线。当你在训练日志里亲眼看到答错的样本不确定性明显更高那一刻你会理解一个真正可靠的 AI重要的不是永远答对而是永远知道自己几斤几两。配套的图文解读还可以在 docs/uncertainty/evidence/ 里找到。【免费下载链接】annotated_deep_learning_paper_implementations 60 Implementations/tutorials of deep learning papers with side-by-side notes ; including transformers (original, xl, switch, feedback, vit, ...), optimizers (adam, adabelief, sophia, ...), gans(cyclegan, stylegan2, ...), reinforcement learning (ppo, dqn), capsnet, distillation, ... 项目地址: https://gitcode.com/gh_mirrors/an/annotated_deep_learning_paper_implementations创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考