如何将人工神经网络的输出转换为概率?

时间:2009-10-06 03:17:57

标签: artificial-intelligence neural-network

我刚才读过神经网络,我理解ANN(特别是通过反向传播学习的多层感知器)如何能够学会将事件归类为真或假。

我认为有两种方法:

1)你得到一个输出神经元。它的价值是&gt; 0.5事件可能是真的,如果它的值<= 0.5,则事件可能是错误的。

2)如果第一个的值> 1,则得到两个输出神经元。比第二个值的事件可能是真的,反之亦然。

在这些情况下,ANN会告诉您事件是否可能是真的或可能是假的。它没有说明它有多大可能。

有没有办法将此值转换为某些赔率或直接从ANN中获得赔率。我想得到一个输出,如“事件有84%的可能性是真实的”

7 个答案:

答案 0 :(得分:21)

一旦训练了NN,例如。使用问题中提到的backprogation(其中backprogation逻辑以最小化误差函数的方式“推动”权重)与所有单独输入(“外部”输入或NN内输入)相关联的权重是固定的。然后可以将NN用于分类目的。

因此,在学习阶段期间数学(和“选项”)可以变得有点厚,当作为分类器操作时,它是相对简单和直接的。主要算法是计算每个神经元的激活值,作为该神经元的输入x权重的总和。然后将该值提供给激活函数,其目的是将其标准化并将其转换为布尔值(在典型情况下,因为某些网络的某些层没有“全有或无”规则)。激活功能可能比您指示的更复杂,特别是它不需要是线性的,但无论其形状如何,通常为S形,它都以相同的方式运行:确定激活在曲线上的位置,如果适用,或低于阈值。然后,基本算法处理给定层的所有神经元,然后再进行下一步。

考虑到这一点,使用感知器能够用百分比值来猜测(或确实是猜测 - 复数)的能力的问题找到了一个简单的答案:你可以认为它可以,它的输出是实值的(如果需要进行规范化的话)在我们将它转​​换为离散值(在多个类别的情况下为布尔值或类别ID)之前,使用激活函数和问题中描述的阈值/比较方法。

那么......我如何以及在哪里获得“我的百分比”?...所有这些都取决于NN的实现,更重要的是,实现决定了可用于在其中引入激活值的规范化函数的类型。 0-1范围以所有百分比之和“加”为1的方式。在最简单的形式中,激活函数可用于标准化输入的值和权重。输出层可以用作因子,以确保“加起来”1个问题(假设这些权重确实如此规范化)。

Etvoilà!

Claritication :(遵循Mathieu的说明)
一个人不需要改变神经网络本身的工作方式;唯一需要的是以某种方式“挂钩”输出神经元的逻辑来访问他们计算的[实值]激活值,或者,可能更好地访问实值输出激活函数,在布尔转换之前(通常基于阈值或某些随机函数)。

换句话说,NN像以前一样工作,它的训练和识别逻辑都没有改变,NN的输入保持不变,各层之间的连接也是如此等等。我们只获得了实值的副本激活输出层中的神经元,我们用它来计算一个百分比。百分比计算的实际公式取决于激活值的性质及其相关函数(其比例,相对于其他神经元输出的范围等)。
以下是一些简单的案例(取自问题的建议输出规则) 1)如果存在单个输出神经元:激活函数提供的值相对于该函数的范围的比率应当如此。 2)如果有两个(或更多输出神经元),例如分类器:如果所有输出神经元具有相同的激活函数,给定神经元的百分比是其激活函数值除以所有激活函数的总和值。如果激活函数变化,则变为逐个案例情况,因为不同的激活函数可能表示有意为某些神经元赋予更多权重,并且百分比应该尊重这一点。

答案 1 :(得分:18)

您可以做的是在输出层节点上使用sigmoid transfer function(接受数据范围(-inf,inf)并在[-1,1]中输出值)。
然后使用 1-of-n输出编码(每个类一个节点),您可以将范围[-1,1]映射到[0,1]并将其用作每个的概率类值(请注意,这不仅仅适用于两个类)。

答案 2 :(得分:9)

单个输出神经元的激活值是线性加权和,并且如果网络被训练以给出输出范围从0到1,则可以直接解释为近似概率。如果是,则倾向于这种情况。前一阶段中的传递函数(或输出函数),并且提供最终输出也在0到1范围内(通常是S形逻辑函数)。但是,无法保证可以进行维修。此外,除非sigmoids是逻辑的并且权重被约束为正并且总和为1,否则不太可能。通常,神经网络将使用tanh sigmoid以及正负范围内的权重和激活以更平衡的方式训练(由于该模型的对称性)。另一个因素是该类的普遍性 - 如果它是50%,则0.5阈值可能对逻辑有效,而tanh为0.0阈值。 S形设计用于将物体推向范围的中心(在反向传播上)并限制它超出范围(在前馈中)。表演的重要性(相对于伯努利分布)也可以解释为神经元进行真实预测而不是猜测的概率。理想情况下,预测因素对积极因素的偏见应与现实世界中的积极因素的流行程度相匹配(在不同时间和地点可能会有所不同,例如牛市与熊市,例如申请贷款的人的信誉与未能支付贷款的人的信誉。 ) - 校准概率的优点是可以轻松设置任何所需的偏差。

