不确定性

分析不确定性。

目前,所有已实现的方法都基于蒙特卡洛 dropout [gal2016]。 蒙特卡洛 dropout 依赖于模型具有 dropout 层。虽然 dropout 通常在推理/评估模式下关闭,但 MC dropout 保持 dropout 启用。因此, 如果我们运行相同的预测方法 \(k\) 次,我们会得到 \(k\) 个不同的预测。 这些预测的方差可以用作不确定性的近似值,其中较大的方差表示预测分数中的不确定性较高。

绝对方差通常难以解释,但将方差相互比较可以帮助识别哪些分数比其他分数更不确定。

以下代码块展示了一个示例用例,我们在其中使用分类损失训练模型,即在三元分类任务上。

from pykeen.pipeline import pipeline
from pykeen.models.uncertainty import predict_hrt_uncertain

# train model
# note: as this is an example, the model is only trained for a few epochs,
#       but not until convergence. In practice, you would usually first verify that
#       the model is sufficiently good in prediction, before looking at uncertainty scores
result = pipeline(dataset="nations", model="ERMLPE", loss="bcewithlogits")

# predict triple scores with uncertainty
prediction_with_uncertainty = predict_hrt_uncertain(
    model=result.model,
    hrt_batch=result.training.mapped_triples[0:8],
)

# use a larger number of samples, to increase quality of uncertainty estimate
prediction_with_uncertainty = predict_hrt_uncertain(
    model=result.model,
    hrt_batch=result.training.mapped_triples[0:8],
    num_samples=100,
)

# get most and least uncertain prediction on training set
prediction_with_uncertainty = predict_hrt_uncertain(
    model=result.model,
    hrt_batch=result.training.mapped_triples,
    num_samples=100,
)
df = result.training.tensor_to_df(
    result.training.mapped_triples,
    logits=prediction_with_uncertainty.score[:, 0],
    probability=prediction_with_uncertainty.score[:, 0].sigmoid(),
    uncertainty=prediction_with_uncertainty.uncertainty[:, 0],
)
print(df.nlargest(5, columns="uncertainty"))
print(df.nsmallest(5, columns="uncertainty"))

关于不确定性量化的相关工作的集合可以在这里找到: https://github.com/uncertainty-toolbox/uncertainty-toolbox/blob/master/docs/paper_list.md

函数

predict_hrt_uncertain(model, hrt_batch[, ...])

通过蒙特卡洛dropout计算带有不确定性量化的分数。

predict_h_uncertain(model, rt_batch[, ...])

使用左侧(头部)预测进行前向传递,以获取所有可能头部的分数。

predict_t_uncertain(model, hr_batch[, ...])

使用右侧(尾部)预测进行前向传递,以获取所有可能尾部的分数。

predict_r_uncertain(model, ht_batch[, ...])

使用中间(关系)预测进行前向传递,以获取所有可能关系的分数。

predict_uncertain_helper(model, batch, ...)

通过蒙特卡洛 dropout 进行带有不确定性估计的预测。

MissingDropoutError

如果在不确定性分析期间没有dropout模块存在,则会引发此错误。

UncertainPrediction(score, uncertainty)

一对预测分数和相应的不确定性。