【问题标题】:Does Stochastic Gradient Descent even work with TensorFlow?随机梯度下降甚至可以与 TensorFlow 一起使用吗?
【发布时间】:2016-12-19 14:39:37
【问题描述】:

我设计了一个 MLP,全连接,有 2 个隐藏层和一个输出层。 如果我使用批量或小批量梯度下降,我会得到很好的学习曲线。

但在执行随机梯度下降时是一条直线(紫色)

我做错了什么?

据我了解,如果我在每个训练步骤中只提供一个训练/学习示例,我会使用 Tensorflow 进行随机梯度下降,例如:

X = tf.placeholder("float", [None, amountInput],name="Input")
Y = tf.placeholder("float", [None, amountOutput],name="TeachingInput")
...
m, i = sess.run([merged, train_op], feed_dict={X:[input],Y:[label]})

其中 input 是一个 10 分量的向量,label 是一个 20 分量的向量。

对于测试,我运行了 1000 次迭代,每次迭代都包含 50 个准备好的训练/学习示例之一。 我期待一个overfittet nn。但如你所见,它不会学习:(

因为 nn 将在在线学习环境中执行,所以不能选择小批量或批量梯度下降。

感谢任何提示。

【问题讨论】:

    标签: tensorflow gradient-descent


    【解决方案1】:

    批量大小会影响有效学习率。

    如果您考虑单个参数的更新公式,您会发现它已更新平均为该参数计算的各种值,对于输入批次中的每个元素。

    这意味着,如果您使用大小为 n 的批大小,则每个参数的“真实”学习率约为 learning_rate/n。

    因此,如果您使用大小为 n 的批次训练的模型训练没有问题,这是因为该批次大小的学习率还可以。

    如果使用纯随机梯度下降,则必须降低学习率(通常降低 10 次方)。

    因此,例如,如果您的学习率为1e-4,批量大小为128,请尝试使用1e-4 / 128.0 的学习率,看看网络是否学习(应该)。

    【讨论】:

    • 我很困惑,哪里可以看到值的“平均”?我已经完成了y = b0 + b1 * x 功能的测试。我可以输出梯度和 w.r.t.每个参数。每一步 delta(b0) = learning_rate * grad_sum(b0)。总和越高,批次中的值越多。那是对于批处理模式,我在每个步骤中都会得到更高的参数变化。事实上,在一个步骤中,进料一个批次,参数变化等于变化的总和,如果拆分该批次并每一步进料一个样品。如果需要,我可以分享我的输出。请帮助理解这一点。
    猜你喜欢
    • 2016-06-13
    • 2021-12-18
    • 2018-12-10
    • 2016-09-25
    • 2018-09-09
    • 2021-02-20
    • 1970-01-01
    • 2011-07-04
    • 2016-05-16
    相关资源
    最近更新 更多