Soit une fonction simple f(x) = x^4 + 3 x ^3 + c
On cherche le minimum de cette fonction en regardant comment l'algorithme converge en fonction du parametres learning rate
import matplotlib.pyplot as plt
import numpy as np
max_iters = 10000
precision = 0.0001
# liste des valeurs du learning rate que l'on va observer
gammas = np.linspace(0.001, 0.01, 10)
# Dérivée de la fonction dont on veut trouver le minimum
fct = lambda x: 4 * x**3 - 9 * x**2
def gradient(gamma):
'''
x_0 = 6
x_t+1 = x_t - gamma * fct(x_t)
'''
iters = 0
cur_x = 6
previous_step_size = 1
x = []
while (previous_step_size > precision) & (iters < max_iters):
x.append(cur_x)
prev_x = cur_x
cur_x -= gamma * fct(prev_x)
previous_step_size = abs(cur_x - prev_x)
iters+=1
print("Gamma {} min {:.4f} f(min) {:.4f}".format(gamma, cur_x, fct(cur_x)))
return x
# Afficher les courbes de convergence pour les différentes valuers du learning_rate
fig, ax = plt.subplots(1,1, figsize = (12,6))
for gamma in gammas:
x = gradient(gamma)
plt.plot(x, label = gamma)
plt.legend()
plt.show()