调试神经网络

数据挖掘 机器学习 Python 神经网络
2021-09-25 06:47:37

我使用 scipy.optimize.minimize (共轭梯度)优化函数在 python 中构建了一个人工神经网络。

我已经实现了梯度检查,仔细检查了所有内容等,我很确定它工作正常。

我已经运行了几次,它达到了“优化成功终止”,但是当我增加隐藏层的数量时,假设的成本在它成功终止后会增加(其他一切都保持不变)。

直觉上,当隐藏层的数量增加时,似乎成本应该降低,因为它能够生成更复杂的假设,可以更好地拟合数据,但情况似乎并非如此。

我有兴趣了解这里发生了什么,或者我是否错误地实现了神经网络?

2个回答

神经网络有很多方法会出错,以至于很难调试。此外,为了满足您的直觉,每个额外的隐藏层都会使学习变得更加困难。话虽如此,这里有一些可能性:

  1. 您添加了重量衰减。添加更多层会增加更多权重,这会增加您的正则化成本。
  2. 问题很简单,一个隐藏层的模型就足够了。添加更多隐藏层会使网络更难学习(更难的优化问题)。
  3. 优化方法做得不好(我更喜欢 climin 到 scipy.optimize)。
  4. 您正在使用 sigmoid/tanh 激活函数。sigmoid 函数会导致梯度消失问题,这使得更多层的学习变得困难。尝试使用 ReLu 函数。

训练神经网络需要大量的练习、运气和耐心。祝你好运。

在大多数情况下,增加标准神经网络的隐藏层数量实际上不会改善结果。改变隐藏层的大小

这个事实(隐藏层的数量很少)实际上在历史上已经被注意到,并且是深度学习领域背后的动机。深度学习是训练多层神经网络的有效巧妙方法,例如,在训练不同层时隔离特征子集。

YouTube上关于此主题的精彩介绍视频