如果你有两个类的两个神经元,每个神经元都可以独立解释,它们之间的差异也可以是。这就像翻转阴性神经元和平均值一样。这些差异也可以产生显着性估计概率(使用T检验)。

Brier分数及其Murphy分解可以更直接地估计平均答案是正确的概率,而Informedness给出分类器做出明智决定而不是猜测的概率,ROC AUC给出概率为正数的概率将被排名高于负类(通过积极的预测因子),并且当流行率=偏见时,Kappa将给出与信息相匹配的类似数字。

您通常想要的是整体分类器的显着概率(确保您在真实场上玩,而不是在虚构的假设框架中)和特定示例的概率估计。有多种校准方法,包括进行回归(线性或非线性)与概率的比较,并使用其反函数重新映射到更准确的概率估计。这可以通过Brier得分改善来看出,校准成分减少到0,但辨别成分保持不变,ROC AUC和Informedness(Kappa受偏见并可能恶化)。

校准概率的简单非线性方法是使用ROC曲线 - 随着单个神经元输出的阈值变化或两个竞争神经元之间的差异,我们绘制结果的真假阳性率。 ROC曲线(错误和真实的负面率自然是补充,因为实际上不是正面的是负面的)。然后逐个样本逐点扫描ROC曲线(折线)(每次梯度变化),阳性样本的比例为您提供对应于产生该点的神经阈值的阳性的概率估计。曲线上各点之间的值可以在校准集中表示的值之间进行线性插值 - 实际上,ROC曲线中的任何坏点(由凹凸(dents)表示)都可以通过凸包平滑 - 在概率间插值船体部分的终点。 Flach和Wu提出了一种实际翻转该段的技术,但这取决于信息的使用方式是错误的,虽然可以反复使用以对校准集进行任意改进,但是它越来越不可能推广到测试情况。

(我来到这里寻找很久以前在这些基于ROC的方法上看过的论文 - 所以这是来自记忆而没有这些丢失的参考文献。)

答案 3 :(得分:7)

我会非常谨慎地将神经网络(实际上是任何机器学习分类器)的输出解释为概率。训练机器以区分类别,而不是估计概率密度。事实上,我们在数据中没有这些信息,我们必须推断它。根据我的经验,我不建议任何人直接将输出解释为概率。

答案 4 :(得分:6)

你试过教授吗? Hinton建议用softmax激活函数和交叉熵误差训练网络?

作为示例创建具有以下内容的三层网络:

linear neurons   [ number of features ]
sigmoid neurons [ 3 x number of features ]
linear neurons   [ number of classes ]

然后使用您最喜欢的优化器随机下降/ iprop plus / grad下降用交叉熵误差softmax传输训练它们。训练后,输出神经元应归一化为1的总和。

有关详细信息,请参阅http://en.wikipedia.org/wiki/Softmax_activation_function。 Shark Machine Learning框架通过组合两个模型确实提供Softmax功能。还有教授。 Hinton是关于细节的优秀在线课程@ http://coursera.com

答案 5 :(得分:4)

我记得我在“神经计算理论导论”(hertz krogh palmer)一书中看到了一个用反向传播训练的神经网络的例子来逼近结果的概率。我认为该示例的关键是一个特殊的学习规则,因此您不必将单位的输出转换为概率,而是自动获得概率作为输出。
如果有机会,请尝试查看该书。

(顺便说一句,“boltzman机器”,虽然不太有名,但是专门为学习概率分布而设计的神经网络,你可能也想检查它们)

答案 6 :(得分:4)

当使用ANN进行2级分类并且在输出层中使用逻辑sigmoid激活函数时,输出值可以被解释为概率。

因此,如果您选择2个班级,则使用1-C编码进行训练,其中2个ANN输出将分别为每个班级提供训练值(1,0)和(0,1)。

要获得第一类概率百分比,只需将第一个ANN输出乘以100.使其他类的概率使用第二个输出。

这可以推广用于使用softmax激活函数的多类分类。

您可以阅读更多内容,包括概率解释的证据:

[1] Bishop,Christopher M.神经网络用于模式识别。牛津大学出版社,1995年。