随机梯度下降甚至可以与 TensorFlow 一起使用吗?
Does Stochastic Gradient Descent even work with TensorFlow?
我设计了一个 MLP,全连接,有 2 个隐藏层和一个输出层。
如果我使用批量或小批量梯度下降,我会得到一个很好的学习曲线。
但是执行随机梯度下降时的一条直线(紫色)
我做错了什么?
据我所知,如果我在每个训练步骤中只提供一个 train/learn 示例,我会使用 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]})
其中输入是一个 10 分量向量,标签是一个 20 分量向量。
对于测试 I 运行 1000 次迭代,每次迭代包含 50 个准备好的 train/learn 示例之一。
我期待一个 overfittet nn。但如您所见,它不会学习 :(
因为 nn 将在在线学习环境中执行,所以小批量或批量梯度下降不是一个选项。
感谢任何提示。
批量大小影响有效学习率。
如果您考虑单个参数的更新公式,您会发现它更新了输入批次中每个元素的为此参数计算的各种值的平均值。
这意味着如果您使用大小为 n 的批处理大小,则每个参数的 "real" 学习率约为 learning_rate/n。
因此,如果您使用大小为 n 的批次训练的模型没有问题,这是因为该批次大小的学习率还可以。
如果你使用纯随机梯度下降,你必须降低学习率(通常是 10 的某个幂)。
因此,例如,如果您的学习率为 1e-4
,批量大小为 128
,请尝试使用 1e-4 / 128.0
的学习率,看看网络是否学习(它应该)。
我设计了一个 MLP,全连接,有 2 个隐藏层和一个输出层。 如果我使用批量或小批量梯度下降,我会得到一个很好的学习曲线。
但是执行随机梯度下降时的一条直线(紫色)
我做错了什么?
据我所知,如果我在每个训练步骤中只提供一个 train/learn 示例,我会使用 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]})
其中输入是一个 10 分量向量,标签是一个 20 分量向量。
对于测试 I 运行 1000 次迭代,每次迭代包含 50 个准备好的 train/learn 示例之一。 我期待一个 overfittet nn。但如您所见,它不会学习 :(
因为 nn 将在在线学习环境中执行,所以小批量或批量梯度下降不是一个选项。
感谢任何提示。
批量大小影响有效学习率。
如果您考虑单个参数的更新公式,您会发现它更新了输入批次中每个元素的为此参数计算的各种值的平均值。
这意味着如果您使用大小为 n 的批处理大小,则每个参数的 "real" 学习率约为 learning_rate/n。
因此,如果您使用大小为 n 的批次训练的模型没有问题,这是因为该批次大小的学习率还可以。
如果你使用纯随机梯度下降,你必须降低学习率(通常是 10 的某个幂)。
因此,例如,如果您的学习率为 1e-4
,批量大小为 128
,请尝试使用 1e-4 / 128.0
的学习率,看看网络是否学习(它应该)。