神经网络发散而不是融合

Sha*_* RC 4 artificial-intelligence machine-learning neural-network

我已经实现了一个有2层的神经网络(使用CUDA).(每层2个神经元).我试图让它使用反向传播学习2个简单的二次多项式函数.

但它没有收敛,而是发散(输出变得无穷大)

以下是我尝试过的更多细节:

  • 我已经将初始权重设置为0,但由于它是分歧的,我已经随机化了初始权重
  • 我读到如果学习率太高,神经网络可能会发散,所以我将学习率降低到0.000001
  • 我试图让它添加的两个函数是:3 * i + 7 * j+9j*j + i*i + 24(我给出了图层ij输入)
  • 我以前将它实现为单层,可以更好地逼近多项式函数
  • 我正在考虑在这个网络中实施势头,但我不确定这会有助于它学习
  • 我正在使用线性(如无)激活功能
  • 在开始时存在振荡,但是当任何权重变得大于1时,输出开始发散

我检查并重新检查了我的代码,但似乎没有任何问题.

所以这是我的问题:这里出了什么问题?

任何指针将不胜感激.

Lex*_*Lex 5

  1. 如果您要解决的问题是分类类型,请尝试3层网络(3对于Kolmogorov就足够了)从输入A和B到隐藏节点C的连接(C = A*wa + B*wb)表示一行AB空间.该行划分正确和不正确的半空格.从隐藏层到输出的连接,将隐藏层值相互关联,为您提供所需的输出.

  2. 根据您的数据,错误功能可能看起来像梳子,因此实施动力应该有所帮助.将学习率保持在1对我来说是最佳的.

  3. 您的培训课程每隔一段时间就会陷入局部最小化,因此网络培训将包括几个后续会议.如果会话超过最大迭代次数或幅度太高,或者错误显然很高 - 会话失败,则启动另一次.

  4. 在每个开始时,使用随机(-0.5 - +0.5)值重新初始化您的权重.

  5. 图表你的错误下降真的很有帮助.你会得到那个"啊哈!" 因子.

  • 你有关于层数的Kolmogorov规则的参考吗? (2认同)

小智 4

神经网络代码出现分歧的最常见原因是编码器忘记在权重表达式的变化中添加负号。

另一个原因可能是用于计算梯度的误差表达式存在问题。

如果这些不成立,那么我们需要查看代码和答案。