【发布时间】: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 个阵列中有多少被归类为“异常”?您多久将每一项展示给您的培训阶段?您的反向传播中是否有一个系数可以根据网络已经学习的内容对当前输入进行加权?据我了解,您的网络在几个步骤后“忘记”了第一个呈现的训练数组的答案。这就是你的意思吗?
-
我也有同样的问题。您对解决这个问题有任何想法吗?
标签: algorithm neural-network backpropagation