多输出神经网络

时间:2014-10-20 20:38:30

标签: machine-learning artificial-intelligence neural-network classification

直到知道我只使用神经网络对单个输出进行分类,我为每个类设置了一个输出神经元,并检查哪个神经元具有最高/最低激活。

我想要做的是检测模式,而不是输出单个值(类或激活值)我想输出多个值。例如,

[0,5 0,5 0,5] -> [0,5 0,5 0,5]
[1 1 1] -> [1 1 1]
[2 2 2] -> [-1 -1 -1]

所以我想知道的是,我可以使用具有3个输出的网络而不是检查激活,使用所有输出作为我的输出模式吗?

1 个答案:

答案 0 :(得分:4)

是的,您可以使用具有多个输出的神经网络。基本上,你有两种可能性:

  • 使用一个简单的分解,即根据响应分离训练集,并训练三个人工神经网络,每个人工神经网络只有一个输出。但我想这是你在寻找什么。

  • 训练一个真正的多输出神经网络。在这种情况下,对于双隐藏层ANN,输入层的神经元权重对于每个输出是相同的,而输出层权重对于每个输出是特定的。在这种情况下,您必须组合三个输出的反向传播过程。在一个简单的方法中,您可以通过随后对每个输出应用一个反向传播迭代来实现,直到您希望获得收敛。为了以合理的方式做到这一点,您可能必须以适当的方式扩展您的响应(否则,一个输出可能会主导其他输出)。

同样,这是三个输出的基本程序:

  1. 将训练集分成三组,每组有一个响应。标准化每一套。

  2. 将一个反向传播迭代应用于第一个数据集,然后应用一个到第二个数据集,最后应用一个到第三个数据集。对于每个,使用相同的输入图层权重。

  3. 重复2.直到收敛( - 无论你如何定义它。应该类似于一维输出程序。)

  4. 然而,如上所述,这只是各种优化方法中的一种可能性。


    编辑:以上是简单的一维反向传播程序的扩展。这里的自由度是

    (i)处理输入的顺序和计算错误项,以及
      (ii)当隐藏神经元的更新时。

    上述变体将数据作为[x_1, ..., x_N, y_1, ..., y_N, z_1, ..., z_N]传递,并在每个步骤后更新(此更新方案通常称为 Gauss-Seidel )。另一个极端是存储错误术语,并在处理完整集后仅更新一次。 (Gauss-Seidel版本通常会收敛一点。)

    另一种变体 - 可能与标准反向传播最相似 - 是处理每个数据点的三个维度,即[x_1, y_1, z_1, ..., x_N, y_N, z_N],并在每个数据点之后(即在每次第三次迭代之后)更新。实际上,可以进行一次三维梯度更新(由于梯度的线性特性,可以进行三次一维误差评估)。

    总结一下,人们发现存在大量可能的优化方案,这些方案都非常相似,可能都会产生相似的结果。


    作为替代方案,您还可以考虑使用极限学习机。在这里,您只需要训练输出权重,而您可以随机选择输入权重。通过这种方式,多响应案例自然地分为三个一维优化问题。