将神经网络的输出视为其预测输出的置信度是否正确?

机器算法验证 机器学习 分类 神经网络 深度学习 等渗
2022-03-28 10:45:47

假设我有一个输出 sigmoid (tanh),它产生的输出范围为 [-1, +1]。将此输出视为预测输出的置信度度量是否正确。输出值将介于 -1 和 +1 之间,但即使我的精度很高,我也看到这些值非常接近于零。

所以,我担心用这么低的数字显示输出值 * 100.0 可能不好。另一方面,我能够在验证集上获得高召回率和精度。

2个回答

将输出分数视为置信度度量合理的,并且经常这样做。但是,这并不意味着如果它似乎运行不佳,或者特别是因为您的网络没有在整个网络中输出值,您就必须这样做[-1,1]网络对其所有决策都只是一厢情愿的理论范围。

如果您对模型的性能感到满意并且只想输出合理的置信度分数,您可以考虑的一件事是尝试在给定特定输出分数的情况下了解您的模型正确的概率。您通常可以通过交叉验证来获得许多(输出分数、真实标签)对,然后使用Platt 缩放或运行等渗回归来学习从输出分数到正概率的函数映射来做到这一点。

在分类前馈神经网络的情况下,假设您的输出激活是 sigmoid[0,1]那么你实际上有一个二项分布。如果你有一个单一的输出神经元,你会得到一个伯努利分布是二项分布的一个特例n=1. https://en.wikipedia.org/wiki/Bernoulli_distribution

现在,正如您在 wiki 中看到的那样,伯努利分布的预测方差由下式给出v一种r=p(1-p),因此您可以说预测越高,您的方差越小,因此您越有信心。该领域正在进行研究,因为这不是对置信度的良好估计。

如果是连续数据,您可以遵循最近引入贝叶斯优化领域的另一种方法,并适合您的情况 ( http://arxiv.org/abs/1502.05700 )。作者建议使用线性输出层的均方误差(在非线性激活 tanh 或 sigmoid 之后)训练您的网络,然后训练贝叶斯线性回归模型。通过这种方式,您可以获得适当的贝叶斯置信区间,并且经验证明它们有效。

更具体地说,Torch7 中的实现将是:

-- DNGO network
model = nn.Sequential()
model:add(nn.Linear(ninputs,nhidden))
model:add(nn.Tanh())
model:add(nn.Linear(nhidden,nhidden))
model:add(nn.Tanh())
model:add(nn.Linear(nhidden,nhidden))
model:add(nn.Tanh())
model:add(nn.Linear(nhidden,noutputs))

最后,作者根据目标值对预测输出进行贝叶斯线性回归,获得置信区间。我相信这也非常适合您的情况,只需更改网络架构即可。