神经网络需要学习多少个时代? (包括测试结果)

好吧,让我先说一下,我很清楚这取决于很多因素,我正在寻找有经验的人的一些一般指导方针。

我的目标不是制作一个可以为我计算数字平方的神经网络,但我认为这是一个很好的实验,看看我是否正确实现了反向传播算法。 这看起来是个好主意吗? 无论如何,我担心我没有正确地实现学习算法(完全)。

我的测试(结果):

  • 训练数据 :使用Java的随机数在500和0.999之间随机生成500个数字
  • 网络拓扑3层具有1个输入神经元,5个隐藏神经元,1个输出神经元
  • 权重:全部生成为-1到1之间的随机值(java.util.Random.nextDouble()* 2 – 1;)
  • 使用偏置节点:(numOfInputs + 1),以便输入[input.length -1] = 1
  • 激活function :Sigmoid
  • 学习率 :如下面的结果代码所示
  • 没有实施任何动力等
  • 结果:
Epochs: 10,000 Learning Rate .25 0.5 = [0.24203878039631344] 0.9 = [0.7942587190918747] 0.1 = [-0.005433286011774396] Changed learning rate to 0.3 0.5 = [0.2891542106869196] 0.9 = [0.8159817287374298] 0.1 = [-0.03614377685205278] Changed epoch to 1,000 with .25 learning rate 0.5 = [0.36399147315079117] 0.9 = [0.7585916275848852] 0.1 = [-0.02814488264341608] Kept epoch at 1,000 with .30 learning rate 0.5 = [0.3872669778857468] 0.9 = [0.8160049820236891] 0.1 = [-0.03328304871978338] Epochs: 100,000: .25 learning rate 0.5 = [0.24533230649123738] 0.9 = [0.8146287680498014] 0.1 = [0.006935561897963849] .30 learning rate 0.5 = [0.24660900415003595] 0.9 = [0.8097729997778165] 0.1 = [0.013269893700964097] 

还有其他“简单”的东西,我应该尝试训练网络来检查它的学习能力吗?

您可以做的最简单的事情之一是计算XOR函数。 为了测试“正常”多层感知器,这是我通常做的。 在学习率为0.2的情况下,XOR问题在不到100个历元中以2 – 5 – 1神经元完美地解决(99%平均准确度)。

使用网络(MLP)我编码(tanh,没有偏置神经元,但每个神经元的偏差值,初始化在0.1和0.5之间的偏差,每个初始化0.5的偏差,从0.001到2.0的1.000训练数据集和激活归一化(输入/激活)除了输入层神经元之外的所有神经元除以父层中的神经元数量),1-5-1神经元)我尝试了你的问题,每次在不到2000个历元中获得95%的平均准确度,学习率为0.1 。

这可能有几个原因。 对于我的网络,0.001到1.0需要大约两倍的时间来学习。 此外,所提到的激活归一化(在大多数情况下)减少了急剧学习特定问题所需的时期。

除此之外,我对每个神经元的偏差值进行了大部分积极的体验,而不是每层一个偏置神经元。

此外,如果你的学习率太高(并且你做了很多时期),你可能会冒着过度拟合的风险。

这是一个necroposting,但我认为对新的神经网络的人知道这将是很好的。

对于一般的神经网络和机器学习模型的基准测试,一个常见的选择是Thrun,Fahlman等人的MONK数据集及其相关论文,您可以在

http://robots.stanford.edu/papers/thrun.MONK.html

它由一组三个简单的分类问题组成,每个问题都用不同的机器学习模型解决。

如果您查看神经网络章节,您可以看到输入是如何编码的,设置了哪些超参数(例如神经元的数量或学习率),以及结果是什么,因此您可以从那里轻松地对自己的实现进行基准测试。

我认为它比XOR问题更强大(我从经验谈起,因为当我第一次实现神经网络时,我的错误实现恰好解决了XOR问题而不是MONK问题)。