【发布时间】:2013-08-01 20:38:55
【问题描述】:
我已经实现了一个有 2 层的神经网络(使用 CUDA)。 (每层 2 个神经元)。 我正在尝试使用反向传播使其学习 2 个简单的二次多项式函数。
但不是收敛,而是发散(输出变得无穷大)
以下是有关我尝试过的更多详细信息:
- 我已将初始权重设置为 0,但由于它是发散的,因此我将初始权重随机化
- 我了解到,如果学习率太高,神经网络可能会发散,因此我将学习率降低到 0.000001
- 我试图让它添加的两个函数是:
3 * i + 7 * j+9和j*j + i*i + 24(我将层i和j作为输入) - 我之前已将其实现为单层,这样可以更好地逼近多项式函数
- 我正在考虑在此网络中实施动力,但我不确定这是否有助于它学习
- 我正在使用线性(与否)激活函数
- 一开始有振荡,但在任何权重大于 1 时输出开始发散
我已经检查并重新检查了我的代码,但似乎没有任何问题。
所以这是我的问题:这里出了什么问题?
任何指针将不胜感激。
【问题讨论】:
-
只是为了我理解正确,您想知道为什么您没有显示的代码本身实现了您没有描述的算法,不收敛?让自己站在我的立场上,问问自己你是否认为这是一个可以回答的问题。我投票结束这个,对不起...
-
我确信代码没有问题。而且我相信对于任何熟悉神经网络的人来说,算法(反向传播)已经得到了充分的描述。我想知道还有什么可能出了问题.. 我正在删除 cuda 标签以防止误导任何人认为这是一个 CUDA 问题
-
根据我的经验,当您的参数溢出或某些函数返回无穷大时(例如,如果您使用逻辑损失函数,则为对数)可能会发生这种情况。我会先检查数值问题,例如带有梯度检查器。但这太宽泛了,所以我想我们无法帮助您。
-
输出不是突然变为无穷大,而是在一些初始振荡之后逐渐变为无穷大。只有在任何权重大于 1 之后,它才会开始发散。所以这不是由于任何一个函数返回无穷大。我添加了更多信息。希望对您有所帮助。
标签: machine-learning artificial-intelligence neural-network