Dans nos autres vidéos, nous avons parlé des principes de base pour finetuner un modèle de langage avec Tensorflow
(et comme toujours, lorsque je fais référence à des vidéos, je les mets en lien ci-dessous). Pouvons-nous faire mieux quand même ? Voici donc
le code de notre vidéo du finetuning du modèle, et pendant que cela tourne, nous pourrions certainement modifier
quelques choses. Le taux d'apprentissage est de loin le plus important. Dans cette vidéo, nous expliquerons
comment le modifier, ce qui rendra votre entraînement beaucoup plus systématiquement réussie. En fait,
nous souhaitons modifier deux choses concernant le taux d'apprentissage par défaut d'Adam. Le premier est
qu'il est bien trop élevé pour nos modèles - par défaut Adam utilise un taux d'apprentissage de 10^-3 (1 e moins 3),
ce qui est très élevé pour l'entraînement des transformers. Nous allons commencer à 5 par 10^-5 (5 e moins 5),
ce qui est 20 fois inférieur à la valeur par défaut. Et deuxièmement, nous ne voulons pas seulement un taux d'apprentissage
constant : nous pouvons obtenir des performances encore meilleures si nous réduisons le taux d'apprentissage jusqu'à une valeur infime,
ou même 0, au cours de l'entraînement. C'est ce que fait ce planificateur `PolynomialDecay`.
Nous verrons à quoi cela ressemble dans une seconde. Mais d'abord nous devons spécifier au planificateur combien de
temps l'entraînement va durer,
pour qu'il décroisse à la bonne vitesse. C'est ce que fait ce code ici.
Nous calculons le nombre de mini-batchs que le modèle va voir sur l'ensemble de son parcours d'entraînement,
qui correspond à la taille de l'ensemble d'entraînement, divisé par batch_size pour obtenir le nombre debatchs
par époque, puis multiplié par le nombre d'époques pour obtenir le nombre total
debatchs sur l'ensemble de l'exécution de l'entraînement. Une fois que nous savons combien d'étapes de entraînement nous suivons,
nous transmettons simplement toutes ces informations au planificateur et nous sommes prêts à commencer.
À quoi ressemble le planificateur de décroissance polynomiale ?
Bien, il ressemble à ceci : il commence à 5e-5, ce qui signifie 5 fois dix jusqu'au moins 5,
puis diminue à un rythme constant jusqu'à qu'il atteigne 0 juste au moment même fin de entraînement.
Je peux déjà vous entendre réagir. Oui, je sais, c'est en fait une décroissance constante ou linéaire.
Je sais que le nom est « polynomial » et vous vous sentez trompés, on vous avez promis un polynôme et vous ne l'avez pas eu.
Calmez-vous, c'est ok. Car bien sûr, les fonctions linéaires sont justes des cas particuliers avec un polynôme de premier ordre.
Si vous modifier les options de cette classe, vous pouvez vraiment avoir un polynôme d'ordre supérieur pour votre décroissance.
Mais ce planificateur linéaire va bien fonctionner pour nous pour le moment.
Nous n'avons pas besoin de toutes ces astuces et gadgets.
Revenons à comment utilisons-nous notre barème de taux d'apprentissage ? Facile, nous le passons simplement à Adam ! Vous remarquerez que la
première fois que nous avons compilé le modèle, nous lui avons juste passé la chaîne « Adam » pour avoir notre optimiseur.
Donc Keras reconnaît les noms des optimiseurs courants et des fonctions de perte si vous les transmettez sous forme de chaînes,
ce qui vous fait gagner du temps si vous ne souhaitez que les paramètres par défaut. Mais nous sommes
maintenant des apprenants en ML professionnels, avec notre propre planificateur de taux d'apprentissage, nous devons donc faire les choses correctement.
Donc, d'abord, nous importons l'optimiseur, puis nous l'initialisons avec notre planificateur qui est passé comme argument `learning_rate` de cet optimiseur.
Maintenant nous compilons le modèle à l'aide du nouvel optimiseur, et quelle que soit la fonction de perte que vous voulez - ce
sera une `SparseCategoricalCrossentropy` si vous avez suivi la vidéo sur le finetuning.
Et on est prêt à y aller. Maintenant, nous avons un modèle à hautes performances, prêt à l'emploi. Il ne reste plus qu'à adapter le modèle comme
nous l'avons fait auparavant. N'oubliez pas que, comme nous avons compilé le modèle avec le nouvel optimiseur avec le nouveau
planificateur de taux d'apprentissage, nous n'avons rien à changer ici. Nous appelons à nouveau `.fit`, avec exactement la
même commande qu'auparavant, mais nous obtenons maintenant un bel entraînement avec une belle décroissance du taux d'apprentissage, partant de la bonne valeur et décroissant jusqu'à 0.