Neural network 打捞发散神经网络

Neural network 打捞发散神经网络,neural-network,deep-learning,caffe,conv-neural-network,backpropagation,Neural Network,Deep Learning,Caffe,Conv Neural Network,Backpropagation,我有一个DCNN,经过几次训练后出现了分歧,但最初效果很好。回到一个历元或一个历元的一小部分,降低学习率,然后继续,是否“安全”,或者我应该假设一些重量可能接近病态,因此有必要完全重新开始训练(降低学习率) 一个相关的问题是,网络内部的哪种行为会产生这样的结果。我认为分歧应该在训练的早期发生,而不是在网络已经接近完全融合的时候 不,这是不安全的,因为如果发散是由高学习率引起的,那么发散很可能发生在新纪元初期。有些重物可能已经病态了 一般来说,结果主要是由梯度误差引起的。梯度误差可能来自: DCN

我有一个DCNN,经过几次训练后出现了分歧,但最初效果很好。回到一个历元或一个历元的一小部分,降低学习率,然后继续,是否“安全”,或者我应该假设一些重量可能接近病态,因此有必要完全重新开始训练(降低学习率)

一个相关的问题是,网络内部的哪种行为会产生这样的结果。我认为分歧应该在训练的早期发生,而不是在网络已经接近完全融合的时候

  • 不,这是不安全的,因为如果发散是由高学习率引起的,那么发散很可能发生在新纪元初期。有些重物可能已经病态了
  • 一般来说,结果主要是由梯度误差引起的。梯度误差可能来自:

    DCNN中某一层的正向和反向字计算错误: 前向和后向计算中的误差都可能导致模型参数更新的梯度错误,虽然在开始时可能不会导致发散,但会以错误的方式更新某些参数并累积,直到这些参数病态到足以导致训练发散

    数值不稳定性:例如,当计算X的方差D(X)时,D(X)=E{[X-E(X)]^2}比D(X)=E(X^2)-E^2(X)具有更多的数值不稳定性,因为最后一个可能导致负D(X),从而导致梯度误差甚至发散


  • 第(1)点很好。我将权重转储到一个文件中(用于“返回并降低”网络),并查找高绝对值,但没有找到任何值。所以我想我在那里很好。至于(2),我使用的是Caffe+cUDNN,所以希望梯度计算不会有错误,但我不太确定数值的稳定性。你是使用Sigmoid作为激活函数还是可以上传你的网络。prototxt@gcpI使用的是ELU,尽管这可能有点类似于负区的乙状结肠?这是一个标准的纯卷积网络,即一堆卷积->ELU->卷积->ELU->等。如果您在构建caffe后执行了“make runtest”,并且没有抛出错误,那么我能想到的最后一个问题可能是学习率高,这意味着您最好以较低的学习率重新开始培训@你找到问题了吗@gcp