批量训练使用更新总和?或平均更新?
Batch training uses sum of updates? or average of updates?
我对神经网络批量训练的问题很少。
首先,当我们使用批量训练更新权重时,变化量是批量大小的累积梯度。在这种情况下,变化量是梯度的总和?或梯度的平均值?
如果答案是梯度之和,变化量会比在线训练大很多,因为量是累加的。在这种情况下,我认为权重不能很好地优化。
否则,如果答案是梯度的平均值,那么将权重优化好似乎是非常合理的。但是,在这种情况下,我们必须比在线训练训练更多次,因为对于数据的批量大小,它只更新一次权重。
其次,无论第一个问题的答案是什么,当我使用Tensorflow for MNIST的CNN示例代码如下时,它可以如此快速地优化权重,所以即使在第二步中训练精度也达到90%以上.
============================================= ==========================
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
for i in range(1000):
batch = mnist.train.next_batch(100)
if i%100 == 0:
train_accuracy = sess.run(accuracy, feed_dict={x:batch[0], y_:batch[1], keep_prob: 1.0})
sess.run(train_step, feed_dict={x: batch[0], y_:batch[1], keep_prob:1.0})
============================================= ===========================
请解释一下Tensorflow是如何如此快速地优化权重的。
这与使用梯度总和或平均梯度相同,因为您稍后必须找到一个好的学习率,该学习率很可能会考虑梯度平均值中的批量大小除法。
但是,使用批次的平均值具有在使用不同批次大小的两次训练之间具有可比损失的优势。
这个问题的答案取决于你的损失函数。
如果 loss_element
是批次中一个元素的损失函数,那么批次的损失将是所有个体损失的函数。
例如,如果您选择使用 tf.reduce_mean
,那么您的损失将在批次的所有元素上平均。梯度也是如此。如果您使用 tf.reduce_sum
,那么您的渐变将是所有元素渐变的总和。
我对神经网络批量训练的问题很少。
首先,当我们使用批量训练更新权重时,变化量是批量大小的累积梯度。在这种情况下,变化量是梯度的总和?或梯度的平均值?
如果答案是梯度之和,变化量会比在线训练大很多,因为量是累加的。在这种情况下,我认为权重不能很好地优化。
否则,如果答案是梯度的平均值,那么将权重优化好似乎是非常合理的。但是,在这种情况下,我们必须比在线训练训练更多次,因为对于数据的批量大小,它只更新一次权重。
其次,无论第一个问题的答案是什么,当我使用Tensorflow for MNIST的CNN示例代码如下时,它可以如此快速地优化权重,所以即使在第二步中训练精度也达到90%以上.
============================================= ==========================
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
for i in range(1000):
batch = mnist.train.next_batch(100)
if i%100 == 0:
train_accuracy = sess.run(accuracy, feed_dict={x:batch[0], y_:batch[1], keep_prob: 1.0})
sess.run(train_step, feed_dict={x: batch[0], y_:batch[1], keep_prob:1.0})
============================================= ===========================
请解释一下Tensorflow是如何如此快速地优化权重的。
这与使用梯度总和或平均梯度相同,因为您稍后必须找到一个好的学习率,该学习率很可能会考虑梯度平均值中的批量大小除法。
但是,使用批次的平均值具有在使用不同批次大小的两次训练之间具有可比损失的优势。
这个问题的答案取决于你的损失函数。
如果 loss_element
是批次中一个元素的损失函数,那么批次的损失将是所有个体损失的函数。
例如,如果您选择使用 tf.reduce_mean
,那么您的损失将在批次的所有元素上平均。梯度也是如此。如果您使用 tf.reduce_sum
,那么您的渐变将是所有元素渐变的总和。