38

不久前我读过有关神经网络的文章,我了解 ANN(尤其是通过反向传播学习的多层感知器)如何学会将事件分类为真或假。

我认为有两种方法:

1)你得到一个输出神经元。如果它的值 > 0.5,则事件可能为真,如果它的值 <=0.5,则事件可能为假。

2)你得到两个输出神经元,如果第一个的值大于第二个的值,则事件可能为真,反之亦然。

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

有没有办法将此值转换为一些赔率或直接从 ANN 中获取赔率。我想得到像“事件有 84% 的概率是真的”这样的输出

4

7 回答 7

22

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

因此学习阶段的数学(和“选项”)可能会有点厚,作为分类器操作时相对简单和直接。主要算法是计算每个神经元的激活值,作为该神经元的输入 x 权重之和。然后将该值馈送到激活函数,其目的是对其进行规范化并将其转换为布尔值(在典型情况下,因为某些网络对其某些层没有全有或全无规则)。激活函数可能比你指出的更复杂,特别是它不需要是线性的,但无论它的形状如何,通常是 sigmoid,它都以相同的方式运行:找出激活函数在曲线上的位置,如果适用,在上面或低于阈值。

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

所以......我如何以及在哪里得到“我的百分比”?......一切都取决于 NN 的实现,更重要的是,实现规定了可用于将激活值带入 0-1 的归一化函数的类型范围,并且以所有百分比的总和“加起来”为 1 的方式。在最简单的形式中,激活函数可用于对值进行归一化,输入到输出层的权重可用作确保“加起来”为 1 个问题(前提是这些权重本身确实如此归一化)。

瞧!

澄清:(按照 Mathieu 的说明)
不需要对神经网络本身的工作方式进行任何更改;唯一需要做的就是以某种方式“挂钩”输出神经元的逻辑,以访问他们计算的[实值]激活值,或者更好的是,在其布尔转换之前访问激活函数的实值输出(通常基于阈值或某些随机函数)。

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

于 2009-10-06T05:05:31.100 回答
18

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

于 2009-10-06T21:49:00.513 回答
10

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

如果你有两个类的两个神经元,每个都可以像上面那样独立解释,它们之间的差异也可以减半。这就像翻转负类神经元并进行平均。差异还可以产生显着性估计的概率(使用 T 检验)。

Brier 分数及其墨菲分解给出了对平均答案正确概率的更直接估计,而 Informedness 给出了分类器做出明智决策而不是猜测的概率,ROC AUC 给出了对正类进行排名的概率高于负类(通过正预测器),并且当流行度 = 偏差时,Kappa 将给出与 Informedness 匹配的相似数字。

您通常需要的是整个分类器的显着性概率(以确保您在真实的领域中进行比赛,而不是在虚构的猜测框架中)和特定示例的概率估计。有多种校准方法,包括对概率进行回归(线性或非线性),并使用其反函数重新映射到更准确的概率估计。这可以从 Brier 分数的提高中看出,校准分量减少到 0,但鉴别分量保持不变,ROC AUC 和知情度也应该保持不变(Kappa 会受到偏差并且可能会恶化)。

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

(我来这里是为了寻找我很久以前看过的关于这些基于 ROC 的方法的论文——所以这是来自记忆,没有这些丢失的参考资料。)

于 2011-11-27T01:46:42.803 回答
10

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

于 2013-12-10T10:01:52.433 回答
7

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

例如,创建一个三层网络,其内容如下:

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

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

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

于 2013-07-22T23:55:50.473 回答
4

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

(顺便说一下,“玻尔兹曼机器”虽然不太出名,但它是专门为学习概率分布而设计的神经网络,您可能也想检查一下它们)

于 2009-10-06T07:33:37.433 回答
4

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

因此,如果您在 2 个类之间进行选择,则使用 1-of-C 编码进行训练,其中 2 个 ANN 输出将分别具有每个类的训练值 (1,0) 和 (0,1)。

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

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

您可以在此处阅读更多信息,包括概率解释的证明:

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

于 2013-10-01T23:21:57.017 回答