神经网络发散而不是融合

时间:2013-08-01 04:34:21

标签: machine-learning artificial-intelligence neural-network

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

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

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

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

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

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

任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:5)

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

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

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

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

  5. 绘制错误下降图表确实很有帮助。你会得到那个“啊哈!”因素。

答案 1 :(得分:3)

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

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

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