2015-04-17 46 views
1

我是一个编程爱好者,请原谅我,并帮助填补任何空白。 从我理解神经网络的良好结果需要sigmoid,要么学习率或步速(取决于训练方法)沿着正确设置学习迭代。逼近神经网络的最佳设置?

尽管对这些价值观和泛化原理以及避免过度拟合有很多教育,但似乎并没有太多关注它们与数据和网络的关系。

我注意到样本,神经元和投入的数量似乎在这些设置最好的情况下成比例。 (例如,或多或少的输入可能会改变迭代请求)。

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

+1

如果你的模型是反向传播,我可以告诉你,你只需要1个隐藏层。关于您询问的其他问题,我确定正确的参数取决于(并调整到)输入和输出空间。至少这是我10年前从文学中记得的。 – Robinson

+0

即使您的模型使用反向传播,您可能也想使用多个隐藏层。虽然带有一个隐藏层的神经网络是通用逼近器,但根据您使用的激活函数,更多图层可能会有所帮助,请参阅深入学习。 – Cesar

回答

2

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

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

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

它也可以给你一个你在网络中真正需要的参数数量的估计值。参数的数量是考虑网络中所有神经元的权重总数。然后,您可以使用此参数来估计您应该使用的神经元数量。

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

+0

感谢塞萨尔花时间回答,您的图书馆和奉献给它非常感谢。我通过参数来假设你的意思是EffectiveParameters? – Catnaps909

+0

是的,这个属性应该给出网络有效使用的大概参数数量 - 顺便说一下,谢谢!我希望这个框架对你有用! – Cesar