前段时间我阅读了一些关于神经网络的资料,我理解了ANN(尤其是通过反向传播学习的多层感知器)如何学习将事件分类为真或假。
我认为有两种方法:
1) 你得到一个输出神经元。如果它的值 > 0.5,则事件很可能为真;如果它的值 <= 0.5,则事件很可能为假。
2) 你得到两个输出神经元,如果第一个神经元的值 > 第二个神经元的值,则事件很可能为真,反之亦然。
在这些情况下,ANN告诉你一个事件很可能为真或很可能为假。它并没有告诉你有多么的可能。
有没有办法将这个值转换成一些概率,或者直接从ANN中得到概率。我希望得到类似“该事件有 84% 的概率为真”这样的输出。
回答:
一旦神经网络被训练好,例如,使用问题中提到的反向传播(其中反向传播逻辑“推动”权重,以最小化误差函数),与所有单个输入(“外部”输入或神经网内部输入)相关的权重都是固定的。然后,神经网络可以用于分类目的。
学习阶段的数学(和“选项”)可能有点复杂,但作为分类器运行时,它相对简单明了。主要的算法是计算每个神经元的激活值,作为该神经元的输入 x 权重的总和。然后,将该值馈送到激活函数,其目的是对其进行归一化并将其转换为布尔值(在典型情况下,因为某些网络对其某些层没有全有或全无的规则)。激活函数可能比你所说的更复杂,特别是它不需要是线性的,但无论它的形状如何,通常是 sigmoid 函数,它以相同的方式运行:弄清楚激活值在曲线上哪里,如果适用,高于或低于阈值。然后,基本算法在继续下一层之前处理给定层的所有神经元。
考虑到这一点,关于使用感知器能够以百分比值来限定其猜测(或确实是多个猜测)的问题,可以很容易地找到答案:你完全可以,它的输出是实数值的(如果需要归一化),然后我们才使用激活函数和问题中描述的阈值/比较方法将其转换为离散值(布尔值或多个类别中的类别 ID)。
所以… 我在哪里以及如何获得 “我的百分比”?… 这完全取决于神经网络的实现,更重要的是,实现决定了可用于将激活值带入 0-1 范围并且以所有百分比的“总和”加起来为 1 的方式的归一化函数的类型。以最简单的形式,激活函数可用于归一化值,并且到输出层的输入的权重可用作确保“总和”加起来为 1 问题的因素(前提是这些权重本身确实如此归一化)。
Et voilà!
澄清:(根据 Mathieus 的说明)
不需要以任何方式改变神经网络本身的工作方式;唯一需要的是以某种方式 “钩入”输出神经元的逻辑,以访问它们计算的[实数值]激活值,或者,可能更好,访问激活函数的实数值输出,在其布尔转换之前(这通常基于阈值或一些随机函数)。
换句话说,神经网络像以前一样工作,既没有改变其训练也没有改变其识别逻辑,神经网络的输入保持不变,层之间的连接等也保持不变。我们只获得输出层中神经元的实数值激活的副本,并使用它来计算百分比。百分比计算的实际公式取决于激活值的性质及其相关函数(其规模,相对于其他神经元输出的范围等)。
以下是一些简单的案例(取自问题建议的输出规则)
1) 如果只有一个输出神经元:激活函数提供的值相对于该函数范围的比率应该可以。
2) 如果有两个(或更多个输出神经元),例如对于分类器:如果所有输出神经元都具有相同的激活函数,则给定神经元的百分比是其激活函数值除以所有激活函数值的总和。如果激活函数不同,则情况因情况而异,因为不同的激活函数可能表明有意地赋予某些神经元更多的权重,并且百分比应尊重这一点。