【问题标题】:How to set parameters of the Adadelta Algorithm in Tensorflow correctly?如何正确设置 Tensorflow 中 Adadelta 算法的参数?
【发布时间】:2016-07-28 09:36:13
【问题描述】:

我一直在使用 Tensorflow 进行回归。 我的神经网络非常小,有 10 个输入神经元,单层 12 个隐藏神经元和 5 个输出神经元。

  • 激活函数是relu
  • 成本是产出与实际价值之间的平方距离
  • 我的神经网络可以使用 GradientDescent、Adam、Adagrad 等其他优化器正确训练。

但是,当我尝试使用 Adadelta 时,神经网络根本无法训练。变量在每一步都保持不变。

我尝试了所有可能的初始 learning_rate(从 1.0e-6 到 10)和不同的权重初始化:它总是一样的。

有人知道发生了什么吗?

非常感谢

【问题讨论】:

    标签: python neural-network tensorflow


    【解决方案1】:

    简短回答:不要使用 Adadelta

    今天很少有人使用它,你应该坚持:

    • tf.train.MomentumOptimizer0.9 动量非常标准并且运行良好。缺点是您必须找到自己的最佳学习率。
    • tf.train.RMSPropOptimizer:结果不太依赖于良好的学习率。该算法与 Adadelta 非常相似,但在我看来表现更好。

    如果你真的想使用 Adadelta,请使用论文中的参数:learning_rate=1., rho=0.95, epsilon=1e-6。较大的epsilon 会在一开始就有所帮助,但要准备好等待比其他优化器更长的时间才能看到收敛。

    请注意,在论文中,他们甚至没有使用学习率,这与保持它等于 1 相同。


    长答案

    Adadelta 的启动非常缓慢。 paper 的完整算法是:

    问题在于它们会累积更新的平方。

    • 在第 0 步,这些更新的运行平均值为零,因此第一次更新将非常小。
    • 由于第一次更新很小,一开始更新的运行平均值会很小,开始有点恶性循环

    我认为 Adadelta 在更大的网络上比你的表现更好,经过一些迭代后,它应该与 RMSProp 或 Adam 的性能相当。


    下面是我使用 Adadelta 优化器的代码:

    import tensorflow as tf
    
    v = tf.Variable(10.)
    loss = v * v
    
    optimizer = tf.train.AdadeltaOptimizer(1., 0.95, 1e-6)
    train_op = optimizer.minimize(loss)
    
    accum = optimizer.get_slot(v, "accum")  # accumulator of the square gradients
    accum_update = optimizer.get_slot(v, "accum_update")  # accumulator of the square updates
    
    sess = tf.Session()
    sess.run(tf.initialize_all_variables())
    
    for i in range(100):
        sess.run(train_op)
        print "%.3f \t %.3f \t %.6f" % tuple(sess.run([v, accum, accum_update]))
    

    前 10 行:

      v       accum     accum_update
    9.994    20.000      0.000001
    9.988    38.975      0.000002
    9.983    56.979      0.000003
    9.978    74.061      0.000004
    9.973    90.270      0.000005
    9.968    105.648     0.000006
    9.963    120.237     0.000006
    9.958    134.077     0.000007
    9.953    147.205     0.000008
    9.948    159.658     0.000009
    

    【讨论】:

    • 谢谢,我没有发现更新的过载...我正在使用 Adam,但我会尝试 RMSProp !
    • 不幸的是,论文说“累积 g^2 和 x^2”,但是从中获得 RMS 的平方根丢失了。它们是否在tf / 的代码中用于任何其他实现——谁知道?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2016-03-13
    • 1970-01-01
    • 2011-07-20
    • 2021-01-07
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多