gpt4 book ai didi

machine-learning - 多输出神经网络

转载 作者:行者123 更新时间:2023-11-30 08:52:37 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

  • 使用简单的分解,即将您的训练集与响应分开,并训练三个人工神经网络,其中每个人工神经网络都有一个输出。但我想这不是您正在寻找的东西。

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

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

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

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

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

但是,正如前面提到的,这只是多种优化方法中的一种可能性。

<小时/>

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

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

总而言之,我们可以看到有很多种可能的优化方案,它们都非常相似,并且可能都会导致相当相似的结果。

<小时/>

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

关于machine-learning - 多输出神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com