Machine learning 神经网络发散而不是收敛

Machine learning 神经网络发散而不是收敛,machine-learning,artificial-intelligence,neural-network,Machine Learning,Artificial Intelligence,Neural Network,我已经实现了一个2层的神经网络(使用CUDA)。(每层2个神经元)。 我试图让它学习2个简单的二次多项式函数使用反向传播 但它不是收敛,而是发散(输出变得无穷大) 以下是我尝试过的更多细节: 我已将初始权重设置为0,但由于它发散,我将初始权重随机化 我读到,如果学习率太高,神经网络可能会发散,因此我将学习率降低到0.000001 我试图让它添加的两个函数是:3*I+7*j+9和j*j+I*I+24(我将层I和j作为输入) 我以前将它实现为一个单层,这样可以更好地近似多项式函数 我正在考虑在这个

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

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

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

  • 我已将初始权重设置为0,但由于它发散,我将初始权重随机化
  • 我读到,如果学习率太高,神经网络可能会发散,因此我将学习率降低到0.000001
  • 我试图让它添加的两个函数是:
    3*I+7*j+9
    j*j+I*I+24
    (我将层
    I
    j
    作为输入)
  • 我以前将它实现为一个单层,这样可以更好地近似多项式函数
  • 我正在考虑在这个网络中实施动量,但我不确定它是否有助于学习
  • 我使用的是一个线性(如no)激活函数
  • 开始时存在振荡,但当任何权重大于1时,输出开始发散
我已经反复检查了我的代码,但似乎没有任何问题

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

任何指示都将不胜感激

  • 如果您试图解决的问题属于分类类型,请尝试从输入A和B到隐藏节点C(C=A*wa+B*wb)的3层网络(3层网络对Kolmogorov足够)连接表示AB空间中的一条线。这条线将正确的和不正确的半格分开。从隐藏层到输出的连接,将隐藏层值相互关联,从而获得所需的输出

  • 根据您的数据,错误函数可能看起来像梳子,所以实现动量应该会有所帮助。将学习率保持在1对我来说是最合适的

  • 你的训练课程每隔一段时间就会陷入局部极小值,因此网络训练将由几个后续课程组成。如果会话超过了最大迭代次数,或者振幅太高,或者错误明显很高-会话失败,请启动另一个会话

  • 在每次开始时,使用随机(-0.5-+0.5)值重新初始化权重

  • 它确实有助于绘制错误下降图。你会得到“啊哈!”的因素


  • 神经网络代码发散的最常见原因是编码器忘记在权重表达式的变化中添加负号

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


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

    为了让我正确理解这一点,您想知道为什么您没有展示的代码本身实现了一个您没有描述的算法,却没有收敛?把自己放在我的位置上一会儿,问问自己你是否认为这是一个可以回答的问题。我投票决定关闭这个,对不起…我确信代码没有问题。我相信对于熟悉神经网络的人来说,这个算法(backprop)已经足够好地描述了。我想知道的是还有什么地方出了问题。。我删除cuda标签是为了防止误导任何人认为这是一个cuda问题。根据我的经验,当参数超限或某些函数返回无穷大(例如,如果使用逻辑损失函数,则为对数)时,可能会发生这种情况。我会先检查数值问题,例如使用梯度检查器。但这太宽了,所以我想我们帮不了你。输出不是突然变为无穷大,而是经过一些初始振荡后逐渐变为无穷大。只有当任何一个重量大于1时,它才会开始发散。所以这不是因为任何一个函数返回无穷大。我还补充了一些信息。希望能有所帮助。你有关于层数的Kolmogorov规则的参考吗?@Luis我的印象是,鉴于深度学习的出现,三层的东西已经过时了。@ChrisAnderson三层的“东西”不是“东西”。是对你想做什么,为什么做,用什么方法做的数学反思和分析。当然,您可能会放置越来越多的层(或者很多节点),但这并不保证您会相应地解决问题。关于层数的问题仍然很有趣,特别是对于最初的问题:我已经实现了一个具有2层的神经网络(使用CUDA)。(每层2个神经元)。我试图让它学习2个简单的二次多项式函数使用反向传播。哦,对不起。我想我看到有人总的来说推荐这样的东西,这让我很沮丧。你说的很有道理(我没有注意实际的问题文本)。