gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:35 27 4
gpt4 key购买 nike

我正在研究反向传播算法的实现。到目前为止我已经实现的似乎有效,但我不能确定该算法是否得到很好的实现,这是我在网络训练测试期间注意到的:

实现规范:

  • 包含近 100000 个原始数据集(3 个变量作为输入,这三个变量之和的正弦曲线作为预期输出)。
  • 网络确实有 7 层,所有层都使用 Sigmoid 激活函数

当我运行反向传播训练过程时:

  • 最小的错误代价是在第四次迭代时找到的(最小的错误代价是140,这正常吗?我期望的比那个少很多)
  • 在第四次迭代后,错误的成本开始增加(我不知道这是否正常?)

最佳答案

简短的回答是“不,很可能您的实现不正确”。您的网络没有经过训练,可以通过非常高的错误成本观察到。正如评论中所讨论的,您的网络受到 vanishing gradient problem 的严重影响。 ,这在深度网络中是不可避免的。本质上,你网络的第一层比后面的学习得慢得多。所有的神经元一开始都会得到一些随机的权重,对吧?由于第一层几乎没有学到任何东西,因此较大的初始错误会传播到整个网络!

如何解决?从您对问题的描述看来,只有一个隐藏层的前馈网络应该能够解决这个问题(如 universal approximation theorem 中所证明)。

检查例如free online book by Michael Nielsen如果您想了解更多信息。

so I do understand from that the back propagation can't deal with deep neural networks? or is there some method to prevent this problem?

可以,但这绝不是一个微不足道的挑战。深度神经网络从 60 年代就开始使用,但直到 90 年代,研究人员才想出如何有效地处理它们的方法。我推荐阅读“Neural Networks: Tricks of the Trade”的“Efficient BackProp”一章(作者 Y.A. LeCun 等人)。

总结如下:

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

应按如下方式选择训练网络的首选方法:

  • 如果训练集很大(超过几百个样本)且冗余,并且任务是分类,请使用经过仔细调整的随机梯度,或使用随机对角 Levenberg Marquardt 方法。
  • 如果训练集不是太大,或者任务是回归,则使用共轭梯度。

此外,我的一些一般性评论:

  • 如果您自己实现,请注意数值稳定性。很容易陷入麻烦。
  • 想想架构。全连接的多层网络很少是一个聪明的想法。不幸的是,从理论的角度来看,人们对 ANN 了解甚少,您可以做的最好的事情之一就是检查对其他人有效的方法并学习有用的模式(使用正则化、池化和丢弃层等)。

关于algorithm - 如何测试我的反向传播神经网络的实现是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872353/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com