Na introdução , acabei de mudar
loss = tf.reduce_mean(tf.square(y - y_data))
para
loss = tf.reduce_mean(tf.abs(y - y_data))
e o modelo é incapaz de aprender a perda se tornou maior com o tempo. Por quê?
fonte
Na introdução , acabei de mudar
loss = tf.reduce_mean(tf.square(y - y_data))
para
loss = tf.reduce_mean(tf.abs(y - y_data))
e o modelo é incapaz de aprender a perda se tornou maior com o tempo. Por quê?
Eu tentei isso e obtive o mesmo resultado.
É porque o gradiente de .abs
é mais difícil para um otimizador simples seguir até os mínimos, ao contrário da diferença quadrada em que o gradiente se aproxima de zero lentamente, o gradiente da diferença absoluta tem uma magnitude fixa que reverte abruptamente, o que tende a fazer o otimizador oscilar em torno do mínimo. ponto mínimo. A descida básica do gradiente é muito sensível à magnitude do gradiente e à taxa de aprendizado, que é essencialmente apenas um multiplicador do gradiente para os tamanhos das etapas.
A solução mais simples é reduzir a taxa de aprendizado, por exemplo, mudar de linha
optimizer = tf.train.GradientDescentOptimizer(0.5)
para
optimizer = tf.train.GradientDescentOptimizer(0.05)
Além disso, brinque com diferentes otimizadores. Alguns serão capazes de lidar .abs
melhor com as perdas com base.