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?

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.