近似神经网络的最佳设置?

时间:2015-04-17 09:50:03

标签: c# neural-network backpropagation accord.net

我是编程爱好者所以请原谅我并帮助填补任何空白。 根据我的理解,神经网络的良好结果需要sigmoid,要么学习率或步进率(取决于训练方法)要与学习迭代一起正确设置。

虽然有很多关于这些价值观的教育以及概括和避免过度适应的原则,但似乎并没有太多关注他们与数据和网络的关系。

我注意到样本,神经元和输入的数量似乎在这些设置最佳着陆的地方扩展。 (或多或少的输入可能会改变迭代请求,例如)。

是否有一种数学方法可以根据已知值(如样本,输入,输出,图层等)找到sigmoid,学习速率,步长,迭代等的良好(近似)起点?

1 个答案:

答案 0 :(得分:2)

在深度学习爆炸之前,确定网络中最佳参数数量的一种常用方法是使用贝叶斯正则化。贝叶斯正则化是一种避免过度拟合的方法,即使您的网络大于必要的。

关于学习/步进率,问题在于选择较小的步进速率会使学习速度变得非常慢,而较大的步进速率可能会使您的网络出现分歧。因此,一种常见的技术是使用一种学习方法,该方法可以自动调整学习速率,以便在必要时加速并在梯度的某些区域减速。

因此,在处理这两个问题时学习神经网络的常用方法是使用Levenberg-Marquardt learning algorithmBayesian Regularization。 Levenberg-Marquardt算法是一种自适应算法,它可以在每次迭代后调整学习速率,能够从Gauss-Newton更新(使用二阶信息)切换回梯度下降算法(仅使用一阶信息) )根据需要。

它还可以为您估算网络中真正需要的参数数量。参数的数量是考虑网络中所有神经元的权重总数。然后,您可以使用此参数来估计您应该首先使用多少个神经元。

此方法由MATLAB function trainbr实施。但是,由于你还包含了accord-net标签,我还应该说它是由LevenbergMarquardtLearning class实现的(如果你正在处理多个输出问题,你可能想在NuGet中使用最新的alpha版本)。