Algorithm 如何测试我的反向传播神经网络实现是否正确

Algorithm 如何测试我的反向传播神经网络实现是否正确,algorithm,neural-network,backpropagation,Algorithm,Neural Network,Backpropagation,我正在研究反向传播算法的实现。到目前为止,我所实现的似乎是可行的,但我不能确定算法是否得到了很好的实现,以下是我在网络培训测试中注意到的: 实施规范: 包含近100000个原始数据的数据集(3个变量作为输入,这三个变量之和的正弦作为预期输出) 该网络有7层,所有层均使用Sigmoid激活功能 当我运行反向传播培训过程时: 在第四次迭代中发现了错误的最小代价(错误的最小代价是140,这正常吗?我预期的要比这个小得多) 在第四次迭代之后,错误的代价开始增加(我不知道这是否正常?) 简短的回答是

我正在研究反向传播算法的实现。到目前为止,我所实现的似乎是可行的,但我不能确定算法是否得到了很好的实现,以下是我在网络培训测试中注意到的:

实施规范:

  • 包含近100000个原始数据的数据集(3个变量作为输入,这三个变量之和的正弦作为预期输出)
  • 该网络有7层,所有层均使用Sigmoid激活功能
当我运行反向传播培训过程时:

  • 在第四次迭代中发现了错误的最小代价(错误的最小代价是140,这正常吗?我预期的要比这个小得多
  • 在第四次迭代之后,错误的代价开始增加(我不知道这是否正常?
    • 简短的回答是“不,很可能您的实现不正确”。您的网络没有进行培训,这一点可以从非常高的错误成本中看出。正如在评论中所讨论的,您的人际网络受到严重的负面影响,这在深度人际网络中是不可避免的。本质上,网络的前几层比后几层学习慢得多。所有神经元在开始时都会得到一些随机权重,对吗?由于第一层几乎没有学习任何东西,因此较大的初始错误会传播到整个网络

      如何修复它?从您对问题的描述来看,只有一个隐藏层的前馈网络应该能够做到这一点(如中所证明的)

      检查,例如,您是否想了解更多信息


      所以我确实理解了反向传播不能处理深层神经网络?或者有什么方法可以防止这个问题

      可以,但这绝不是一个微不足道的挑战。自60年代以来,人们就开始使用深度神经网络,但直到90年代,研究人员才提出了有效处理它们的方法。我建议阅读“神经网络:交易技巧”中的“高效反向支撑”一章(由Y.A.LeCun等人撰写)

      总结如下:

      • 洗牌
      • 通过减去平均值使输入变量居中
      • 将输入变量规格化为标准偏差1
      • 如果可能,取消输入变量的相关
      • 选择一个具有sigmoid函数
        f(x)=1.7159*(tanh(2/3x)
        )的网络:它不会在+1/-1处饱和,而是在这些点具有最高增益(二阶导数最大)
      • 在sigmoid范围内设置目标值,通常为+1和-1
      • 权重应从平均值为零的分布中随机抽取,标准偏差由
        m^(-1/2)
        给出,其中
        m
        是单位的输入数量
      培训网络的首选方法应如下所示:

      • 如果训练集很大(超过几百个样本)并且是冗余的,如果任务是分类的,则使用带有仔细调整的随机梯度,或者使用随机对角Levenberg-Marquardt方法
      • 如果训练集不是太大,或者任务是回归,则使用共轭梯度
      还有,我的一些一般性意见:

      • 如果你自己实现的话,注意数值的稳定性。很容易陷入麻烦
      • 想想体系结构。完全连接的多层网络很少是一个明智的想法。不幸的是,从理论角度来看,对ANN的理解很差,你能做的最好的事情之一就是检查对其他人有用的东西,并学习有用的模式(使用正则化、池化和退出层等等)

      您使用的成本函数是什么?您的乙状结肠外观如何(函数)?你的ANN的体系结构是什么?根据你迄今为止所写的,我想说的是,很可能它的实现很差,并且你遇到了梯度问题。代价函数是ANN的每个输出和训练集中的预期输出之间的欧几里德距离之和,s形函数是1/(1-exp(-x)),ANN有三个输入和一个输出,也有7层,每层中的神经元数量从每层2到5个不等。7层是backprop问题。7层是算法问题,因为梯度消失问题。BP可以无问题训练两层。如果我能测试我的BP实现,我会测试他XOR问题。因此,我确实了解到反向传播无法处理深层神经网络?或者有什么方法可以防止这个问题?@elkorchianas我希望我的内联回答能有所帮助。高效反向传播是几十篇科学论文的主题。