CommencezCommencez gratuitement

Éviter les minimums locaux

Le problème précédent a montré à quel point il est facile de rester coincé dans des minimums locaux. Nous avions un problème d'optimisation simple à une variable et, malgré tout, la descente de gradient n'a pas réussi à trouver le minimum global parce qu'il fallait d'abord traverser des minimums locaux. Une façon d'éviter ce problème consiste à utiliser le momentum, qui permet à l'optimiseur de franchir les minimums locaux. Nous allons de nouveau utiliser la fonction de perte du problème précédent, qui a été définie et mise à votre disposition sous le nom loss_function().

Le graphique représente une fonction d'une seule variable contenant plusieurs minimums locaux et un minimum global.

Plusieurs optimiseurs dans tensorflow ont un paramètre de momentum, notamment SGD et RMSprop. Vous utiliserez RMSprop dans cet exercice. Notez que x_1 et x_2 ont été initialisés à la même valeur cette fois-ci. De plus, keras.optimizers.RMSprop() a déjà été importé pour vous à partir de tensorflow.

Cette activité fait partie du cours

Introduction à TensorFlow en Python

Voir le cours

Instructions de l’exercice

  • Configurez l'opération opt_1 pour utiliser un taux d'apprentissage (learning rate) de 0.01 et un momentum de 0.99.
  • Configurez opt_2 pour utiliser l'optimiseur RMSprop (propagation du carré moyen) avec un taux d'apprentissage de 0.01 et un momentum de 0.00.
  • Définissez l'opération de minimisation pour opt_2.
  • Affichez x_1 et x_2 sous forme de tableaux numpy.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Initialize x_1 and x_2
x_1 = Variable(0.05,float32)
x_2 = Variable(0.05,float32)

# Define the optimization operation for opt_1 and opt_2
opt_1 = keras.optimizers.RMSprop(learning_rate=____, momentum=____)
opt_2 = ____

for j in range(100):
	opt_1.minimize(lambda: loss_function(x_1), var_list=[x_1])
    # Define the minimization operation for opt_2
	____

# Print x_1 and x_2 as numpy arrays
print(____, ____)
Modifier et exécuter le code