Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Rétropropagation du réseau de neurones (DL 08)
Rétropropagation du réseau de neurones (DL 08)
Dans cette vidéo, nous allons dériver l'algorithme de rétropropagation, qui est utilisé pour former un réseau de neurones à travers une étape de descente de gradient stochastique. L'algorithme se compose de trois étapes principales.
Tout d'abord, nous effectuons une passe en aval pour faire des prédictions sur un point de données. Ces prédictions déterminent la perte, qui représente l'erreur entre les sorties prédites et les sorties réelles. Ensuite, nous effectuons une passe arrière pour calculer les dérivées partielles de la perte. Nous calculons une quantité appelée "delta" pour chaque neurone dans les couches de sortie et cachée. Delta représente la dérivée partielle de la perte par rapport à la somme pondérée des entrées au niveau de ce neurone. En appliquant la règle de la chaîne, nous pouvons calculer delta pour chaque neurone en considérant son impact sur la perte.
Pour calculer delta pour les neurones de la couche de sortie, nous utilisons la dérivée de la fonction d'activation et la différence entre la cible et l'activation. Ce calcul tient compte de la relation entre la perte et la somme pondérée des intrants. Pour les neurones de la couche cachée, nous considérons leur impact sur les neurones de la couche suivante et calculons récursivement delta en additionnant les contributions des nœuds de la couche suivante, multipliées par les poids et la dérivée d'activation. Une fois que nous avons calculé les deltas pour tous les neurones, nous pouvons les utiliser pour calculer les dérivées partielles des poids et des biais.
La dérivée partielle pour chaque poids est le produit du delta correspondant et de l'activation du neurone de la couche précédente. De même, la dérivée partielle de chaque biais est égale à son delta correspondant.
Pour effectuer une descente de gradient, nous calculons la moyenne des dérivées partielles sur un sous-ensemble de points de données, appelé un lot. Cette approche est connue sous le nom de descente de gradient stochastique. En mettant à jour les poids et les biais avec les dérivées partielles moyennes multipliées par un taux d'apprentissage, nous déplaçons les paramètres dans la direction qui minimise la perte.
En pratique, au lieu de calculer les deltas et les dérivées partielles pour chaque point de données, nous utilisons souvent une descente de gradient stochastique avec des lots aléatoires. Nous échantillonnons au hasard un sous-ensemble de données, calculons la perte moyenne et son gradient sur ce sous-ensemble, et effectuons les mises à jour des paramètres en conséquence. Cela accélère le processus de formation, en particulier pour les grands ensembles de données.
L'algorithme de rétropropagation combine des passages avant et arrière pour calculer les deltas et les dérivées partielles, qui sont ensuite utilisés pour les mises à jour de descente de gradient stochastique. En mettant à jour itérativement les paramètres, le réseau de neurones apprend à minimiser la perte et à améliorer ses prédictions.
Meilleure activation et perte pour la classification : Softmax et crossentropie catégorielle (DL 09)
Meilleure activation et perte pour la classification : Softmax et crossentropie catégorielle (DL 09)
Lors de l'exécution d'une classification multi-classes à l'aide d'un réseau de neurones avec des neurones sigmoïdes, certaines limitations surviennent. Auparavant, lorsqu'il ne s'agissait que de deux classes, un seul neurone pouvait produire 0 ou 1. Cependant, lorsque plusieurs étiquettes sont impliquées, telles que la classification des chiffres manuscrits de 0 à 9, une représentation différente est nécessaire.
Une approche courante consiste à encoder les étiquettes sous la forme d'un vecteur unique, où chaque étiquette a sa propre dimension et une seule dimension est activée à la fois. Par exemple, un vecteur à cinq dimensions peut indiquer cinq étiquettes possibles, la dimension quatre étant activée pour représenter la quatrième étiquette. Bien qu'une couche de sortie à base de neurones sigmoïdes puisse potentiellement produire ce type de sortie, il existe des problèmes pratiques.
Le premier problème est que la couche sigmoïde peut générer des valeurs relativement élevées pour plusieurs étiquettes, ce qui rend difficile l'interprétation de la prédiction. Idéalement, nous voudrions que la couche de sortie produise des zéros et des uns ou quelque chose qui reflète la confiance dans différentes étiquettes possibles. Le deuxième problème se pose lors de l'apprentissage de la couche de sortie sigmoïde. Lorsque la cible est un vecteur chaud, la descente de gradient est utilisée pour pousser l'activation vers un pour l'étiquette correcte et vers zéro pour les autres étiquettes. Cependant, en raison de la nature de la fonction sigmoïde, les neurones avec des erreurs plus importantes peuvent avoir des deltas plus petits, ce qui rend difficile la correction de prédictions erronées en toute confiance.
Un problème similaire, connu sous le nom de problème de gradient de fuite, se produit également lors de l'utilisation d'activations sigmoïdes pour les neurones cachés. Cependant, dans cette vidéo, nous nous concentrons sur une combinaison alternative d'activations de sortie et de fonction de perte pour résoudre ces problèmes. Au lieu d'activations sigmoïdes, nous introduisons des activations softmax pour la couche de sortie. Les activations Softmax sont calculées sur l'ensemble de la couche, grossissant les différences entre les entrées et normalisant les activations pour en ajouter une. Cela se traduit par des sorties qui sont plus interprétables comme des prédictions et peuvent être considérées comme la confiance du réseau dans chaque étiquette possible.
Pour utiliser efficacement les activations softmax, nous les associons à la fonction de perte d'entropie croisée catégorique. La perte d'entropie croisée calcule le logarithme négatif de l'activation pour le neurone cible, ce qui se simplifie au logarithme de l'activation lors de l'utilisation de vecteurs à chaud. Cette combinaison permet des mises à jour efficaces de descente de gradient. Pour calculer les deltas pour la couche de sortie, nous dérivons les dérivées partielles de la perte par rapport aux activations. Pour le neurone cible, la dérivée est -1 divisé par l'activation. Pour les autres neurones, les dérivées sont nulles. En raison de l'interdépendance des activations softmax, même si seul le neurone cible a une dérivée non nulle, des deltas non nuls sont obtenus pour toutes les entrées.
En utilisant ces formules, nous pouvons calculer les deltas pour le neurone cible et les autres neurones de la couche de sortie. Le delta pour le neurone cible est simple à calculer, car il s'agit de l'activation moins un. Les deltas pour les autres neurones se simplifient à l'activation négative elle-même.
Avec cette combinaison d'activations softmax et de perte d'entropie croisée catégorielle, nous obtenons des sorties significatives pour les problèmes de classification et obtenons des gradients qui poussent efficacement les sorties vers des prédictions correctes. L'utilisation des activations softmax et de la perte d'entropie croisée catégorique nous fournit un cadre puissant pour la classification multi-classes. Approfondissons la manière dont ces composants fonctionnent ensemble pour permettre une formation efficace des réseaux de neurones.
Une fois que nous avons calculé les deltas pour la couche de sortie, ces deltas servent de point de départ pour la rétropropagation, où nous propageons les gradients d'erreur vers l'arrière à travers le réseau pour mettre à jour les poids. Pour mettre à jour les poids reliant la couche de sortie à la couche précédente, nous pouvons utiliser les valeurs delta et appliquer l'algorithme de descente de gradient. La mise à jour du poids est déterminée en multipliant le delta de chaque neurone de sortie par l'activation d'entrée du poids correspondant et en ajustant le poids par un taux d'apprentissage.
En rétropropageant les deltas à travers le réseau, les gradients des poids dans les couches cachées peuvent également être calculés. Cela nous permet de mettre à jour les pondérations dans les couches cachées en conséquence, affinant davantage les performances du réseau. Il est important de noter que lors de l'utilisation des activations softmax et de la perte d'entropie croisée catégorique, nous devons nous assurer que softmax n'est appliqué qu'à la couche de sortie. Pour les couches cachées, il est conseillé d'utiliser des fonctions d'activation comme ReLU (Rectified Linear Unit) ou tanh. Les activations Softmax nous permettent d'obtenir des sorties interprétables comme des probabilités ou des scores de confiance pour chaque classe. Les valeurs du vecteur de sortie totalisent 1, ce qui nous permet d'évaluer la confiance du réseau dans ses prédictions. Une valeur plus élevée indique une confiance plus élevée pour une classe particulière.
La perte d'entropie croisée catégorielle complète les activations softmax en mesurant efficacement l'écart entre les probabilités prédites et les véritables étiquettes. Il encourage le réseau à minimiser la différence entre les probabilités prédites et le vecteur cible codé one-hot, poussant ainsi le réseau vers des prédictions plus précises.
En combinant les activations softmax et la perte d'entropie croisée catégorique, nous obtenons plusieurs avantages. Nous obtenons des résultats significatifs et interprétables, nous permettant de comprendre les prédictions du réseau et les niveaux de confiance pour différentes classes. Les gradients dérivés de la perte d'entropie croisée catégorielle guident les mises à jour de poids d'une manière qui conduit à un apprentissage plus efficace et à une précision améliorée. Il convient de mentionner qu'il existe d'autres fonctions d'activation et de perte disponibles, chacune adaptée à différents types de problèmes. Cependant, les activations softmax avec perte d'entropie croisée catégorique se sont avérées être une combinaison réussie pour les tâches de classification multi-classes, offrant à la fois une interprétabilité et une dynamique de formation efficace.
En résumé, l'utilisation des activations softmax et de la perte d'entropie croisée catégorielle dans les réseaux de neurones de classification multi-classes nous permet d'obtenir des prédictions significatives, d'interpréter les niveaux de confiance et d'effectuer des mises à jour efficaces de descente de gradient. Cette combinaison joue un rôle crucial dans l'obtention de résultats précis et fiables dans diverses tâches de classification.
Rendre les réseaux de neurones rapides avec la vectorisation (DL 10)
Rendre les réseaux de neurones rapides avec la vectorisation (DL 10)
Pour comprendre le fonctionnement interne d'un réseau de neurones, il est avantageux de se plonger au niveau d'un neurone individuel et de considérer les connexions entre les neurones. Pendant la passe avant, qui calcule les activations, et la passe arrière, qui calcule les deltas, penser en termes de nœuds et d'arêtes peut aider à développer l'intuition. Cependant, l'apprentissage en profondeur ne fonctionne pas réellement de cette manière. Pour construire des réseaux de neurones à grande échelle pouvant être entraînés efficacement, nous devons passer à un niveau d'abstraction plus élevé et penser en termes de vecteurs, de matrices et de tenseurs.
La première étape vers ce niveau d'abstraction supérieur consiste à représenter les activations d'une couche sous forme de vecteur. Si notre réseau de neurones est organisé en couches, nous pouvons collecter les activations d'une couche dans un vecteur. Par exemple, le vecteur A^l stocke toutes les activations pour la couche l, avec autant d'entrées qu'il y a de nœuds dans cette couche. De même, nous pouvons collecter les deltas d'une couche dans un vecteur lors de la rétropropagation. Nous pouvons également utiliser des vecteurs pour représenter les biais ou les entrées d'une couche.
Pour exprimer les calculs dans cette notation vectorisée, considérons d'abord comment un nœud calcule sa somme pondérée d'entrées. L'entrée X^5 qui entre dans la fonction d'activation du nœud 5 est calculée comme une somme pondérée des activations de la couche précédente plus un biais. En collectant les activations de la couche précédente dans le vecteur A ^ K et en ayant un vecteur de poids entrant dans le nœud 5, la somme pondérée des entrées peut être représentée sous la forme d'un produit scalaire entre ces deux vecteurs. Une autre façon d'écrire le produit scalaire consiste à transposer le premier vecteur et à effectuer une multiplication matricielle entre le vecteur ligne et le vecteur colonne. Par conséquent, nous pouvons exprimer l'entrée du nœud 5 comme le vecteur de poids entrant dans le nœud 5 (transposé) multiplié par le vecteur d'activation de la couche précédente, plus le biais du nœud 5.
Cette notation vectorisée peut aller plus loin et nous permettre de calculer le vecteur entier des entrées de la couche l en une seule fois. En combinant le vecteur ligne des poids du nœud 5 avec les vecteurs ligne des poids des autres neurones de cette couche, nous obtenons une matrice qui contient tous les poids de la couche K à la couche l. Cette matrice de poids comporte autant de lignes qu'il y a de nœuds dans la couche l (chaque ligne représentant un vecteur de poids dans un des neurones de la couche l) et autant de colonnes qu'il y a de nœuds dans la couche précédente K (chaque colonne représentant un vecteur de poids sortant d'un des nœuds de la couche K). La multiplication de cette matrice de poids par le vecteur d'activation pour la couche K donne un vecteur où chaque élément représente la somme pondérée des entrées pour l'un des nœuds de la couche l. Pour obtenir les entrées de la fonction d'activation, nous ajoutons les biais à ce vecteur, qui ont été collectés dans un vecteur.
Maintenant, en utilisant la multiplication matrice-vecteur, l'addition vectorielle et les fonctions élément par élément, nous pouvons exprimer les opérations de calcul de toutes les entrées d'une couche. Auparavant, ces calculs auraient nécessité des boucles imbriquées, mais maintenant nous pouvons les effectuer efficacement de manière vectorisée.
En avançant, nous pouvons également étendre cette approche vectorisée à la passe arrière. Au lieu de considérer un neurone à la fois, nous pouvons calculer le delta d'un nœud de la couche K comme une somme pondérée de tous les deltas de la couche suivante, multipliée par la dérivée de la fonction d'activation de ce nœud. Encore une fois, nous pouvons exprimer cette somme pondérée sous la forme d'un produit scalaire. En multipliant un vecteur ligne de poids sortant du nœud 3 par le vecteur de deltas pour la couche l puis en multipliant par la dérivée d'activation, nous pouvons calculer le vecteur delta pour la couche K. En utilisant une matrice de poids qui collecte tous les poids pour la couche l neurones et en le multipliant par le vecteur des deltas pour la couche l, on peut obtenir une matrice dont les dimensions correspondent à la matrice de poids.
En tirant parti des opérations matricielles, nous pouvons réaliser des gains de performances significatifs dans le calcul des réseaux de neurones densément connectés. Ceci est particulièrement avantageux car les opérations matricielles peuvent être exécutées efficacement sur du matériel spécialisé tel que des processeurs graphiques (GPU), ce qui peut considérablement accélérer ces calculs.
Lorsque nous représentons nos calculs de réseau neuronal à l'aide de matrices, nous pouvons effectuer les mises à jour de passage en avant, de passage en arrière et de poids de manière très efficace et parallélisée. Récapitulons les étapes clés :
Forward Pass : Nous pouvons calculer les activations de chaque couche pour un lot entier de données en effectuant une multiplication matrice-vecteur et une application de fonction d'activation élément par élément. En organisant les activations dans une matrice, où chaque colonne représente les activations pour un point de données différent, nous pouvons calculer efficacement les activations pour l'ensemble du lot.
Passe arrière : De même, nous pouvons calculer les deltas (gradients d'erreur) pour chaque couche de manière vectorisée. En représentant les deltas sous forme de matrice, où chaque colonne correspond aux deltas pour un point de données spécifique, nous pouvons effectuer une multiplication matrice-vecteur et une multiplication élément par élément avec des dérivés d'activation pour calculer efficacement les deltas pour l'ensemble du lot.
Mises à jour des poids : pour mettre à jour les poids et les biais, nous pouvons utiliser des opérations matricielles pour calculer le produit scalaire entre la matrice des deltas et la transposée de la matrice des poids. Cette opération produit une matrice de mises à jour de poids, où chaque entrée représente la mise à jour pour un poids spécifique. En divisant les produits scalaires par la taille du lot, nous obtenons la mise à jour moyenne, puis nous pouvons mettre à jour les poids en soustrayant le taux d'apprentissage multiplié par la mise à jour moyenne. Les mises à jour de biais sont calculées en prenant la moyenne des vecteurs delta dans les colonnes et en soustrayant le taux d'apprentissage multiplié par la moyenne des biais.
En vectorisant ces calculs et en tirant parti des opérations matricielles, nous pouvons atteindre une efficacité de calcul significative et tirer parti de l'accélération matérielle pour le traitement parallèle. Cette approche nous permet de former efficacement des réseaux de neurones à grande échelle, rendant l'apprentissage en profondeur possible sur un large éventail de tâches et d'ensembles de données.
Il convient de noter que bien que le texte fournisse un aperçu de haut niveau des opérations de vectorisation et d'exploitation de la matrice, les détails de mise en œuvre réels peuvent varier en fonction du langage de programmation ou du cadre utilisé. Différents langages et frameworks peuvent avoir leurs propres fonctions et bibliothèques optimisées pour les opérations matricielles, améliorant encore les performances.
Outre les avantages en termes de performances, l'exploitation des opérations matricielles dans le deep learning présente d'autres avantages :
Simplicité et lisibilité du code : en utilisant des opérations matricielles, le code pour les calculs de réseau de neurones devient plus concis et plus facile à comprendre. Au lieu d'écrire des boucles explicites pour des points de données individuels, nous pouvons exprimer les calculs sous une forme plus compacte et intuitive à l'aide d'opérations matricielles.
Compatibilité logicielle : de nombreux frameworks et bibliothèques d'apprentissage en profondeur populaires, tels que TensorFlow et PyTorch, fournissent des implémentations efficaces d'opérations matricielles. Ces frameworks utilisent souvent des bibliothèques d'algèbre linéaire optimisées, telles que BLAS (Basic Linear Algebra Subprograms) ou cuBLAS (CUDA Basic Linear Algebra Subprograms), pour accélérer les calculs matriciels sur les CPU ou les GPU. En tirant parti de ces frameworks, nous pouvons bénéficier de leurs implémentations optimisées et assurer la compatibilité avec d'autres composants du pipeline d'apprentissage en profondeur.
Généralisation à d'autres types de couches : les opérations matricielles peuvent être appliquées non seulement aux couches densément connectées, mais également à d'autres types de couches, telles que les couches convolutives et les couches récurrentes. En exprimant les calculs sous forme de matrice, nous pouvons tirer parti des mêmes opérations et optimisations matricielles efficaces sur différents types de couches, simplifiant la mise en œuvre et améliorant les performances globales.
Intégration avec l'accélération matérielle : le matériel spécialisé, tel que les GPU ou les unités de traitement tensorielles (TPU), est conçu pour accélérer les calculs matriciels. Ces accélérateurs matériels excellent dans l'exécution d'opérations matricielles parallèles à grande échelle, ce qui les rend idéaux pour les charges de travail d'apprentissage en profondeur. En utilisant des opérations matricielles, nous pouvons nous intégrer de manière transparente à ces accélérateurs matériels et tirer pleinement parti de leurs capacités, ce qui entraîne des accélérations significatives des temps de formation et d'inférence.
En résumé, l'exploitation des opérations matricielles dans l'apprentissage en profondeur offre des avantages en termes de performances, de simplicité de code, de compatibilité logicielle et d'intégration avec des accélérateurs matériels. En exprimant les calculs de réseaux neuronaux sous forme matricielle et en utilisant des opérations matricielles optimisées, nous pouvons former et déployer efficacement des modèles d'apprentissage en profondeur sur une variété de tâches et de plates-formes.
Gradients qui disparaissent (ou explosent) (DL 11)
Gradients qui disparaissent (ou explosent) (DL 11)
Au fur et à mesure que nous approfondissons la mise à l'échelle des réseaux de neurones pour résoudre des problèmes plus importants, l'ajout de couches supplémentaires devient nécessaire. Cependant, les réseaux plus profonds peuvent rencontrer des problèmes lors de la formation causés par la disparition ou l'explosion des gradients. Considérons un réseau neuronal profond avec des activations sigmoïdes pour les couches cachées. Visualiser un tel réseau avec de nombreux nœuds et couches devient peu pratique. Au lieu de cela, nous pouvons le représenter avec un schéma fonctionnel, où chaque colonne représente une couche, et les fonctions d'activation sont indiquées dans chaque bloc.
Une autre façon de visualiser le réseau consiste à utiliser un graphique de calcul, montrant la séquence d'opérations appliquées à chaque lot de données. En partant des matrices d'entrée, nous effectuons des multiplications matricielles, l'ajout de biais et appliquons des fonctions d'activation à chaque couche. Ce processus se poursuit à travers les couches cachées jusqu'à ce que nous atteignions la couche de sortie, où la fonction d'activation passe à softmax. La perte est calculée à partir des activations et des cibles.
En exprimant mathématiquement les calculs, nous multiplions les matrices de pondération par les matrices d'entrée, ajoutons des biais et appliquons des fonctions d'activation. Les expressions continuent à travers les couches cachées, atteignant finalement la couche de sortie où l'activation softmax est appliquée. Les activations de sortie et les cibles sont utilisées pour calculer la perte.
Lors du calcul des dérivées pour les mises à jour de descente de gradient, la règle de chaîne est appliquée à plusieurs reprises. À partir de la couche de sortie, nous calculons les deltas en multipliant avec la transposée des matrices de poids et en multipliant élément par élément avec la dérivée de la fonction d'activation. Ce processus propage les deltas vers l'arrière à travers les couches cachées.
Le problème du gradient de fuite se pose lors de l'utilisation des fonctions d'activation sigmoïde pour les couches cachées. La dérivée d'un sigmoïde a tendance à avoir de petites valeurs, ce qui fait diminuer les deltas à chaque propagation vers l'arrière. En conséquence, les gradients deviennent de plus en plus petits, ce qui rend difficile la mise à jour efficace des poids, en particulier dans les premières couches.
L'apprentissage en profondeur a rencontré des difficultés dans la formation de réseaux de neurones profonds en raison du problème du gradient de fuite. Cependant, il y a une dizaine d'années, des approches ont été conçues pour surmonter ce défi. Une méthode consiste à modifier l'initialisation de la matrice de poids, en générant des poids aléatoires initiaux plus grands pour contrer les deltas décroissants causés par les dérivés sigmoïdes.
La percée la plus importante est venue avec l'adoption d'unités linéaires redresseuses (ReLU) comme fonctions d'activation. Contrairement aux dérivés sigmoïdes, les dérivés ReLU ont tendance à ne pas réduire les deltas de manière significative. Cette propriété a rendu les activations ReLU plus populaires car elles facilitaient la formation de réseaux de neurones profonds.
Cependant, l'utilisation d'activations ReLU introduit le risque d'explosion des gradients, où les deltas peuvent devenir plus grands à mesure que nous nous propageons vers l'arrière. Pour atténuer cela, il est conseillé de choisir des poids initiaux plus petits par rapport aux activations sigmoïdes.
Les neurones ReLU sont préférés pour les couches cachées en raison de leur facilité de formation et de leur efficacité de calcul. L'initialisation des poids dépend de la fonction d'activation utilisée, et la communauté de l'apprentissage en profondeur a fait des progrès substantiels dans la détermination des méthodes d'initialisation de poids appropriées pour différents types d'activation. Les bibliothèques d'apprentissage en profondeur modernes gèrent souvent l'initialisation du poids automatiquement en fonction des activations spécifiées.
Éviter le surajustement du réseau de neurones (DL 12)
Éviter le surajustement du réseau de neurones (DL 12)
Comme nous travaillons avec de plus grands réseaux de neurones pour l'apprentissage en profondeur, le risque de surajustement augmente considérablement. Il est crucial de comprendre les causes du surajustement et comment le détecter et le prévenir. Le surajustement se produit lorsqu'un modèle d'apprentissage automatique devient trop spécifique à l'ensemble d'apprentissage et ne parvient pas à se généraliser à de nouvelles données. La cause principale est lorsqu'un modèle a une liberté de paramètre excessive par rapport à la quantité de données d'apprentissage, ce qui rend les modèles avec des degrés de liberté élevés ou de petits ensembles d'apprentissage plus sensibles.
Dans la régression polynomiale, par exemple, l'augmentation du degré du polynôme fournit plus de paramètres à affiner, permettant au modèle de s'adapter plus précisément aux données d'apprentissage. Cependant, cela peut entraver sa capacité à généraliser à des exemples au-delà de l'ensemble de formation.
Dans le cadre des réseaux de neurones, les poids et les biais servent de paramètres. À mesure que les réseaux de neurones deviennent plus grands avec plus de poids, ils ont une plus grande liberté dans le choix de leurs paramètres. Par conséquent, lors de la formation d'un grand réseau de neurones, il est important d'être vigilant quant au surajustement potentiel, la principale méthode d'identification étant la surveillance de l'ensemble de validation.
La division de l'ensemble de données en ensembles de formation, de validation et de test permet d'évaluer la généralisation du réseau. Lorsqu'un surajustement se produit, il existe une différence notable de perte ou de précision entre l'ensemble d'apprentissage et l'ensemble de validation. Idéalement, la perte d'ensemble d'entraînement devrait diminuer au fil des époques, mais si elle commence à augmenter, cela indique un problème. De même, la perte d'ensemble de validation devrait diminuer en fonction de la perte d'ensemble d'apprentissage, et si elle commence à augmenter alors que la perte d'ensemble d'apprentissage continue de diminuer, cela signifie un fort surajustement. La précision du modèle sur les deux ensembles peut également révéler un surajustement dans les problèmes de classification.
Pour lutter contre le surapprentissage, une approche consiste à s'attaquer directement à ses causes. Des données insuffisantes peuvent être atténuées en acquérant plus de données, comme on le voit dans les succès d'apprentissage en profondeur à grande échelle utilisant de vastes ensembles de données. Cependant, s'il n'est pas possible d'obtenir plus de données, la réduction du modèle peut aider à lutter contre le surajustement et à améliorer l'efficacité. La ligne directrice générale est de choisir une architecture de réseau neuronal qui est correctement dimensionnée pour le problème spécifique à résoudre.
Si les problèmes de surajustement persistent, il existe des techniques avancées à considérer. L'une de ces techniques est l'arrêt précoce, où la formation est interrompue lorsqu'une séparation entre les ensembles d'apprentissage et de validation est observée, avant même d'atteindre le nombre maximal d'époques. De plus, des méthodes telles que l'abandon et la régularisation du poids peuvent être utilisées pour éviter le surajustement.
L'abandon implique la mise à zéro aléatoire de certaines activations dans le réseau pendant l'entraînement pour empêcher des neurones spécifiques d'avoir un impact excessif. En abandonnant des neurones, les couches suivantes du réseau sont obligées d'apprendre des fonctions qui ne dépendent pas trop de ces neurones, réduisant ainsi le surajustement. Des ajustements sont effectués lors des tests pour tenir compte de l'absence de décrochage.
La régularisation du poids combat le surajustement en décourageant les poids de devenir trop importants. Ceci est réalisé en incorporant un terme de pénalité dans la fonction de perte qui décourage les poids importants. Une forme courante de régularisation des poids est la régularisation L2, où la somme des carrés de tous les poids est ajoutée en tant que terme de pénalité quadratique. Ce terme de régularisation, contrôlé par un hyperparamètre, équilibre l'accent mis sur la régularisation par rapport à la fonction de perte d'origine.
Il est crucial de surveiller le surajustement lors de la formation des réseaux de neurones. Tenez compte de la taille du modèle et des données disponibles, et utilisez des techniques telles que l'arrêt précoce, l'abandon et la régularisation pour traiter le surajustement si nécessaire.
Couches convolutives (DL 13)
Couches convolutives (DL 13)
Les réseaux de neurones que nous avons considérés jusqu'à présent ont été densément connectés, où chaque couche est connectée à la couche suivante. Les réseaux denses sont un bon point de départ car ils sont généraux et polyvalents. Cependant, pour des applications spécifiques, on peut choisir des architectures alternatives plus efficaces. Dans cette vidéo, nous explorons la première architecture alternative appelée couches convolutives.
Les réseaux convolutifs sont bien adaptés aux tâches de traitement d'images. Au lieu de traiter l'image d'entrée comme un vecteur plat, les couches convolutionnelles préservent les informations spatiales de l'image. Chaque neurone d'une couche convolutive n'est connecté qu'à une petite région de l'image, capturant la proximité spatiale des pixels. En utilisant cette architecture, le réseau gagne un avantage dans l'apprentissage des tâches de traitement d'images.
Les couches convolutives ont deux idées clés : la connectivité locale et le poids lié. La connectivité locale signifie que les neurones sont connectés à une petite sous-région de l'image, ce qui leur permet d'apprendre des caractéristiques spécifiques. La pondération garantit que la même fonction est appliquée à différentes régions de l'image. En partageant les pondérations, le réseau peut apprendre à appliquer la même fonction dans plusieurs régions.
Les couches convolutives introduisent de nouveaux hyperparamètres à prendre en compte. Ceux-ci incluent la taille du noyau (déterminant la taille de la sous-région), la foulée (de combien la fenêtre glisse), le nombre de canaux de sortie (nombre de fonctions appliquées à chaque fenêtre), le remplissage (gestion des bords de l'image) et la mise en commun (agrégation des résultats des neurones pour réduire la dimensionnalité).
La mise en commun permet de réduire le nombre de paramètres dans le réseau en agrégeant les résultats des neurones d'une région. Cela peut être fait en faisant la moyenne ou en prenant la valeur maximale. La mise en commun est utile lorsque nous n'avons pas besoin d'une localisation précise des entités, mais plutôt de la présence globale d'entités dans une région.
Les réseaux convolutifs offrent un moyen plus efficace de traiter les images par rapport aux réseaux denses. Ils exploitent les informations spatiales et réduisent le nombre de paramètres, ce qui facilite leur apprentissage.
La mise en commun permet de réduire la dimensionnalité des cartes d'entités et le nombre de paramètres dans les couches suivantes. En agrégeant les résultats des neurones voisins, la mise en commun conserve les informations les plus importantes tout en supprimant certains détails spatiaux.
Il existe différents types d'opérations de mise en commun, telles que la mise en commun maximale et la mise en commun moyenne. Dans la mise en commun maximale, la valeur maximale dans chaque fenêtre de mise en commun est sélectionnée comme valeur représentative pour cette région. Cela permet de capturer les fonctionnalités les plus importantes présentes dans la fenêtre. D'autre part, la mise en commun moyenne prend la valeur moyenne de la fenêtre, offrant une représentation plus fluide des caractéristiques.
Après la mise en commun, nous pouvons encore empiler des couches convolutives supplémentaires pour apprendre des fonctionnalités plus complexes et abstraites à partir de la sortie de la couche précédente. Chaque couche suivante capture des caractéristiques de niveau supérieur en combinant les informations de plusieurs champs récepteurs plus petits.
Pour résumer, les réseaux de neurones convolutifs (CNN) avec des couches convolutives et de mise en commun sont bien adaptés aux tâches de traitement d'images. Les couches convolutionnelles capturent la proximité spatiale et exploitent le partage de poids, permettant au réseau d'apprendre efficacement les caractéristiques locales. La mise en commun réduit la dimensionnalité et extrait des informations importantes, permettant aux couches suivantes d'apprendre des représentations plus abstraites. Cet apprentissage hiérarchique des caractéristiques rend les CNN puissants pour diverses applications de vision par ordinateur, notamment la classification d'images, la détection d'objets et la segmentation d'images.
Formation de grands réseaux avec peu de données : apprentissage par transfert et augmentation des données (DL 14)
Formation de grands réseaux avec peu de données : apprentissage par transfert et augmentation des données (DL 14)
Dans l'apprentissage en profondeur, il est courant de rencontrer des problèmes où nous voulons tirer parti de la puissance de l'apprentissage en profondeur mais manquons de données suffisantes pour former efficacement un modèle en profondeur. Ce problème se pose dans divers domaines et architectures de réseaux neuronaux. Concentrons-nous sur le scénario d'une tâche de traitement d'image utilisant un réseau convolutif avec un petit jeu de données d'image. Cependant, les concepts abordés ici peuvent également être appliqués à d'autres domaines.
Les réseaux convolutifs profonds sont connus pour leur efficacité dans le traitement d'images. Cependant, la formation d'un réseau convolutif profond sur un petit ensemble de données d'image conduirait généralement à un surajustement extrême, où le réseau mémorise simplement les données d'entrée. Dans de tels cas, nous devons trouver des moyens de mieux utiliser nos données ou d'explorer d'autres sources de données.
Une approche pour surmonter le problème de la rareté des données consiste à augmenter les données et à apprendre par transfert. L'apprentissage par transfert est un concept fondamental de l'apprentissage en profondeur moderne, et il est étonnamment simple à expliquer. L'idée est de former un réseau neuronal profond sur un problème connexe mais plus général, puis de réutiliser ce réseau pré-formé avec une formation supplémentaire sur notre ensemble de données spécifique pour résoudre notre problème.
Pour une tâche de traitement d'images, nous pouvons entraîner un réseau sur de grands ensembles de données d'images collectées sur le Web ou des compétitions d'apprentissage automatique. Le réseau pré-formé aurait une dernière couche dédiée à la classification des images de ces ensembles de données. Lorsque vous travaillez sur une tâche de traitement d'image différente avec une couche de sortie distincte, nous pouvons ignorer la couche de sortie du réseau pré-formé et ajouter notre propre couche de sortie qui correspond aux exigences de notre problème. Cela implique l'ajout de nouveaux poids qui connectent la nouvelle couche de sortie à la dernière couche du réseau pré-formé, qui peut être formé à l'aide de notre petit ensemble de données.
L'attente derrière l'efficacité de l'apprentissage par transfert repose sur l'hypothèse que si le problème de pré-formation est suffisamment similaire à notre problème spécifique, la fonctionnalité apprise par le réseau pré-formé sera transférée, au profit de notre problème. Nous pouvons considérer le réseau pré-formé comme ayant appris des fonctions génériques de traitement d'image, et nous pouvons utiliser cette transformation apprise lors de la formation de notre réseau sur le petit ensemble de données.
Lors de l'application de l'apprentissage par transfert, nous avons plusieurs options pour utiliser le modèle pré-formé. Nous devons supprimer la couche de sortie pour correspondre à notre problème, mais nous pouvons également supprimer d'autres couches si nous pensons que le prétraitement utile a déjà été effectué. De plus, nous pouvons ajouter plusieurs couches pour effectuer un traitement plus sophistiqué pour notre problème spécifique. Pour préserver tout traitement utile effectué par les premières couches, nous pouvons geler leurs poids lors du recyclage, en particulier si le modèle pré-formé a été formé sur un grand ensemble de données et que notre problème a un petit ensemble de données.
Les bibliothèques d'apprentissage en profondeur fournissent souvent des zoos de modèles, qui sont des collections de modèles pré-formés pour différents types de problèmes. Ces modèles servent de points de départ pour l'apprentissage par transfert, rendant l'apprentissage en profondeur accessible pour résoudre un large éventail de problèmes.
Cependant, même avec l'aide de l'apprentissage par transfert, notre ensemble de données pourrait encore être trop petit pour former un réseau efficacement, même sur les dernières couches. Dans de tels cas, nous devons extraire autant d'informations que possible de notre ensemble de données, ce qui nous amène à l'idée d'augmentation des données.
L'augmentation des données implique l'application de transformations à l'ensemble de données qui semblent différentes du réseau neuronal mais conservent la même signification pour les humains ou d'autres systèmes utilisant le modèle appris. Dans le cas du traitement d'image, diverses transformations peuvent être appliquées sans altérer la perception humaine de l'image représentée. Par exemple, la rotation ou le zoom avant sur une image ne modifie pas son contenu sous-jacent. Ces transformations introduisent des différences substantielles dans les données d'entrée vues par le réseau de neurones, ce qui rend difficile pour le réseau de mémoriser des exemples spécifiques ou de s'appuyer sur des détails fins de l'entrée.
Cependant, il faut s'assurer que les transformations ne changent pas le sens des données et apparaissent distinctes du point de vue du réseau. Par exemple, la traduction d'une image peut avoir peu d'impact sur la capacité d'un réseau convolutif à généraliser, compte tenu de son invariance inhérente à la traduction.
Les techniques d'augmentation des données comprennent l'ajout de bruit aléatoire, un léger flou et d'autres modifications qui ne déforment pas la perception humaine de l'image. Ces transformations peuvent être facilement calculées et appliquées de manière aléatoire à chaque lot de données pendant la formation. En formant le réseau pour plusieurs époques sur l'ensemble de données augmenté, nous l'empêchons de simplement mémoriser les exemples d'entrée exacts et l'encourageons à mieux généraliser.
Il est important de noter que les techniques d'augmentation des données ne sont pas aussi efficaces que d'avoir plus de données sur lesquelles s'entraîner, y compris des données connexes pour la pré-formation. Cependant, lorsqu'elle est combinée à l'apprentissage par transfert, l'augmentation des données nous permet de résoudre un plus large éventail de problèmes à l'aide de réseaux de neurones profonds.
En résumé, face à un problème qui nécessite un apprentissage en profondeur mais qui manque de données suffisantes, l'apprentissage par transfert et l'augmentation des données sont des stratégies précieuses. L'apprentissage par transfert consiste à former un réseau sur un problème connexe et à le réutiliser, avec une formation supplémentaire, pour notre problème spécifique. L'augmentation des données consiste à appliquer des transformations à l'ensemble de données qui conservent leur sens tout en introduisant des variations pour une meilleure généralisation. Bien que ces techniques ne remplacent pas davantage de données, elles offrent des solutions pratiques pour tirer parti de l'apprentissage en profondeur dans des scénarios où la disponibilité des données est limitée.
Réseaux résiduels et connexions ignorées (DL 15)
Réseaux résiduels et connexions ignorées (DL 15)
Les réseaux de neurones profonds sont puissants mais difficiles à former en raison du besoin de plus de données à mesure que le nombre de paramètres augmente. La formation des réseaux profonds montre souvent des progrès lents dans la diminution des pertes par rapport aux réseaux superficiels. En effet, les données d'entrée, passant par plusieurs couches avec des poids initialisés de manière aléatoire, sont brouillées dans un bruit aléatoire, ce qui rend difficile la propagation de gradients significatifs.
Pour résoudre ce problème, des connexions ignorées sont introduites. Les connexions de saut impliquent de regrouper les couches en blocs et de fournir deux chemins pour le flux de données à l'intérieur et autour de chaque bloc. La sortie d'un bloc est combinée avec son entrée à l'aide d'une addition ou d'une concaténation, permettant à l'entrée de passer et de rendre les entrées et les mises à jour plus significatives.
Les blocs résiduels, qui intègrent des raccordements sautés, présentent plusieurs avantages. Premièrement, ils simplifient la tâche d'apprentissage pour chaque bloc en se concentrant sur l'augmentation des données existantes plutôt que sur tout ce qui concerne l'entrée. Deuxièmement, ils facilitent le flux des gradients en fournissant des chemins plus courts pour mettre à jour chaque couche du réseau. Ces avantages conduisent à une progression plus rapide de la formation et à de meilleures performances par rapport aux réseaux superficiels.
Lors de l'utilisation de blocs résiduels, il est crucial d'aborder la compatibilité de forme entre les tenseurs d'entrée et de sortie, en particulier lors de l'utilisation de couches convolutives. Une attention particulière doit être accordée à la correspondance des formes et à la prévention d'une explosion du nombre de paramètres, en particulier lors de l'utilisation de la concaténation. En règle générale, l'addition est préférée à la concaténation pour la plupart des connexions de saut dans les grands réseaux résiduels.
Des convolutions une par une peuvent être utilisées pour préserver la hauteur, la largeur et les dimensions du canal dans les blocs convolutionnels. Ils nous permettent d'ajuster la profondeur de la couche de sortie en spécifiant le nombre de filtres dans la couche convolutive.
Bien qu'il existe diverses variantes et architectures de réseaux résiduels, l'idée clé reste cohérente : améliorer la formation des réseaux de neurones profonds en tirant parti des connexions de saut et des blocs résiduels. Ces techniques permettent un meilleur flux d'informations, une formation plus rapide et des performances de modèle accrues. L'exploration de différentes architectures résiduelles et de leurs implémentations spécifiques est recommandée pour une meilleure compréhension et application.
En outre, il est important de tenir compte de certaines préoccupations pratiques lors de la mise en place d'un réseau résiduel. L'une de ces préoccupations est la gestion de la compatibilité de forme entre les tenseurs d'entrée et de sortie lors de l'utilisation de connexions de saut. Cela devient plus complexe lorsque des couches convolutionnelles sont impliquées, car la hauteur, la largeur et les dimensions du canal doivent s'aligner correctement.
Pour simplifier les blocs convolutionnels, des pas un par un et un rembourrage approprié peuvent être utilisés pour préserver la hauteur et la largeur de l'image d'entrée. Cela garantit qu'au moins les dimensions spatiales correspondent lors de l'ajout des tenseurs d'entrée et de sortie d'un bloc. Pour traiter la dimension du canal, des convolutions une par une peuvent être utilisées. Bien que ces convolutions puissent sembler triviales puisqu'elles reçoivent l'entrée d'un seul pixel, elles nous permettent effectivement d'ajuster la profondeur de la couche de sortie. En spécifiant le nombre de filtres dans la convolution un par un, nous pouvons augmenter ou diminuer la profondeur du tenseur de sortie, rendant les formes compatibles.
Lorsque l'on travaille avec de grands réseaux résiduels, il est essentiel de trouver un équilibre entre le nombre de sauts de connexion et l'explosion des paramètres. Une utilisation excessive de la concaténation peut conduire à une augmentation substantielle de la taille du tenseur d'activation et du nombre de paramètres. Par conséquent, il est conseillé de limiter le nombre de connexions de saut basées sur la concaténation et de privilégier l'addition pour la plupart d'entre elles.
La modularité est un autre avantage offert par les réseaux résiduels. La structure uniforme des blocs résiduels et la possibilité d'ajouter facilement plus de blocs facilitent la construction de réseaux plus profonds et plus puissants. En augmentant progressivement le nombre de blocs, on peut créer un réseau qui convient au compromis souhaité entre les ressources de calcul et la capacité du modèle.
Bien que les réseaux résiduels se soient avérés très efficaces, il convient de noter qu'il existe divers autres types d'architectures résiduelles avec différents choix de conception, tels que l'incorporation de couches de normalisation ou de plusieurs chemins dans un bloc. L'exploration de ces variations peut fournir d'autres informations et possibilités pour améliorer la formation des réseaux de neurones profonds.
Dans l'ensemble, les réseaux résiduels offrent une approche précieuse pour former des réseaux de neurones profonds en tirant parti des connexions de saut et des blocs résiduels. Ils simplifient les tâches d'apprentissage, accélèrent la propagation des gradients et offrent une modularité pour la construction d'architectures réseau puissantes. Comprendre les concepts et les considérations derrière les réseaux résiduels contribue aux progrès de la recherche en apprentissage profond et des applications pratiques.
Imbrications de mots (DL 16)
Imbrications de mots (DL 16)
La majorité des données avec lesquelles nous avons travaillé dans les réseaux de neurones étaient des données d'image. Cependant, nous pouvons également utiliser les réseaux de neurones pour d'autres types de problèmes, tels que les données textuelles. Représenter des données textuelles en entrée d'un réseau de neurones n'est pas aussi simple qu'avec des images.
Dans les données d'image, nous pouvons utiliser des formats de stockage numériques standard, qui représentent les images sous forme de tableaux de pixels rouges, verts et bleus. Cette représentation est pratique car elle capture les relations spatiales entre les pixels et les intensités de couleur pertinentes.
Pour les données textuelles, la représentation numérique standard, où les caractères sont convertis en ASCII ou en d'autres valeurs numériques, n'est pas directement pertinente pour la façon dont les réseaux de neurones apprennent. Diverses méthodes peuvent être envisagées pour convertir les valeurs ASCII en entrée valide pour un réseau de neurones, telles que l'utilisation de la représentation binaire des valeurs ASCII ou la normalisation de la plage de caractères entre 0 et 1. Cependant, ces représentations ne capturent pas la sémantique du mots de la même manière qu'un tableau représente une image.
Une approche consiste à créer des vecteurs géants en utilisant des encodages uniques de l'ensemble du vocabulaire. Chaque mot a une représentation vectorielle unique, ce qui résout le problème des mots similaires ayant des significations différentes. Cependant, cela se traduit par une expansion massive des dimensions et perd l'équilibre entre la similarité des mots et la dimensionnalité.
Pour résoudre ce problème, nous visons une représentation des données textuelles qui atteint plusieurs objectifs. Tout d'abord, nous voulons une représentation par mot qui n'est pas de dimension excessivement élevée. Deuxièmement, nous voulons que la représentation porte des informations sémantiques, où des mots similaires ont des représentations vectorielles similaires. Cela a été un problème difficile dans le traitement du langage naturel.
Ces dernières années, les réseaux de neurones ont été utilisés avec succès pour générer des représentations d'entrée appropriées pour les données textuelles. Une approche consiste à extraire des n-grammes, qui sont des séquences de n mots, à partir des données textuelles. Ces n-grammes fournissent des informations contextuelles pour un point spécifique dans une phrase ou un document.
L'idée est de former le réseau en utilisant la représentation du dictionnaire one-hot comme entrée et de prédire l'encodage one-hot du n-gramme environnant. Par exemple, nous pouvons utiliser une entrée de 5 grammes et prédire les quatre autres mots du n-gramme. En entraînant le réseau sur des mots proches à l'aide de n-grammes, nous nous attendons à ce que des mots sémantiquement similaires aient des représentations similaires et reçoivent un retour de gradient similaire pendant l'entraînement.
En écartant la couche de sortie du réseau, nous pouvons utiliser le vecteur d'activations dans la dernière couche cachée comme codage numérique du mot d'entrée. Cette représentation est connue sous le nom d'incorporation de mots, qui capture le contexte du mot dans le texte réel. Diverses approches existent pour produire des incorporations de mots, telles que Word2Vec.
Plutôt que de former nos propres intégrations de mots, nous pouvons utiliser des intégrations pré-formées générées par d'autres avec plus de données et de ressources informatiques. Nous pouvons facilement générer une table de recherche pour traduire un document texte arbitraire en incorporation de mots. Cette approche nous permet d'utiliser des intégrations de mots comme entrée de notre réseau de neurones pour l'apprentissage automatique sur des données textuelles.
L'utilisation d'incorporations de mots comme entrée de notre réseau de neurones pour l'apprentissage automatique sur des données textuelles offre plusieurs avantages. Ces incorporations pré-formées ont été générées par des modèles avec de nombreuses données et ressources informatiques, résultant en des représentations riches et significatives des mots.
En passant un document dans un word embedding existant, on peut obtenir une représentation vectorisée du texte. Cette représentation vectorielle capture les informations contextuelles des mots et peut être utilisée comme entrée dans notre réseau de neurones.
L'utilisation d'intégrations de mots permet l'apprentissage par transfert, où les connaissances acquises à partir d'une tâche (par exemple, la formation du modèle d'intégration de mots) peuvent être appliquées à une autre tâche connexe (par exemple, notre problème spécifique d'apprentissage automatique avec des données textuelles). Au lieu de former nos propres intégrations à partir de zéro, nous pouvons tirer parti des intégrations existantes, en bénéficiant de leurs capacités de généralisation.
Une fois que nous avons le mot incorporant la représentation du texte, nous pouvons procéder à la formation de notre réseau de neurones. Le réseau neuronal peut prendre les vecteurs d'intégration de mots en entrée et apprendre à faire des prédictions sur la base des informations sémantiques codées dans les incorporations.
L'architecture spécifique du réseau neuronal dépendra de la tâche à accomplir. Il peut s'agir d'un réseau neuronal récurrent (RNN) qui considère la nature séquentielle du texte, d'un réseau neuronal convolutif (CNN) qui capture des modèles locaux, ou d'une combinaison des deux. Le réseau peut être conçu pour effectuer des tâches telles que l'analyse des sentiments, la classification de texte, la génération de langage ou la traduction automatique, entre autres.
Au cours du processus de formation, le réseau neuronal apprend à reconnaître des modèles et à faire des prédictions basées sur les intégrations de mots d'entrée. Les gradients propagés à travers le réseau mettent à jour les pondérations, optimisant ainsi la capacité du réseau à faire des prédictions précises.
En utilisant des incorporations de mots, nous relevons les défis de la représentation des données textuelles de manière significative pour les réseaux de neurones. Ces incorporations capturent les relations sémantiques entre les mots, permettant au réseau d'apprendre du contexte et de faire des prédictions éclairées. De plus, l'utilisation d'incorporations pré-formées permet d'économiser des ressources de calcul et d'améliorer l'efficacité de notre pipeline d'apprentissage automatique.
En utilisant les intégrations de mots comme entrée dans notre réseau de neurones, nous pouvons exploiter la puissance de l'apprentissage par transfert et des représentations sémantiques. Cette approche améliore considérablement la capacité des réseaux de neurones à traiter et à comprendre les données textuelles, ouvrant la porte à diverses tâches et applications de traitement du langage naturel.
Réseaux de neurones récurrents (DL 17)
Réseaux de neurones récurrents (DL 17)
Dans notre conférence précédente, nous avons discuté de l'utilisation des incorporations de mots, qui sont des représentations entraînables de mots sous forme de vecteurs avec un nombre modéré de dimensions. Ces incorporations peuvent servir de base à la création de systèmes d'apprentissage automatique qui fonctionnent sur des données textuelles. Pour des tâches simples telles que la classification des sentiments des critiques de produits, décomposer le document en mots, incorporer chaque mot et transmettre la séquence d'intégrations en tant qu'entrée à un réseau de neurones peut suffire. Cependant, pour les tâches plus complexes telles que les réponses conversationnelles ou la traduction automatique, une approche plus sophistiquée est requise.
Pour illustrer cela, nous avons utilisé l'exemple de la prédiction du mot suivant dans une phrase. Cette tâche est plus difficile que la classification des sentiments mais plus facile que la traduction automatique. Lors de la mise en place de réseaux de neurones pour opérer sur des données textuelles, nous sommes confrontés à deux grandes approches. L'un extrême consiste à fournir le document entier en entrée du réseau, tandis que l'autre extrême fournit un seul mot en entrée. Cependant, les deux approches présentent des inconvénients : opérer sur l'ensemble du document limite les exemples de formation et traite des tailles de document variables, tandis qu'opérer sur un mot à la fois ignore le contexte environnant nécessaire pour comprendre le sens des mots et représenter des concepts qui ne correspondent pas directement aux mots. .
Pour trouver un compromis entre ces extrêmes, nous avons introduit une méthode qui fonctionne sur un mot à la fois mais qui intègre la mémoire du réseau des entrées précédentes pour conserver un contexte important. L'idée de base est de renvoyer la sortie du réseau à son entrée, lui permettant d'utiliser ses activations précédentes comme un résumé des mots vus jusqu'à présent. Cette approche donne naissance à des réseaux de neurones récurrents (RNN), qui peuvent être visualisés en les déroulant au fil du temps, représentant le réseau à différents moments dans le temps au fur et à mesure que les mots sont entrés et que la sortie du réseau est réinjectée.
Pour la tâche de prédiction du mot suivant, la sortie de la couche cachée du RNN sert de résumé des mots précédents dans la phrase. Le RNN apprend à prédire le mot suivant en fonction de ce contexte. Les entrées du RNN incorporent des vecteurs, tandis que les sorties sont dans un codage de dictionnaire à chaud pour permettre d'exprimer l'incertitude sur différentes sorties possibles.
La formation des RNN implique le calcul de gradients pour mettre à jour les poids du réseau. Le défi provient du fait que les poids influencent la perte non seulement par leur application à l'entrée actuelle, mais aussi par leur impact sur les entrées des pas de temps précédents. Pour calculer l'effet des pondérations sur la perte à un pas de temps particulier, nous devons considérer à la fois leur impact sur l'entrée actuelle et leur influence sur les pas de temps antérieurs et leur contribution à l'erreur au pas de temps actuel.
Les réseaux de neurones récurrents utilisent souvent des fonctions d'activation sigmoïde ou tanh car ils sont sujets au problème du gradient de fuite. Ce problème survient lorsque les gradients ne peuvent pas se propager loin vers l'arrière dans le réseau, ce qui limite la capacité à capturer les dépendances à long terme. Par conséquent, les RNN simples ne sont pas efficaces pour les tâches nécessitant un contexte étendu et une mémoire à long terme, c'est pourquoi nous nous sommes concentrés sur les phrases plutôt que sur les documents.
Dans la prochaine conférence, nous explorerons une variante des réseaux de neurones récurrents spécialement conçus pour résoudre le problème de la mémoire à long terme et obtenir de meilleures performances dans les tâches de traitement du texte et du langage.