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é?
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:
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 .abs
meglio le perdite basate su basi.