1

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

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

[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个输出和而不是检查激活,使用所有输出作为我的输出模式?

回答

3

是的,您可以使用具有多个输出的神经网络。基本上,你有两个选择这样做:

  • 使用一个简单的分解,即针对的答复,并训练出3种人工神经网络,其中每一个都有一个单独的输出分开你的训练集。但我想这是而不是你在找什么。

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

如此反复,这里是三个输出的基本步骤:

  1. 单独训练套入三组,每个一种具有一个响应。标准化每套。

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

  3. 重复2.直到收敛(--however你定义它。应该类似于一维输出过程。)​​

然而,如所提到的,这仅仅是一种可能性出的种类繁多的优化方法。


编辑:上面是简单的一维反传过程的扩展。这里的自由度是

(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],并且在每个数据点之后(即在每个第三次迭代之后)更新。实际上,可以进行一次三维梯度更新(由于梯度的线性特性,可以将其更改为三次一维误差评估)。

总结一下,可以看到有很多种可能的优化方案,它们都非常相似,可能都会导致相似的结果。


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

+0

你能指出任何论文/代码/博客文章等,这解释了第二种方法?或者叫什么名字?训练的技巧。 – 2014-10-20 22:16:00

+0

不,我没有提及上述内容(尽管它可能不应该很难找到),但它是后向传播算法的直接扩展。但是,请注意,对于一个*真实*直接的扩展,您不应该连续地训练每个维度,而是要为每个数据点处理所有三个维度。由于反向传播梯度的线性特性,三个一维更新等于一个三维更新。 – davidhigh 2014-10-20 22:47:32