我已经为此工作了大约一个星期。我的编码没有错误,我只需要正确的算法和概念。我已经实现了一个由1个隐藏层组成的神经网络。我使用反向传播算法来校正权重。
我的问题是网络只能学习一种模式。如果我一遍又一遍地使用相同的训练数据训练它,当给定的输入在数值上接近训练数据时,它会产生所需的输出。
training_input:1,2,3 training_output:0.6,0.25
在300个时代之后....
输入: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但没有任何改变。
+
要更新权重,我计算输出和隐藏图层的渐变。然后我计算增量并将它们添加到相关的权重。我不明白将如何学习将多个输入映射到多个输出。它看起来很线性。
答案 0 :(得分:1)
如果您训练神经网络太多,就通过反向传播算法的迭代次数而言,在一个数据集上,权重最终将收敛到一个状态,在该状态下,它将为该特定训练集提供最佳结果(overtraining for machine learning)。它只会学习该特定训练集的输入和目标数据之间的关系,而不会了解您可能正在寻找的更广泛的一般关系。最好合并一些独特的设置并在整套设备上训练您的网络。
如果没有看到反向传播算法的代码,我就无法给出任何关于它是否正常工作的建议。实现反向传播时遇到的一个问题是没有正确计算输入值周围激活函数的导数。 This网站对我非常有帮助。
答案 1 :(得分:0)
没有神经网络不应该知道多个技巧。 你训练他们完成一项特定的任务。
是的,他们也可以接受其他任务的培训 但随后他们会针对另一项任务进行优化。
这就是为什么你应该为你的网络创建加载和保存功能,以便你可以根据需要轻松切换大脑并执行其他任务。 如果你不确定它是什么目前正在培训一个神经元来找到任务之间的差异。