subtitles/fr/26_fine-tuning-with-tensorflow.srt (186 lines of code) (raw):
1
00:00:06,069 --> 00:00:11,580
Dans cette vidéo, nous allons voir comment charger et finetuner un modèle pré-entraîné.
2
00:00:11,580 --> 00:00:16,010
C'est très rapide, et si vous avez regardé nos vidéos sur le pipeline, que je mettrai en lien ci-dessous, le
3
00:00:16,010 --> 00:00:18,330
processus est très similaire.
4
00:00:18,330 --> 00:00:21,990
Cette fois, cependant, nous allons utiliser l'apprentissage par transfert et faire l'entraînement
5
00:00:21,990 --> 00:00:26,660
nous-mêmes, plutôt que de simplement charger un modèle et de l'utiliser tel quel.
6
00:00:26,660 --> 00:00:30,610
Pour en savoir plus sur l'apprentissage par transfert, rendez-vous sur la vidéo « Qu'est-ce que l'apprentissage par transfert ? »
7
00:00:30,610 --> 00:00:33,000
que nous mettrons également en lien ci-dessous !
8
00:00:33,000 --> 00:00:35,660
Mais maintenant regardons ce code.
9
00:00:35,660 --> 00:00:40,340
Pour commencer, nous choisissons le modèle avec lequel nous voulons commencer. Dans ce cas, nous allons utiliser le
10
00:00:40,340 --> 00:00:42,540
célèbre BERT original.
11
00:00:42,540 --> 00:00:50,500
Mais que signifie cette monstruosité, `TFAutoModelForSequenceClassification` ?
12
00:00:50,500 --> 00:00:56,460
Eh bien, le TF signifie TensorFlow, et le reste signifie « prenez un modèle de langue et collez-y
13
00:00:56,460 --> 00:01:00,879
une tête de classification de séquence s'il n'en a pas déjà une ».
14
00:01:00,879 --> 00:01:05,420
Donc, ce que nous allons faire ici, c'est charger BERT, un modèle de langue général, puis faire un
15
00:01:05,420 --> 00:01:09,490
apprentissage par transfert pour l'utiliser sur notre tâche d'intérêt.
16
00:01:09,490 --> 00:01:13,530
Nous chargeons ici le modèle de langue avec cette seule ligne de code, en utilisant la méthode `from_pretrained`
17
00:01:13,530 --> 00:01:14,530
.
18
00:01:14,530 --> 00:01:21,230
Cette méthode doit connaître deux choses : premièrement, le nom du modèle que vous souhaitez charger,
19
00:01:21,230 --> 00:01:29,840
et deuxièmement, le nombre de classes de votre problème.
20
00:01:29,840 --> 00:01:33,500
Si vous souhaitez suivre avec vidéos sur Datasets, que je vais lier
21
00:01:33,500 --> 00:01:41,200
ci-dessous, vous aurez alors deux classes, positive et négative, et donc `num_labels` est égal à deux.
22
00:01:41,200 --> 00:01:43,590
Qu'en est-il de cette chose `.compile` ?
23
00:01:43,590 --> 00:01:47,909
Si vous connaissez Keras, vous l'avez probablement déjà vu, mais si ce n'est pas le cas, c'est l'une
24
00:01:47,909 --> 00:01:55,520
de ses méthodes de base que vous allez voir encore et encore. Vous devez toujours compiler votre modèle avant de l'entraîner.
25
00:01:55,520 --> 00:02:01,240
La compilation doit connaître deux choses. Premièrement la fonction de perte : qu'essayons-nous d'
26
00:02:01,240 --> 00:02:02,240
optimiser ?
27
00:02:02,240 --> 00:02:08,509
Ici, nous importons la fonction de perte `SparseCategoricalCrossentropy` c'est une bouchée, mais c'est
28
00:02:08,509 --> 00:02:13,390
la fonction de perte standard pour tout réseau de neurones qui effectue une tâche de classification.
29
00:02:13,390 --> 00:02:18,170
Cela encourage essentiellement le réseau à produire des valeurs élevées pour la bonne classe et des
30
00:02:18,170 --> 00:02:21,080
valeurs faibles pour les mauvaises classes.
31
00:02:21,080 --> 00:02:26,140
Notez que vous pouvez spécifier la fonction de perte sous forme de chaîne, comme nous l'avons fait avec l'optimiseur,
32
00:02:26,140 --> 00:02:34,319
mais il y a un risque ici, il y a un piège dans lequel les gens tombent très courant comme quoi par défaut, cette perte suppose que la sortie est des probabilités
33
00:02:34,319 --> 00:02:39,650
après une couche softmax, mais ce que notre modèle a réellement produit est les valeurs avant le
34
00:02:39,650 --> 00:02:50,140
softmax, souvent appelées logits. Vous les avez déjà vues dans les vidéos sur le pipeline.
35
00:02:50,140 --> 00:02:54,580
Si vous vous trompez, votre modèle ne s'entraînera pas et il sera très ennuyeux de comprendre pourquoi.
36
00:02:54,580 --> 00:03:09,460
Dans de prochaies vidéos, nous verrons comment utiliser les pertes internes au modèle, de sorte que vous n'aurez pas à spécifier de perte vous-même, vous n'aurez pas à vous soucier de ce détail. Mais pour maintenant n'oubliez pas de mettre `from_logits=True`
40
00:03:09,460 --> 00:03:13,340
La deuxième chose que `.compile` doit savoir est l'optimiseur que vous voulez.
41
00:03:13,340 --> 00:03:17,570
Dans notre cas, nous utilisons Adam, qui est en quelque sorte l'optimiseur standard en apprentissage profond de nos
42
00:03:17,570 --> 00:03:18,730
jours.
43
00:03:18,730 --> 00:03:22,770
La seule chose que vous voudrez peut-être changer est le taux d'apprentissage, et pour ce faire, nous
44
00:03:22,770 --> 00:03:27,330
devrons importer l'optimiseur réel plutôt que de simplement l'appeler par chaîne, mais nous en
45
00:03:27,330 --> 00:03:30,050
parlerons dans une autre vidéo, que j'indiquerais en dessous.
46
00:03:30,050 --> 00:03:33,610
Pour l'instant, essayons simplement d'entraîner le modèle !
47
00:03:33,610 --> 00:03:35,830
Alors, comment entraîner un modèle ?
48
00:03:35,830 --> 00:03:40,670
Eh bien, si vous avez déjà utilisé Keras, tout cela vous sera très familier - mais
49
00:03:40,670 --> 00:03:43,370
sinon, regardons ce que nous faisons ici.
50
00:03:43,370 --> 00:03:50,371
`.fit()` est à peu près la méthode centrale pour les modèles Keras : elle indique au modèle de s'entraîner sur les modèles qu'on lui passe.
51
00:03:50,371 --> 00:03:57,000
Donc ici nous passons le jeu de données que nous avons crée dans la section précédente. Il contient les entrées et les étiquettes.
52
00:03:57,000 --> 00:04:01,000
Donc nous n'avons pas besoin de spécifier les étiquettes séparemment quand on appelle `.fit()`.
53
00:04:01,000 --> 00:04:13,000
Puis nous faisons la même chose avec les données de validation et nous pouvons spécifier des détails comme le nombre d'epochs ou autre argument que l'on peut passer à `.fit()`.
54
00:04:01,000 --> 00:04:16,540
A la fin, on passe le tout et on exécute.
55
00:04:16,540 --> 00:04:20,449
Si tout fonctionne, vous devriez voir une petite barre de progression de l'entraînement au fur et à mesure que votre perte
56
00:04:20,449 --> 00:04:21,670
diminue.
57
00:04:21,670 --> 00:04:26,870
Et c'est tout. Pendant que cela tourne, vous pouvez appelez votre supérieur et lui dire que vous êtes maintenant un ingénieur en ML/NLP senior maintenant
58
00:04:26,870 --> 00:04:30,509
et que vous allez vouloir une révision de salaire le trimestre prochain.
59
00:04:30,509 --> 00:04:38,470
C'est vraiment tout ce qu'il faut pour appliquer la puissance d'un énorme modèle de langage pré-entraîné à
60
00:04:38,470 --> 00:04:40,770
votre problème de NLP.
61
00:04:40,770 --> 00:04:42,440
Pouvons-nous faire mieux que ça ?
62
00:04:42,440 --> 00:04:47,180
Nous pourrions certainement, avec quelques fonctionnalités Keras plus avancées comme un taux d'apprentissage réglé et programmé,
63
00:04:47,180 --> 00:04:50,889
nous pouvons obtenir une perte encore plus faible et un modèle encore plus précis.
64
00:04:50,889 --> 00:04:54,039
Et qu'est-ce qu'on fait de notre modèle une fois qu'il est entraîné ?
65
00:04:54,039 --> 00:05:02,919
Je couvrirai cela et plus encore dans les vidéos liées qui suivent donc restez connectés !