无法理解神经网络

时间:2012-10-07 20:51:07

标签: ruby-on-rails ruby algorithm neural-network fann

我正在尝试使用神经网络来解决问题。我从Coursera上提供的机器学习课程中了解到它们,并很高兴地发现FANN是神经网络的Ruby实现,所以我没有必要重新发明飞机。

但是,我真的不明白为什么FANN给我这么奇怪的输出。根据我从课堂上学到的知识,

我有一组匹配结果的训练数据。给予玩家一个数字,给他们的对手一个数字,结果是1为赢,0为亏。由于心烦意乱,数据有点嘈杂,但并非如此。我的目标是找出哪些评级差距更容易受到干扰 - 例如,我的直觉告诉我,评级较低的匹配往往会导致更多的不安,因为评级不太准确。

所以我得到了大约100个例子的训练集。每个例子是(评级,delta)=> 1/0。所以这是一个分类问题,但实际上并不是我认为适用于逻辑回归类型的图表,神经网络似乎更正确。

我的代码开始

training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs)

然后我用

建立神经网络
network = RubyFann::Standard.new(
  :num_inputs=>2, 
  :hidden_neurons=>[8, 8, 8, 8], 
  :num_outputs=>1)

在课堂上,我了解到合理的默认设置是每个隐藏层具有相同数量的单位。由于我真的不知道如何工作或者我正在做什么,所以我选择了默认设置。

network.train_on_data(training_data, 1000, 1, 0.15)

然后最后,我以增量的方式经历了一组样本输入评级,并且在每个增量处增加增量,直到结果从>切换。 0.5至< 0.5,我认为大概是0和大约1,虽然它们更像是0.45和0.55。

当我跑了一次时,每次输入都给我0。我使用相同的数据再次运行两次,并且负数的下降趋势和正数的增加趋势,完全相反的预测。

我想也许我没有包含足够的功能,所以我添加了(rating**2delta**2)。不幸的是,我每次都开始获得每个输入的起始增量或最大增量。

我真的不明白为什么我会得到如此不同的结果或Ruby-FANN告诉我的,部分是因为我不理解图书馆而且我怀疑,因为我刚开始学习神经网络和我错过了一些大而明显的东西。我没有足够的培训数据,是否需要包含更多功能,问题是什么?如何修复或学习如何做得更好?

1 个答案:

答案 0 :(得分:1)

玩参数怎么样?起初我强烈建议只有两层......在某个地方应该有数学证明它足以解决许多问题。如果你有太多的神经元你的NN将没有足够的时代来真正学到东西..所以你也可以玩多个时代以及gama ..我认为在你的情况下它是0.15 ..如果你使用更大一点值得你的NN应该学得更快一些(不要害怕尝试0.3甚至0.7),gama的正确值通常取决于权重的间隔或输入规范化。

你的NN很可能显示出这样一个不同的结果,因为在每次运行中都有新的初始化,然后有完全不同的网络,它会以不同的方式学习前一个(不同的权重将具有更高的值,因此NN的不同部分会学到同样的东西。)

我不熟悉这个库我只是在写NN的一些经验。希望这些东西有所帮助..