理解神经网络有困难

4
我正在尝试使用神经网络解决一个问题。我是通过Coursera上提供的机器学习课程了解到它们的,并且很高兴发现FANN是神经网络的Ruby实现,所以我不必重新发明轮子。
然而,我并不真正理解为什么FANN会给我如此奇怪的输出。根据我从课程中学到的知识,
我有一组训练数据,这些数据是比赛结果。玩家被给予一个数字,他们的对手也被给予一个数字,结果是1表示胜利,0表示失败。由于出现反转,数据有点嘈杂,但不是特别严重。我的目标是找出哪些等级差距更容易出现反转-例如,我的直觉告诉我,较低等级的比赛往往会产生更多的反转,因为等级不够准确。
因此,我获得了大约100个示例的训练集。每个示例都是(评分,增量)=> 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)

最后,我按照一组示例输入评分递增的方式进行了测试,并在每个递增点上增加delta值,直到结果从大于0.5变为小于0.5。我将其视为约为0和约为1的结果,但实际上它们更接近于0.45和0.55。
第一次运行时,每个输入都给出了0。我再次使用相同的数据运行了两次,得到了负数下降趋势和正数上升趋势,完全相反的预测结果。
我认为可能是因为我没有包含足够的特征,所以我添加了(rating ** 2和delta ** 2)。不幸的是,这样做后,每次输入都会得到我的起始delta或最大delta。
我真的不明白为什么会得到如此不同的结果,Ruby-FANN告诉我的是什么,部分原因是因为我不理解这个库,还有,我怀疑,是因为我刚开始学习神经网络,可能忽略了一些重要的东西。我是否没有足够的训练数据,需要包含更多的特征,问题在哪里,我该如何修复它或学习如何更好地处理它?

1
我对机器学习不是很了解,但是偏倚的样本会导致偏倚的结果。如果你的大部分样本数据都是关于胜利的,那么当你使用模型时,它很可能会预测/产生胜利的结果。 - iouri
胜利的次数比失败的次数多,但为什么在不同的运行中结果如此不同? - Andrew Latham
1个回答

1
玩一下参数怎么样?首先,我强烈建议只使用两个层...数学证明应该有足够的证据表明这对许多问题来说已经足够了。如果你有太多的神经元,你的神经网络将没有足够的时代来真正学习东西...所以你也可以玩一下时代的数量以及gama..我认为在你的情况下是0.15..如果你使用一个稍微大一点的值,你的神经网络应该会学得更快一些(不要害怕尝试0.3甚至0.7),正确的gama值通常取决于权重间隔或输入归一化。

你的神经网络显示出如此不同的结果,很可能是因为每次运行都有新的初始化,然后完全不同的网络,它将以不同的方式学习,因为前一个网络(different weights will have higher values so different parts of NN will learn same things)不同的部分将学习相同的东西。

我不熟悉这个库,我只是写一些关于神经网络的经验。希望这些中的一些能够帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接