反向传播神经网络的多输入

Posted

技术标签:

【中文标题】反向传播神经网络的多输入【英文标题】:Multiple Inputs for Backpropagation Neural Network 【发布时间】:2014-01-15 08:50:03 【问题描述】:

我已经为此工作了大约一周。我的编码没有错误,我只需要正确的算法和概念。我已经实现了一个由 1 个隐藏层组成的神经网络。我使用反向传播算法来校正权重。

我的问题是网络只能学习一种模式。如果我一遍又一遍地用相同的训练数据训练它,当给定的输入在数值上接近训练数据时,它会产生所需的输出。

training_input:1、2、3 训练输出:0.6、0.25

经过 300 个 epoch....

输入:1、2、3 输出:0.6, 0.25

输入 1、1、2 输出:0.5853, 0.213245

但如果我使用多个不同的训练集,它只会学习最后一个模式。神经网络不应该学习多种模式吗?这是一个常见的初学者错误吗?如果是,那么请指出我正确的方向。我查看了许多在线指南,但从未见过详细介绍处理多个输入的指南。我将 sigmoid 用于隐藏层,将 tanh 用于输出层。

+

训练数组示例:

13  tcp telnet  SF  118 2425    0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   1   0   0   26  10  0.38    0.12    0.04    0   0   0   0.12    0.3 anomaly

0   udp private SF  44  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   4   3   0   0   0   0   0.75    0.5 0   255 254 1   0.01    0.01    0   0   0   0   0   anomaly

0   tcp telnet  S3  0   44  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   0   0   1   0   0   255 79  0.31    0.61    0   0   0.21    0.68    0.6 0   anomaly

最后一列(异常/正常)是预期的输出。我把所有东西都变成数字,所以每个单词都可以用一个唯一的整数来表示。

我一次给网络一个数组,然后我使用最后一列作为预期输出来调整权重。我有大约 300 个这样的数组。

至于隐藏的神经元,我从 3、6 和 20 尝试过,但没有任何改变。

+

为了更新权重,我计算了输出层和隐藏层的梯度。然后我计算增量并将它们添加到它们的相关权重中。我不明白这将如何学习将多个输入映射到多个输出。它看起来是线性的。

【问题讨论】:

请举一个你的“多个训练集”的例子。你使用了多少隐藏的神经元?你按什么顺序呈现训练集? 我不明白。您之前的示例建议 3 个输入,2 个输出。但所呈现的训练数组建议大约有 40 个输入和一个输出。哪一个是真的? 前面的例子只是一个例子来说明和交流我的问题背后的想法。添加的示例训练数据是我正在处理的实际数据。但我不明白这有什么关系,因为无论每一层有多少神经元,问题仍然存在。 您的 300 个阵列中有多少被归类为“异常”?您多久将每一项展示给您的培训阶段?您的反向传播中是否有一个系数可以根据网络已经学习的内容对当前输入进行加权?据我了解,您的网络在几个步骤后“忘记”了第一个呈现的训练数组的答案。这就是你的意思吗? 我也有同样的问题。您对解决这个问题有任何想法吗? 【参考方案1】:

如果您过多地训练神经网络,相对于通过反向传播算法的迭代次数而言,在一个数据集上,权重最终会收敛到一个状态,该状态将为该特定训练集提供最佳结果(overtraining for machine learning)。它只会学习该特定训练集的输入和目标数据之间的关系,而不是您可能正在寻找的更广泛更一般的关系。最好合并一些独特的集合并在整个集合上训练你的网络。

在没有看到反向传播算法的代码的情况下,我无法就它是否正常工作向您提供任何建议。我在实现反向传播时遇到的一个问题是没有正确计算激活函数围绕输入值的导数。 This 网站对我很有帮助。

【讨论】:

这与我使用的指南完全相同。我什至一步一步地测试了我的程序,看看我是否得到了相同的权重和输出值变化。当我使用他在程序截图中使用的相同参数时,我的程序进行了精确计算。你能澄清一下“合并不同的集合”和“在整个集合上训练它”是什么意思吗? 对于独特的数据集,我的意思是输入和目标数据是独特的/独特的,并且组合起来为神经网络提供了它应该知道的所有关系。从您的帖子中,我假设您在一个阵列上训练网络 300 个时期,然后移动到下一个阵列。最好在一个数组上训练一个 epoch 的网络,然后移动到下一个数组,依此类推,并在训练数组上重复迭代 300 个 epoch(或更少,如果需要)。然后在不同的数据集(模拟数据)上尝试您的网络。 我就是这么做的。我在每次迭代时给它一个不同的数组。我使用了第三方库,虽然它无法识别模式,但它的输出更加多样化,所以我的逻辑可能有问题。【参考方案2】:

No 神经网络不应该知道多种技巧。 你训练他们完成一项特定的任务。

是的,他们也可以接受其他任务的训练 但随后它们会针对另一项任务进行优化。

这就是为什么您应该为您的网络创建加载和保存功能,以便您可以在需要时轻松切换大脑并执行其他任务。 如果您不确定目前的任务是训练神经元以找出任务之间的差异。

【讨论】:

以上是关于反向传播神经网络的多输入的主要内容,如果未能解决你的问题,请参考以下文章

反向传播直到神经网络中的输入层

前向传播和反向传播

神经网络和深度学习之——误差反向传播算法

反向传播算法的算法简介

如何理解CNN神经网络里的反向传播backpropagation,bp算法

机器学习之五:神经网络反向传播算法