【问题标题】:Salvaging diverged neural networks挽救发散的神经网络
【发布时间】:2016-11-04 14:07:39
【问题描述】:

我有一个 DCNN,在经过几个 epoch 的训练后出现了分歧,但最初取得了不错的效果。返回一个纪元或纪元的一小部分,降低学习率并继续,是否“安全”,或者我应该假设某些权重可能接近病态,因此有必要完全重新开始训练(使用降低学习率)?

一个相关的问题是网络内部的什么样的行为会产生这样的结果。我认为发散应该在训练的早期发生,而不是在网络似乎已经接近完全收敛的时候。

【问题讨论】:

    标签: neural-network deep-learning caffe conv-neural-network backpropagation


    【解决方案1】:
    1. 没有。这是不安全的,因为如果分歧是由大的学习率引起的,它很可能发生在开始的时期。有些权重可能已经病态。
    2. 一般来说,结果主要是梯度误差造成的。梯度错误可能来自:

      你的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 作为激活函数还是可以上传您的网络。原型文件? @gcp
    • 我使用的是 ELU,虽然这可能有点类似于负区中的 sigmoid?它是一个标准的纯卷积网络,即卷积->ELU->卷积->ELU->等的堆栈
    • 如果你在构建 caffe 之后执行了“make runtest”并且没有抛出任何错误,我能想到的最后一个问题可能是学习率大,这意味着你最好重新开始训练学习率。 @gcp
    • 你发现问题了吗? @gcp
    猜你喜欢
    • 2017-05-21
    • 2013-08-01
    • 1970-01-01
    • 2011-03-30
    • 2011-03-05
    • 2013-08-17
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多