Machine learning 神经网络预测

Machine learning 神经网络预测,machine-learning,neural-network,Machine Learning,Neural Network,我尝试实现一个神经网络。我用反向传播来计算梯度。在获得梯度后,我将它们乘以学习率,然后从相应的权重中减去它们。(基本上是尝试应用梯度下降,如果这是错误的,请告诉我)。 因此,在准备好反向传播和梯度下降之后,我尝试的第一件事是训练一个简单的异或分类器,其中输入可以是(0,0),(1,0),(0,1),(1,1),相应的输出是0,1,1,0。所以我的神经网络包含2个输入单元,1个输出单元和一个隐藏层,其中有3个单元。当以3.0的学习率对其进行训练,训练时间>100(甚至尝试次数>5000),成本会下

我尝试实现一个神经网络。我用反向传播来计算梯度。在获得梯度后,我将它们乘以学习率,然后从相应的权重中减去它们。(基本上是尝试应用梯度下降,如果这是错误的,请告诉我)。
因此,在准备好反向传播和梯度下降之后,我尝试的第一件事是训练一个简单的异或分类器,其中输入可以是(0,0),(1,0),(0,1),(1,1),相应的输出是0,1,1,0。所以我的神经网络包含2个输入单元,1个输出单元和一个隐藏层,其中有3个单元。当以3.0的学习率对其进行训练,训练时间>100(甚至尝试次数>5000),成本会下降,直到达到某个特定点为止,因此保持不变。每次我运行程序时,权重都会随机初始化,但它总是以相同的特定成本被卡住。不管怎样,训练结束后,我试着在上面的任何输入上运行我的神经网络,输出总是0.5000。我考虑过改变输入和输出,使它们是:(-1,-1),(1,-1),(-1,1),(1,1)和输出-1,1,1,-1。现在,当以相同的学习率进行训练时,无论迭代次数多少,成本都在不断下降,但结果仍然是错误的,而且它们总是非常接近于0。我甚至试着训练它进行疯狂的迭代次数,结果如下:[迭代次数:(20kk),输入:(1,-1),输出:(1.6667e-08)],还有[迭代次数:(200kk),输入:(1,-1),输出:(1.6667e-09)],也试过输入(1,1)和其他,输出也非常接近于0。似乎输出总是平均值(min(y),max(y)),我以什么形式提供输入/输出并不重要。我想不出我做错了什么,有人能帮忙吗?

有很多地方你可能会做错:

  • 以数字形式检查渐变
  • 你必须使用非线性隐藏单元来学习异或-你有非线性激活吗
  • 你需要偏差神经元,有吗
不应引起上述问题但值得解决的次要问题:

  • 输出节点中是否有S形激活(因为您的网络是一个分类器)
  • 您是否使用交叉熵成本进行培训(尽管这是一个小问题)

提供代码,因为存在错误。@lejlot以下是代码:请根据“编辑”将您的代码包含在问题正文中。另外,请将您的问题格式化,以便更易于阅读。谢谢。如果你检查了我的代码,你会发现我使用的是一个矢量化的实现,我总是在激活矩阵上加一列1,然后再乘以权值转置矩阵,所以是的,我使用的是偏差神经元。所有的神经元都使用S形激活,是的,我使用交叉熵代价。至于非线性隐藏单位,恐怕我不明白你的意思。你用数字检查过梯度了吗?您是否尝试过使用更“典型”的学习率(如1e-3)?您还应该将正则化因子设置为0(我不知道您当前使用的是什么),我刚刚尝试将1e-3作为学习速率,结果相同。我没有用数字来检查梯度,我正在考虑怎么做。当前的实现使得这一点很难做到。不,事实并非如此。在更新之前,你有x=x-learning_rate*gradient,只需在这里添加数值计算的梯度,并比较两者。如果我没有弄糟它,似乎我计算的梯度不正确。通过数值梯度检查,我得到以下输出:θ1->[0.0144 0.0132 0.0053;0.0131 0.0098-0.0030;-0.0022-0.0031 0.0014]的数值计算梯度θ1->[0.0144-0.0790-0.1893;0.0131 0.1244-0.0331;-0.0022-0.1428 0.2661]。我可以观察到,第一列的计算是正确的。我希望我没有把数值计算搞砸。