我是编程爱好者所以请原谅我并帮助填补任何空白。 根据我的理解,神经网络的良好结果需要sigmoid,要么学习率或步进率(取决于训练方法)要与学习迭代一起正确设置。
虽然有很多关于这些价值观的教育以及概括和避免过度适应的原则,但似乎并没有太多关注他们与数据和网络的关系。
我注意到样本,神经元和输入的数量似乎在这些设置最佳着陆的地方扩展。 (或多或少的输入可能会改变迭代请求,例如)。
是否有一种数学方法可以根据已知值(如样本,输入,输出,图层等)找到sigmoid,学习速率,步长,迭代等的良好(近似)起点?
答案 0 :(得分:2)
在深度学习爆炸之前,确定网络中最佳参数数量的一种常用方法是使用贝叶斯正则化。贝叶斯正则化是一种避免过度拟合的方法,即使您的网络大于必要的。
关于学习/步进率,问题在于选择较小的步进速率会使学习速度变得非常慢,而较大的步进速率可能会使您的网络出现分歧。因此,一种常见的技术是使用一种学习方法,该方法可以自动调整学习速率,以便在必要时加速并在梯度的某些区域减速。
因此,在处理这两个问题时学习神经网络的常用方法是使用Levenberg-Marquardt learning algorithm和Bayesian Regularization。 Levenberg-Marquardt算法是一种自适应算法,它可以在每次迭代后调整学习速率,能够从Gauss-Newton更新(使用二阶信息)切换回梯度下降算法(仅使用一阶信息) )根据需要。
它还可以为您估算网络中真正需要的参数数量。参数的数量是考虑网络中所有神经元的权重总数。然后,您可以使用此参数来估计您应该首先使用多少个神经元。
此方法由MATLAB function trainbr实施。但是,由于你还包含了accord-net标签,我还应该说它是由LevenbergMarquardtLearning class实现的(如果你正在处理多个输出问题,你可能想在NuGet中使用最新的alpha版本)。