-1

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

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

我注意到样本、神经元和输入的数量似乎与这些设置最适合的地方成比例。(例如,更多或更少的输入可能会改变迭代 req)。

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

4

1 回答 1

2

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

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

因此,在处理这两个问题的同时学习神经网络的一种常见方法是使用带有贝叶斯正则化的Levenberg-Marquardt 学习算法。Levenberg-Marquardt 算法是一种自适应算法,因为它可以在每次迭代后调整学习率,能够从 Gauss-Newton 更新(使用二阶信息)切换回梯度下降算法(仅使用一阶信息) ) 如所须。

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

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

于 2015-04-17T18:11:07.467 回答