ニューラルネットワークのバッチトレーニングに関する質問はほとんどありません。バッチトレーニングは更新の合計を使用しますか?または更新の平均?
まず、バッチトレーニングを使用してウェイトを更新すると、変化量はバッチサイズの累積勾配です。この場合、変化量は、勾配の合計であるか?または勾配の平均?
答えは勾配の和である場合には量が蓄積されているので、変化量は、オンライントレーニングよりもはるかに大きくなります。この場合、重みを最適化することはできません。
答えは勾配の平均値である場合にはそれ以外の場合は、うまく重みを最適化するために、非常に合理的なようです。しかし、この場合、データのバッチサイズに対して1回の重みしか更新しないため、オンライントレーニングよりもはるかに多くの時間を訓練する必要があります。
第2質問では、次のようにMNISTのTensorflowのCNNサンプルコードを使用すると、重みが非常に速く最適化できるため、トレーニングの精度は2番目のステップでも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はどのようにして重量を非常に速く最適化するのか説明してください。