Artificial intelligence 多输出神经网络

Artificial intelligence 多输出神经网络,artificial-intelligence,machine-learning,neural-network,probability,Artificial Intelligence,Machine Learning,Neural Network,Probability,我已经用python构建了我的第一个神经网络,我一直在玩一些数据集;到目前为止进展顺利 我有一个关于多结果事件建模的快速问题:- 假设我希望训练一个网络,告诉我每个跑步者赢得100米短跑的概率。我会向网络提供关于每个跑步者的所有相关数据,输出的数量将等于比赛中跑步者的数量 我的问题是,使用sigmoid函数,如何确保输出的总和等于1.0?网络会自然而然地学会这样做吗,还是我必须以某种方式明确地做到这一点?如果是的话,我将如何着手做这件事 非常感谢。你的人际网络应该解决这个问题,并最终自然地学习它

我已经用python构建了我的第一个神经网络,我一直在玩一些数据集;到目前为止进展顺利

我有一个关于多结果事件建模的快速问题:-

假设我希望训练一个网络,告诉我每个跑步者赢得100米短跑的概率。我会向网络提供关于每个跑步者的所有相关数据,输出的数量将等于比赛中跑步者的数量

我的问题是,使用sigmoid函数,如何确保输出的总和等于1.0?网络会自然而然地学会这样做吗,还是我必须以某种方式明确地做到这一点?如果是的话,我将如何着手做这件事


非常感谢。

你的人际网络应该解决这个问题,并最终自然地学习它

为了让网络更快地了解这一点,首先想到的是:

  • 添加一个名为“sum”的额外输出(将所有其他输出神经元相加)——如果您希望所有输出神经元位于单独的层中,只需添加一层输出,首先
    numRunners
    outputs只需连接到前一层中相应的神经元,最后一个
    numRunners+1
    -连接到上一层所有神经元的第个神经元,并将权重固定为1)

  • 训练集将为每个跑步者(未跑步)包含0-1个向量,“预期”结果将是0-1个向量
    00..00001000..01
    第一个1标记赢得比赛的跑步者,最后一个1标记“概率”的“和”

  • 对于未知的比赛,网络将试图预测哪位选手将获胜。由于输出具有连续值(或多或少为:D),因此可以将其解读为“跑步者将赢得比赛的网络确定性”——这就是您所寻找的


即使没有额外的求和神经元,这也是训练数据排列方式的粗略描述。

基本上,您需要一个多实数函数,将这些实数转换为概率(每个介于0到1之间,求和到1)。您可以通过对网络的输出进行后处理来轻松实现这一点

你的网络会给你实数r1,r2,…,rn,随着每个跑步者赢得比赛的概率增加

然后计算exp(r1),exp(r2),…,并将它们相加为ers=exp(r1)+exp(r2)+…+exp(rn)。那么第一个参赛者获胜的概率是exp(r1)/ers


这是玻尔兹曼分布的一次使用

神经网络的输出将接近1。我认为它实际上不会达到1

实际上,您不需要查看哪个输出等于1。一旦您将网络训练到特定的错误级别,当您呈现输入时,稍后只需在输出中寻找最大输出。例如,假设输出层显示以下输出:
[0.0001,0.00023,0.0041,0.999412,0.0012,0.0002]
,那么赢得比赛的跑步者是第4号跑步者

所以,是的,你的人际网络将“学习”产生1,但它并不完全是1。这就是为什么要在一定的错误率内进行训练。我最近创建了一个神经网络来识别手写数字,这就是我使用的方法。在我的输出层中,我有一个包含10个分量的向量。第一个组件表示0,最后一个组件表示9。因此,当我向网络显示4时,我希望输出向量看起来像
[0,0,0,0,1,0,0,0,0,0]
。当然,这不是我得到的确切信息,而是我训练网络提供的信息。因此,为了找到哪个数字,我只需检查哪个组件的输出或分数最高

现在在你的第二个问题中,我相信你是在问网络将如何学习提供正确答案?为此,您需要向网络提供一些训练数据,并对其进行训练,直到输出低于某个错误阈值。因此,您需要的是一组包含输入和正确输出的数据。最初,您的神经网络将使用随机权重进行设置(有一些算法可以帮助您选择更好的权重以最小化训练时间,但这有点高级)。接下来,您需要一种方法来告诉神经网络从提供的数据中学习。所以基本上你把数据交给神经网络,它会提供一个输出,很可能是错误的。然后,将数据与预期(正确)输出进行比较,然后告诉神经网络更新其权重,使其更接近正确答案。反复执行此操作,直到错误低于某个阈值

最简单的方法是实现随机反向传播算法。在该算法中,计算神经网络的实际输出与预期输出之间的误差。然后,将错误从输出层一直反向传播到权重到隐藏层,同时调整权重。然后重复此过程,直到计算的误差低于某个阈值。因此,在每一步中,您都离解决方案越来越近

您可以使用描述的算法。有相当数量的数学涉及,所以要做好准备!如果您想看到这个算法的一个实现示例,可以看看我介绍的这个Java代码。代码使用动量和模拟退火的简单形式,但是标准的反向传播算法应该很容易识别。Wikipedia关于反向传播算法在Python中的实现的文章有很多

你可能不会马上理解算法;期望花一些时间理解它,并完成一些数学运算。我坐下来用铅笔和纸写代码,这就是我最终理解的方式