Perché TensorFlow non può adattarsi al semplice modello lineare se sto minimizzando l'errore medio assoluto invece dell'errore quadrato medio?


10

In Introduzione sono appena cambiato

loss = tf.reduce_mean(tf.square(y - y_data))

per

loss = tf.reduce_mean(tf.abs(y - y_data)) 

e il modello non è in grado di apprendere che la perdita è diventata più grande con il tempo. Perché?

Risposte:


17

Ho provato questo e ho ottenuto lo stesso risultato.

È perché il gradiente di .absè più difficile per un semplice ottimizzatore da seguire ai minimi, a differenza della differenza quadrata in cui il gradiente si avvicina lentamente a zero, il gradiente della differenza assoluta ha una magnitudine fissa che si inverte bruscamente, il che tende a far oscillare l'ottimizzatore attorno al punto minimo. La discesa del gradiente di base è molto sensibile alla grandezza del gradiente e alla velocità di apprendimento, che è essenzialmente solo un moltiplicatore del gradiente per le dimensioni del gradino.

La soluzione più semplice è ridurre il tasso di apprendimento, ad es. Cambiare linea

optimizer = tf.train.GradientDescentOptimizer(0.5)

per

optimizer = tf.train.GradientDescentOptimizer(0.05)

Inoltre, gioca con diversi ottimizzatori. Alcuni saranno in grado di affrontare .absmeglio le perdite basate su basi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.