Mengapa TensorFlow tidak cocok dengan model linier sederhana jika saya meminimalkan kesalahan rata-rata absolut alih-alih kesalahan kuadrat rata-rata?

10

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?

Brans Ds
sumber

Jawaban:

17

Saya mencoba ini dan mendapat hasil yang sama.

Itu karena gradien .abslebih 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 .abskerugian berbasis lebih baik.

Neil Slater
sumber