Formule
Dans la fonction initialisation(X), on tire $W$ avec np.random.randn(X.shape[1], 1). Justifier ce choix de forme : pourquoi $X.shape[1]$ ? Pourquoi un $1$ supplementaire ? Que se passe-t-il si l'on remplace par np.random.randn(X.shape[0]) ?