尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

执行噪声下意图推断:区分Aleatoric与Epistemic不确定性

执行噪声下意图推断:区分Aleatoric与Epistemic不确定性 当你在高速上开车前车突然向左偏移 30 厘米接着又马上回正。自车的预测模块必须在几百毫秒内回答一个问题这到底是前车准备变道的真实意图还是路面不平、侧风导致的无意偏移把这个场景抽象出来就是本文标题所描述的问题我们在有执行噪声Execution Noise的条件下做意图推断Intention Inference。你观察到的每一个动作都是“对方真实意图 执行过程引入的随机扰动”的混合体。如果系统不能区分这两部分就会陷入两个极端把噪声当恶意或把恶意当噪声。更麻烦的是这类问题一旦放到 Social Dilemmas社会困境中就不再只是单纯的预测问题。因为合作与背叛的收益不对称一次误判可能会引发连锁反应对方合作但动作被噪声扭曲你误判为背叛于是你选择背叛对方下一轮也选择背叛最终双方都陷入纳什均衡的劣结果。本文的核心判断是在带执行噪声的交互场景里做意图推断必须把不确定性拆成两类——Aleatoric Uncertainty偶然不确定性和 Epistemic Uncertainty认知不确定性并且分别建模、分别应对。只看一个笼统的“置信度低”在真实系统里基本无法指导决策。我会先用通俗方式解释这两个概念的差别然后说明为什么 Social Dilemmas 场景尤其需要这种分离最后给出三个可运行的 Python 示例展示如何把这种思想落到代码上。1. 这篇文章真正要解决的问题先聊聊开发者的痛点。很多团队在做人机协作、自动驾驶预测、多智能体博弈这类系统时都会遇到同一个问题模型对某个交互行为的预测置信度很低。于是大家本能地开始“补数据”“换模型”“调阈值”但改来改去效果不稳定。问题就在于我们通常只看到了“不确定性高”这个现象却不知道这个高不确定性从哪来。在意图推断任务里不确定性主要有两个来源第一执行噪声。机械臂的伺服误差、车辆底盘的路面扰动、通信链路的延迟抖动、对手行为的随机性这些因素会让同一个意图产生不同的可观测动作。这类不确定性是数据生成过程自带的随机性即使你把模型训练得无限好它也不会消失。第二知识缺失。模型没见过这种场景、训练数据里这类样本太少、或者对手的策略在持续演化导致模型不知道该用什么假设去解释当前观测。这类不确定性是模型本身的无知只要增加数据、增加特征、改进结构就能降低。前者叫偶然不确定性Aleatoric后者叫认知不确定性Epistemic。这两个概念来自贝叶斯视角下的不确定性建模但在实际工程系统里它们并不是学术黑话而是两个完全不同的处理分支。如果你不区分它们会遇到两难把执行噪声当成恶意行为系统会过度反应。自动驾驶中前车一个普通的颠簸偏移可能引发急刹车多智能体协作中队友一次被噪声干扰的动作可能被你判定为背叛从而触发报复策略。把真正的策略变化当成噪声系统会被持续利用。对方已经开始连续背叛你却认为“只是动作波动而已”继续选择合作收益被不断压低。这两种失败都不可接受。所以靠谱的做法是在建模阶段就把不确定性拆开哪一部分是 aleatoric哪一部分是 epistemic然后分别设计应对策略。这篇文章适合三类读者做多智能体强化学习MARL、博弈论建模的研究者尤其是关注对手建模和意图推断的人。做自动驾驶预测、机器人交互、人机协作系统的算法工程师。对贝叶斯深度学习、不确定性量化感兴趣的开发者想找一个有具体场景的入门示例。2. 核心概念意图推断、执行噪声与两类不确定性2.1 意图推断是什么意图推断简单说就是根据观测到的行为反推行为背后那个不可见的意图。在自动驾驶里是判断“前车会不会变道”在人机交互里是判断“用户是想删除还是想编辑”在多智能体博弈里是判断“对手这轮是在合作还是准备背叛”。用数学语言概括假设真实意图是 z可观测动作是 y通常建模为y g(z) ε其中 g 是意图到动作的策略映射ε 是执行噪声。意图推断要解决的问题就是根据一串观测 y 去估计后验概率 P(z | y)。这里的难点在于同一个 y 可能对应完全不同的 z。比如观测到“对手动作偏离了合作基准”既可能是因为对手真实意图是背叛也可能是因为他本来想合作但机械臂抖了一下。如果不区分原因推断结果就会有偏差。2.2 执行噪声意图与动作之间的失真执行噪声是意图和动作之间那层“失真”。它可能来自物理执行器误差也可能来自策略本身的随机性比如 exploration noise。在现实系统中执行噪声几乎无法避免。即便是最精密的机械臂也不可能做到每一次动作都精确复现目标轨迹。更别说在博弈场景里对手的策略本身往往就是随机的故意让观察者无法轻易摸清底牌。所以执行噪声不是可以忽略的“小扰动”它应当被当作意图推断模型的一部分来显式建模。2.3 Aleatoric 与 Epistemic一个核心分类这两类不确定性是本文的基石先把定义说清楚Aleatoric Uncertainty偶然不确定性来自系统固有的随机性。它和模型无关增大训练数据很难消除。典型例子是掷硬币即使你完全理解物理规律下一面朝上依然随机。在意图推断中执行噪声引入的就是典型的 aleatoric 不确定性。Epistemic Uncertainty认知不确定性来自模型知识的不足。它和模型有关可以通过更多数据、更好的特征、更合适的模型结构来降低。典型例子是模型从未见过雪地路面当它在雪地上做变道预测时不知所措。这种未知是可以被学习消除的。用一个表格对比对比维度Aleatoric UncertaintyEpistemic Uncertainty来源数据生成过程中的固有随机性模型知识的缺失能否被数据消除基本不能增加数据仍存在能增加数据可降低对策略的启发不应过度反应应做鲁棒决策应主动探索、补充数据、请求接管意图推断中的示例执行噪声、传感噪声、对手随机策略没见过的场景、样本稀疏的策略类型在意图推断场景中这两类不确定性常常同时存在。一个观测动作 y既带有不可约减的随机噪声又可能来自一个模型从未见过的策略类型。把二者混在一起你就不知道该“信任”还是该“怀疑”这个推断结果。2.4 Social Dilemmas为什么要单独提它Social Dilemmas社会困境是一类博弈场景的统称典型代表是囚徒困境、公共物品博弈、资源分配博弈。它们的共同结构是个体理性导致集体非理性局中人需要依据对其他人的信任来决定是合作还是背叛。这类场景和普通预测任务最本质的区别是你推断的不是一个静止对象而是一个会针对你的反应调整策略的对手。你的意图推断会影响你的行动你的行动又会改变对手下一步的行为最终形成一个闭环。所以在 Social Dilemmas 里做意图推断不只是“预测准不准”的问题而是“你的预测会反过来塑造你们之间的关系”。3. 为什么社会困境场景特别需要区分两类不确定性3.1 误判会在博弈中形成恶性循环假设两个 agent 进行重复囚徒困境博弈其中一个采用“以牙还牙”策略第一轮合作之后复制对手上一轮的动作。现在引入执行噪声。假设合作 agent 某一轮想执行“合作”但动作被噪声扰动偏离了合作基准。观察者如果直接按动作判断会误判为背叛于是下一轮它选择背叛。被误判的一方看到对方背叛也选择背叛。从这一轮开始双方进入互相背叛的循环而执行噪声只是最开始的导火索。这就是 Social Dilemmas 的特殊性在静态分类任务里误判一次损失有限在重复博弈里一次误判可能触发长期的不信任导致 Pareto 最优的合作均衡被破坏。3.2 两类不确定性对应不同的应对策略如果系统能够识别“当前推断不确定性的主要来源是执行噪声”那么合理决策是这次观测的偏差不代表对方意图变化我可以继续维持之前的信念甚至用一个更保守的合作策略来试探。如果系统识别出“当前不确定性的主要来源是模型对这类策略不熟悉”那么合理决策是不要轻易下结论应该收集更多观测或者直接进入安全模式不要把高置信度动作压在这个推断上。换句话说aleatoric 高时我们做鲁棒决策epistemic 高时我们做保守决策和主动探索。很多团队在落地时犯的错误是把这两件事混为一谈看到一个高不确定性就选择“请求人工接管”结果只要环境噪声略大系统频繁接管完全不可用。正确的做法是先归因再决定。3.3 分离不确定性实际上是在建立“可解释的信任机制”信任在协作系统中是一个动态变量。把不确定性分离出来相当于给信任机制提供了一个归因信号如果我判断对方是“噪声导致的偏差”我选择宽容维持合作。如果我判断对方是“真实的背叛意图”我选择回应触发惩罚。如果我不知道是哪种情况“epistemic 高”我选择等待更多证据减少误判风险。这种机制在自动驾驶里同样适用。前车偏移的预测不确定性如果来自路面噪声系统应保持车道如果来自模型从未见过的异形车系统应减速拉大间距。统一输出一个方差根本做不到这种差异化决策。4. 一个最小教学实验设计为了让上面的概念落地下面设计一个最小的教学实验。它不追求复现某篇论文而是把“执行噪声下的意图推断 不确定性分离”这个建模思路拆开让大家能直观看到每一部分在做什么。4.1 场景设定我们模拟一个重复囚徒困境真实意图 z ∈ {0, 1}其中 1 表示合作0 表示背叛。合作动作的基准输出是 1.0背叛动作的基准输出是 0.0。观察者看到的动作 y 在基准输出上叠加一个高斯噪声 ε ~ N(0, σ²)。4.2 两个观测者模型我们设计两种观测者第一种是“精确贝叶斯观测者”。它已知噪声方差 σ²每次看到新的动作 y就更新对合作意图的后验概率。这是最直观的意图推断过程。第二种是“神经网络观测者”。它要从一组特征 x 中同时输出两个结果意图分类、动作预测的 aleatoric 方差。在推理时通过 MC Dropout 得到 epistemic 方差。4.3 两种不确定性在实验中的定义Aleatoric Uncertainty执行噪声方差 σ²。这是实验里已知的、不可消除的随机性。Epistemic Uncertainty观测者对对方策略的认知置信度。在贝叶斯更新里它体现在先验的宽度和观测数量上在神经网络里它体现在 MC Dropout 多次前向的预测离散程度。这个设计足够简单能让我们把核心机制跑通。5. 环境准备与基础配置5.1 运行环境示例代码使用 Python需要以下依赖Python 3.9 或更高版本numpytorch仅示例 2 需要示例 1 和示例 3 不需要推荐用 conda 或 venv 创建独立环境python -m venv intention_env source intention_env/bin/activate # Windows 下执行 intention_env\Scripts\activate pip install numpy torch版本建议以实际发布版本为准本文演示的是通用思路不绑定特定版本。5.2 项目文件结构建议按下面的结构组织代码intention_uncertainty/ ├── bayesian_update.py # 示例 1贝叶斯意图推断 ├── mc_dropout_model.py # 示例 2MC Dropout 神经网络 ├── simulate_dilemma.py # 示例 3社会困境模拟 └── README.md下面逐个实现。6. 示例 1用贝叶斯更新做基础意图推断6.1 代码实现文件路径bayesian_update.pyimport numpy as np # 参数设定 sigma_noise 0.6 # 执行噪声标准差对应 aleatoric 不确定性 prior_co 0.5 # 先验概率初始认为合作与背叛各占一半 # 连续动作观测值越接近 1.0 表示越像合作越接近 0.0 表示越像背叛 observations [1.2, 0.1, 0.9, -0.2] def gaussian_likelihood(y, intent, sigma): 在给定真实意图 intent 和噪声方差 sigma 时观测到动作 y 的概率。 if intent 1: return np.exp(-0.5 * ((y - 1.0) / sigma) ** 2) / (sigma * np.sqrt(2 * np.pi)) else: return np.exp(-0.5 * ((y - 0.0) / sigma) ** 2) / (sigma * np.sqrt(2 * np.pi)) p_co prior_co for y in observations: like_co gaussian_likelihood(y, 1, sigma_noise) like_de gaussian_likelihood(y, 0, sigma_noise) # 贝叶斯更新后验 似然 * 先验 / 归一化常数 p_co p_co * like_co / (p_co * like_co (1 - p_co) * like_de) print(f观测序列: {observations}) print(f后验合作概率: {p_co:.4f}) print(f后验背叛概率: {1 - p_co:.4f})6.2 代码解读这段代码的核心是贝叶斯公式。先验prior_co表示在没有任何观测时我们认为对方合作的概率是 0.5。每看到一个动作 y我们就计算“如果对方合作产生这个动作的概率”和“如果对方背叛产生这个动作的概率”然后用这两个似然去更新后验。注意sigma_noise在这里扮演的就是 aleatoric 不确定性的角色。它越大观测 y 对后验的更新幅度越小。也就是说当你认为环境噪声很大时你不会仅凭一个动作就大幅改变对对方意图的判断。7. 示例 2用 MC Dropout 分离两类不确定性贝叶斯更新的问题是它要求我们知道噪声方差 σ²并且需要自己定义似然函数。真实系统中动作观测往往来自高维特征意图也不是简单的 0/1这时候需要用神经网络来做近似。MC Dropout 是一种非常实用的近似方法它可以在不改变模型结构的前提下同时估计 aleatoric 和 epistemic 两类不确定性。7.1 模型定义文件路径mc_dropout_model.pyimport torch import torch.nn as nn import torch.optim as optim import numpy as np torch.manual_seed(0) class IntentionNet(nn.Module): 同时输出意图分类和 aleatoric 对数方差的网络。 def __init__(self, input_dim4, hidden_dim32, dropout0.2): super().__init__() self.dropout dropout self.features nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Dropout(dropout), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Dropout(dropout), ) # 意图头输出合作/背叛两类 logits self.intent_head nn.Linear(hidden_dim, 2) # aleatoric 头输出动作预测的对数方差 self.aleatoric_head nn.Linear(hidden_dim, 1) def forward(self, x): h self.features(x) intent_logits self.intent_head(h) # 限制 log_var 范围避免数值不稳定 log_var torch.clamp(self.aleatoric_head(h), min-6.0, max6.0) return intent_logits, log_var7.2 训练函数def train_synthetic(model, epochs5, batch_size128): 在一个合成数据集上训练网络数据集带有执行噪声。 # 合成数据特征是 4 维随机向量 N 2000 X torch.randn(N, 4) # 真实意图由前两个特征的和决定 true_intent (X[:, 0] X[:, 1] 0).long() # 可观测动作 意图基准 高斯执行噪声 true_action true_intent.float() 0.5 * torch.randn(N) dataset torch.utils.data.TensorDataset(X, true_intent, true_action) loader torch.utils.data.DataLoader(dataset, batch_sizebatch_size, shuffleTrue) optimizer optim.Adam(model.parameters(), lr1e-3) model.train() for epoch in range(epochs): total_loss 0.0 for x_batch, intent_batch, action_batch in loader: optimizer.zero_grad() intent_logits, log_var model(x_batch) # 意图分类损失 cls_loss nn.functional.cross_entropy(intent_logits, intent_batch) # 动作回归损失异方差高斯负对数似然 pred torch.softmax(intent_logits, dim-1)[:, 1] precision torch.exp(-log_var.squeeze(-1)) reg_loss 0.5 * precision * (action_batch - pred) ** 2 0.5 * log_var.squeeze(-1) loss cls_loss reg_loss.mean() loss.backward() optimizer.step() total_loss loss.item() * x_batch.size(0) print(fepoch {epoch}, mean loss: {total_loss / N:.4f}) return model7.3 带不确定性的推理函数def predict_with_uncertainty(model, x, T30): 通过 MC Dropout 预测意图并分离两类不确定性。 返回: mean_prob: 合作意图的平均概率 aleatoric_var: aleatoric 不确定性来自执行噪声 epistemic_var: epistemic 不确定性来自模型认知不足 model.train() # 关键启用 Dropout 才能做 MC 采样 prob_list [] logvar_list [] with torch.no_grad(): for _ in range(T): intent_logits, log_var model(x) prob torch.softmax(intent_logits, dim-1)[:, 1] prob_list.append(prob.cpu().numpy()) logvar_list.append(log_var.squeeze(-1).cpu().numpy()) probs np.stack(prob_list) # shape: (T, N) logvars np.stack(logvar_list) # shape: (T, N) mean_prob probs.mean(axis0) # aleatoric 不确定性 多次采样下对数方差的均值取指数 aleatoric_var np.exp(logvars).mean(axis0) # epistemic 不确定性 多次采样下预测概率的方差 epistemic_var probs.var(axis0) return mean_prob, aleatoric_var, epistemic_var7.4 代码解读这个网络的 aleatoric 头输出的是“动作预测的对数方差”。训练时回归损失采用的是异方差高斯负对数似然它让模型在噪声大的样本上自动增大方差在噪声小的样本上保持小方差。推理时MC Dropout 的核心是推理阶段依然开启 Dropout让同一个输入 x 在 T 次带噪声的前向传播中得到 T 个预测。T 个预测的方差就是 epistemic 不确定性——它衡量的是模型对当前输入的“意见分歧”。分歧越大说明模型越没有把握。需要特别强调这里的model.train()不是让模型继续训练而是为了保持 Dropout 在推理时生效。很多人在使用 MC Dropout 时漏掉这一行导致多次前向结果完全一致epistemic 永远是 0。8. 示例 3模拟社会困境中的不确定性传播8.1 代码实现文件路径simulate_dilemma.pyimport numpy as np # 设定随机种子便于复现 rng np.random.default_rng(42) # 执行噪声标准差 sigma 0.6 # 真实动作序列前 5 轮合作后 5 轮背叛 true_actions [1, 1, 1, 1, 1, 0, 0, 0, 0, 0] # 初识先验 p_co 0.5 history [] print(轮次 | 真实动作 | 观测动作 | 后验合作概率) print(- * 60) for t, a in enumerate(true_actions): # 执行噪声动作 真实动作 高斯噪声 y a rng.normal(0, sigma) # 高斯似然 like_co np.exp(-0.5 * ((y - 1.0) / sigma) ** 2) like_de np.exp(-0.5 * ((y - 0.0) / sigma) ** 2) # 贝叶斯更新 p_co p_co * like_co / (p_co * like_co (1 - p_co) * like_de) history.append(p_co) print(f {t1} | {a} | {y:.3f} | {p_co:.3f}) print(- * 60) print(最终判断合作概率, round(p_co, 3))8.2 代码解读这个示例模拟了执行噪声如何影响重复博弈中的意图推断。真实动作前 5 轮是合作、后 5 轮是背叛但观测者看到的动作 y 总带有噪声。你会在输出中看到即使真实动作已经切换到背叛后验合作概率也不会立刻跳到 0而是逐步下降。噪声越大下降速度越慢。这意味着观察者需要更多轮次来确认对方的策略变化而在这个“确认窗口期”内观察者可能仍在错误地选择合作。这就是执行噪声在 Social Dilemmas 中的实际危害它拖延了意图推断的收敛速度制造了一个容易被利用的模糊窗口。9. 运行结果与验证方法9.1 示例 1 的预期结果运行python bayesian_update.py重点观察随着观测序列推进后验合作概率会从 0.5 开始向某个方向收敛。具体收敛方向取决于观测值整体偏向 1.0 还是 0.0。需要说明的是由于观测序列是手工指定的这里不存在随机波动。你可以手动修改observations里的数值观察改一个值如何影响后验这样就很容易理解贝叶斯更新的“证据积累”过程。9.2 示例 2 的预期结果先训练模型再对训练集样本和随机生成的未知样本分别做推理model IntentionNet(input_dim4, hidden_dim32, dropout0.2) model train_synthetic(model) # 测试一组普通样本 test_x torch.randn(5, 4) mean_prob, aleatoric_var, epistemic_var predict_with_uncertainty(model, test_x) print(平均合作概率:, mean_prob) print(aleatoric 方差:, aleatoric_var) print(epistemic 方差:, epistemic_var)验证成功的标准训练集数据上aleatoric_var应该和合成数据里设定的噪声水平0.5² 0.25比较接近。普通测试样本上epistemic_var比较小因为模型见过这类分布。如果构造一个分布外样本比如把所有特征都放大到 10 倍epistemic_var通常会上升因为模型没见过这种输入。一个可能的失败是epistemic_var全部为 0原因基本是你没有在推理时启动 Dropout或者模型结构里没有 Dropout 层。9.3 示例 3 的预期结果运行python simulate_dilemma.py预期能看到类似这样的趋势轮次 | 真实动作 | 观测动作 | 后验合作概率 ------------------------------------------------------------ 1 | 1 | 1.128 | 0.683 2 | 1 | 0.232 | 0.682 3 | 1 | 1.620 | 0.742 ...在前 5 轮后验合作概率应该在 0.5 以上波动切换到背叛后会逐渐下降。由于随机种子和噪声的影响具体数值不会和这里完全一致重点是观察“切换后不是立即归零而是有一个滞后过程”这个现象。如果你想验证噪声大小对推断速度的影响可以把sigma从 0.6 改成 1.5 再运行一次后验切换速度会明显变慢。10. 常见问题与排查思路问题现象可能原因排查方式解决方案MC Dropout 推理时 epistemic 方差恒为 0推理时没有开启 Dropout模型处于 eval 模式或 forget 调用 model.train()打印模型当前 mode检查网络结构中是否有 Dropout 层在predict_with_uncertainty中调用model.train()aleatoric 方差始终接近 log_var 上下界log_var clamp 范围设置不合理或数据噪声水平与初始化不匹配输出 log_var 分布查看是否大量样本落在 -6 或 6调整 clamp 范围或对 aleatoric head 的 bias 做合理初始化贝叶斯后验概率震荡严重噪声方差 σ 设置过小单次观测权重过大打印每次更新前后的似然值增大 σ或引入滑动窗口用多个观测一起更新分类损失主导训练回归分支没学到 aleatoric 方差两个 loss 量级不平衡分别打印 cls_loss 和 reg_loss给回归分支增加权重系数比如0.5 * reg_loss测试时分布外样本 epistemic 不变大特征归一化把分布外样本也拉回正常范围或 Dropout 丢弃比例过小检查输入特征预处理试着用未归一化的极端输入测试增加 dropout 比例或在特征层保留原始尺度11. 工程实践与落地建议11.1 先把“归因”变成系统的一项显式输出不要只在模型内部算不确定性要在接口层面把 aleatoric 和 epistemic 分开返回。这样下游决策模块才能分别处理。例如自动驾驶决策模块的输入可以设计成{ intent: lane_change, intent_probability: 0.74, aleatoric_uncertainty: 0.31, epistemic_uncertainty: 0.08, recommendation: maintain_speed }其中aleatoric_uncertainty高但epistemic_uncertainty低意味着“动作本身噪声大但模型对这类场景还算熟悉”应做鲁棒控制而不是急停反之epistemic 高则意味着“模型没见过这种场景”应降低速度或请求接管。11.2 数据采集时记录噪声上下文aleatoric 不确定性不是凭空出来的它有现实来源。如果在数据采集阶段能记录噪声上下文比如路面类型、风速、机械臂负载、通信延迟模型就能更准确地建模不同条件下的 aleatoric 方差。一个实用的做法是把噪声 level 作为一个条件输入让模型学习“噪声大环境下的动作方差更大”而不是让模型在同一个噪声尺度上硬拟合所有数据。11.3 用 epistemic 不确定性做主动学习和安全兜底epistemic 不确定性的最大价值是告诉系统“哪里不懂”。它可以驱动两个动作一是主动学习。优先采集和标注高 epistemic 区域的样本用最低的数据成本补齐模型短板。二是安全兜底。在自动驾驶、医疗辅助、工业控制等安全关键场景里当 epistemic 超过阈值时强制进入保守模式或请求人类接管。aleatoric 不该成为接管的理由否则系统会变得过度敏感。11.4 在线更新时注意分布漂移在多智能体交互中对手的策略可能随时间演化。今天学到的高置信模型明天可能因为对手换策略而变成高 epistemic 状态。落地时建议用一个在线监测模块持续统计 epistemic 的滑动均值。一旦发现某个 agent 的预测 epistemic 持续上升就需要触发策略更新、重训练或降级。这是把“信任”工程化的一种方式。11.5 不要忽略验证环节不确定性估计本身也需要验证。你可以把系统输出的 aleatoric 和 epistemic 分别与真实场景对应起来aleatoric 估计是否与实测噪声水平一致epistemic 估计是否对分布外数据敏感没有这两条验证任何不确定性数字都只是摆设。12. 总结与后续学习方向这篇文章的核心线索其实只有一条在带执行噪声的意图推断里不确定性不是一个黑盒指标而是可以被拆分、被归因、被分别决策的两个分量。Aleatoric 来自噪声再多数据也消不掉应该用鲁棒策略去适应Epistemic 来自无知应该用更多数据、更多探索去消除。基于这个思路我们做了三个可运行的最小示例贝叶斯更新展示了“已知噪声方差时如何逐步修正意图判断”。神经网络与 MC Dropout 展示了“未知噪声方差时如何让模型自己估计 aleatoric并同时估计 epistemic”。社会困境模拟展示了“执行噪声如何拖延策略变化的发现制造误导窗口”。这三个示例的代码都比较短适合当作理解后续更复杂方法的起点。建议你拿到代码后先改一改噪声参数观察后验和不确定性的变化再把它接入自己的多智能体策略里看看能不能缓解误判导致的信任崩溃。如果想继续深入方向很明确学习贝叶斯神经网络的更多近似推断方法了解逆强化学习里的意图概率建模再看多智能体强化学习中的对手建模相关工作。不确定性的分离不是某个模型自带的魔法而是一种建模决策。真正有价值的是你对场景里“哪些随机性不可消除、哪些无知可以补齐”的判断能力。
返回列表