我刚才读过关于神经网络的文章,我理解ANN(特别是通过反向传播学习的多层感知器)如何能够学会将事件归类为真或假.
我认为有两种方法:
1)你得到一个输出神经元.它的值大于0.5,事件可能是真的,如果它的值<= 0.5,则事件可能是错误的.
2)你得到两个输出神经元,如果第一个的值大于第二个的值,则事件可能为真,反之亦然.
在这些情况下,ANN会告诉您事件是否可能是真的或可能是假的.它没有说明它有多大可能性.
有没有办法将这个值转换为某些赔率或直接从ANN获得赔率.我想得到一个输出,如"事件有84%的概率是真的"
一旦NN被训练,例如.使用问题中提到的backprogation(其中backprogation逻辑以最小化误差函数的方式"推动"权重)与所有单独输入("外部"输入或NN内输入)相关联的权重是固定的.然后,NN可用于分类目的.
因此,在学习阶段期间的数学(和"选项")可以变得有点厚,当作为分类器操作时,它是相对简单和直接的.主要算法是计算每个神经元的激活值,作为该神经元的输入x权重的总和.然后将该值提供给激活函数,其目的是将其标准化并将其转换为布尔值(在典型情况下,因为某些网络的某些层没有"全有或无"规则).激活功能可能比您指示的更复杂,特别是它不需要是线性的,但无论其形状如何,通常为S形,它都以相同的方式运行:确定激活在曲线上的位置,如果适用,或低于阈值.然后基本算法处理给定层的所有神经元,然后继续下一个.
考虑到这一点,使用感知器能够用百分比值来猜测(或者确实猜测 - 复数)的能力的问题找到了一个简单的答案:你可以认为它可以,它的输出是真值的(如果有的话)在我们将其转换为离散值(在多个类别的情况下为布尔值或类别ID)之前,需要使用激活函数和问题中描述的阈值/比较方法.
那么......我如何以及在哪里获得"我的百分比"?...所有这些都取决于NN的实现,更重要的是,实现决定了可用于在0-1中带来激活值的规范化函数的类型范围和方式,所有百分比的总和"加"为1.最简单的形式,激活函数可用于标准化值,输出层的输入权重可用作确保的因素将"加起来"加到1个问题上(假设这些权重本身确实如此标准化).
Etvoilà!
澄清 :(遵循Mathieu的注释)
一个人不需要改变神经网络本身的工作方式; 唯一需要的是以某种方式"挂钩" 输出神经元的逻辑来访问他们计算的[实值]激活值,或者更好的是,在布尔转换之前访问激活函数的实值输出(通常基于阈值或某些随机函数).
换句话说,NN像以前一样工作,它的训练和识别逻辑都没有改变,NN的输入保持不变,各层之间的连接也是如此.我们只获得了实值激活的副本.输出层中的神经元,我们用它来计算一个百分比.百分比计算的实际公式取决于激活值的性质及其相关函数(其比例,相对于其他神经元输出的范围等).
以下是一些简单的案例(取自问题的建议输出规则)1)如果存在单个输出神经元:激活函数提供的值相对于该函数范围的比率应该如此.2)如果有两个(或更多输出神经元),例如分类器:如果所有输出神经元具有相同的激活函数,给定神经元的百分比是其激活函数值除以所有激活函数的总和值.如果激活函数变化,则变为逐个情况,因为不同的激活函数可以指示对某些神经元赋予更多权重的有目的的期望,并且百分比应该尊重这一点.
你可以做的是在输出层节点上使用sigmoid传递函数(接受数据范围(-inf,inf)并输出[-1,1]中的值).
然后通过使用1-of-n输出编码(每个类的一个节点),您可以将范围[-1,1]映射到[0,1]并将其用作每个类值的概率(请注意,这是有效的)自然不仅仅是两个班级).
单个输出神经元的激活值是线性加权和,并且如果网络被训练以给出输出范围从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的方法上看过的论文 - 所以这是来自记忆而没有这些丢失的参考文献.)
我会非常谨慎地将神经网络(实际上是任何机器学习分类器)的输出解释为概率.训练机器以区分类别,而不是估计概率密度.事实上,我们在数据中没有这些信息,我们必须推断它.根据我的经验,我不建议任何人直接将输出解释为概率.
你尝试过教授吗?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.