Dalam Pendahuluan saya baru saja berubah
loss = tf.reduce_mean(tf.square(y - y_data))
untuk
loss = tf.reduce_mean(tf.abs(y - y_data))
dan model tidak dapat mempelajari kerugian hanya menjadi lebih besar seiring waktu. Mengapa?
Dalam Pendahuluan saya baru saja berubah
loss = tf.reduce_mean(tf.square(y - y_data))
untuk
loss = tf.reduce_mean(tf.abs(y - y_data))
dan model tidak dapat mempelajari kerugian hanya menjadi lebih besar seiring waktu. Mengapa?
Jawaban:
Saya mencoba ini dan mendapat hasil yang sama.
Itu karena gradien .abs
lebih sulit bagi pengoptimal sederhana untuk mengikuti ke minimum, tidak seperti perbedaan kuadrat di mana gradien mendekati nol perlahan-lahan, gradien dari perbedaan absolut memiliki besaran tetap yang tiba-tiba berbalik, yang cenderung membuat pengoptimal berosilasi di sekitar titik minimum. Keturunan gradien dasar sangat peka terhadap besarnya gradien, dan terhadap tingkat pembelajaran, yang pada dasarnya hanyalah pengganda dari gradien untuk ukuran langkah.
Perbaikan paling sederhana adalah dengan mengurangi tingkat pembelajaran misalnya mengubah baris
optimizer = tf.train.GradientDescentOptimizer(0.5)
untuk
optimizer = tf.train.GradientDescentOptimizer(0.05)
Juga, bermainlah dengan pengoptimal yang berbeda. Beberapa akan dapat mengatasi .abs
kerugian berbasis lebih baik.