Dans cet exercice, nous allons entraîner notre premier petit réseau de neurones.
Les réseaux de neurones nous permettront d'apprendre des modèles non linéaires
sans avoir à utiliser des croisements de caractéristiques explicites.
Tâche 1:Le modèle donné combine nos deux caractéristiques d'entrée en un seul neurone. Ce modèle va-t-il apprendre des non-linéarités ? Exécutez-le pour confirmer votre supposition.
Tâche 2 : essayez d'augmenter le nombre de neurones dans la couche cachée de 1 à 2, et essayez également de passer d'une activation linéaire à une activation non linéaire comme la fonction ReLU. Pouvez-vous créer un modèle capable d'apprendre des non-linéarités ? Peut-il modéliser les données efficacement ?
Tâche 3 : essayez d'augmenter le nombre de neurones dans la couche cachée de 2 à 3, en utilisant une activation non linéaire comme la fonction ReLU. Peut-il modéliser les données de manière efficace ? En quoi la qualité du modèle varie-t-elle d'une exécution à l'autre ?
Tâche 4:poursuivez l'expérimentation en ajoutant ou en supprimant des couches et des neurones cachés par couche. N'hésitez pas non plus à modifier les taux d'apprentissage, la régularisation et d'autres paramètres d'apprentissage. Quel est le plus petit nombre de neurones et de couches qui donne une perte d'évaluation de 0,177 ou moins ?
L'augmentation de la taille du modèle améliore-t-elle l'adéquation ou la vitesse de convergence ?
Cela change-t-il la fréquence à laquelle il converge vers un modèle approprié ? Par exemple, essayez l'architecture suivante:
Première couche cachée avec 3 neurones.
Deuxième couche cachée avec 3 neurones.
Troisième couche cachée avec 2 neurones.
(Les réponses s'affichent juste en dessous de l'exercice.)
Cliquez sur l'icône Plus pour afficher la réponse à la tâche 1.
L'activation étant définie sur Linear, ce modèle ne peut pas apprendre de non-linéarités. La perte est très élevée, et le modèle sous-adapte les données.
Cliquez sur l'icône Plus pour afficher la réponse à la tâche 2.
La fonction d'activation non linéaire peut apprendre des modèles non linéaires. Cependant, une seule couche cachée avec 2 neurones ne peut pas refléter toutes les non-linéarités de cet ensemble de données et présente une perte élevée même sans bruit: elle sous-optimise toujours les données. Ces exercices n'étant pas déterministes, certaines exécutions n'apprennent pas un modèle efficace, tandis que d'autres font plutôt du bon travail.
Le meilleur modèle peut ne pas avoir la forme attendue !
Cliquez sur l'icône Plus pour afficher la réponse à la tâche 3.
Sa nature non déterministe transparaît dans cet exercice. Une seule couche cachée avec 3 neurones est suffisante pour modéliser l'ensemble de données (bruit absent), mais toutes les exécutions ne convergent pas vers un bon modèle.
3 neurones sont suffisants, car la fonction XOR peut être exprimée sous la forme d'une combinaison de 3 demi-plans (activation ReLU). Vous pouvez le constater en examinant les images de neurones, qui montrent le résultat de chaque neurone. Dans un bon modèle avec 3 neurones et l'activation de la fonction ReLU, une image présente une ligne presque verticale, détectant X1 comme positif (ou négatif)
Cependant, toutes les exécutions ne convergent pas vers un bon modèle. Certaines exécutions ne seront pas plus efficaces qu'un modèle comportant deux neurones. Dans ce cas, vous verrez des neurones en double.
Cliquez sur l'icône Plus pour afficher la réponse à la tâche 4.
Une seule couche cachée avec 3 neurones peut modéliser les données, mais il n'y a pas de redondance. Ainsi, sur de nombreuses exécutions, un neurone sera perdu et l'apprentissage du modèle sera défectueux. Une couche comportant plus de trois neurones a plus de redondance, ce qui la rend plus susceptible de converger vers un bon modèle.
Comme nous l'avons vu, une seule couche cachée avec seulement deux neurones ne peut pas modéliser correctement les données. Si vous essayez, vous pouvez voir que tous les éléments de la couche de sortie ne peuvent être que des formes composées des lignes de ces deux nœuds. Dans ce cas, un réseau plus profond peut modéliser l'ensemble de données mieux que la première couche cachée seule : des neurones individuels de la deuxième couche peuvent modéliser des formes plus complexes, comme le quadrant supérieur droit, en combinant des neurones dans la première couche. Bien que l'ajout de cette deuxième couche cachée puisse tout de même modéliser l'ensemble de données de manière plus efficace que la première couche cachée, il peut être plus judicieux d'ajouter des nœuds à la première couche afin de laisser davantage de lignes dans le kit à partir duquel la seconde couche crée ses formes.
Cependant, un modèle comportant un neurone dans la première couche cachée ne peut pas apprendre un bon modèle, quelle que soit sa profondeur. En effet, le résultat de la première couche ne varie que le long d'une dimension (généralement une ligne diagonale), ce qui est insuffisant pour modéliser cet ensemble de données. Les couches ultérieures ne peuvent pas compenser cela, peu importe la complexité ; les informations dans les données d'entrée ont été irrémédiablement perdues.
Et si, au lieu d'essayer d'avoir un petit réseau, nous avions de nombreuses couches avec beaucoup de neurones, pour un problème simple comme celui-ci ? Eh bien, comme nous l'avons vu, la première couche peut tester de nombreuses pentes différentes. La deuxième couche peut les accumuler dans différentes formes, avec de nombreuses formes par le biais des couches suivantes.
En permettant au modèle d'envisager autant de formes différentes à travers un grand nombre de neurones cachés, vous avez créé assez d'espace pour qu'il commence facilement à surapposer le bruit de l'ensemble d'entraînement. Ces formes complexes peuvent ainsi correspondre aux nuisances des données d'entraînement plutôt qu'à la vérité terrain généralisée. Dans cet exemple, les modèles plus grands peuvent avoir des limites complexes pour correspondre aux points de données précis. Dans les cas extrêmes, un modèle volumineux peut apprendre une île autour d'un point de bruit individuel. Cela consiste à mémoriser les données. En permettant à votre modèle d'être beaucoup plus volumineux, vous constaterez qu'il est souvent plus moins efficace qu'un modèle plus simple
avec juste assez de neurones pour résoudre le problème.
Initialisation du réseau de neurones
Cet exercice utilise à nouveau les données XOR, mais examine la reproductibilité de l'entraînement des réseaux de neurones et l'importance de l'initialisation.
Tâche 1 : exécutez le modèle donné quatre ou cinq fois. Avant chaque essai, cliquez sur le bouton Réinitialiser le réseau pour obtenir une nouvelle initialisation aléatoire.
(Le bouton Réinitialiser le réseau est la flèche de réinitialisation circulaire située à gauche du bouton de lecture.) Assurez-vous que chaque essai dure au moins 500 pas pour assurer la convergence. Sous quelle forme les résultats de chaque modèle convergent-ils ?
Qu'en est-il du rôle de l'initialisation dans l'optimisation non convexe ?
Tâche 2 : essayez de rendre le modèle légèrement plus complexe en ajoutant une couche et quelques nœuds supplémentaires. Répétez les essais de la tâche 1. Cela apporte-t-il une stabilité supplémentaire aux résultats ?
(Les réponses s'affichent juste en dessous de l'exercice.)
Cliquez sur l'icône Plus pour afficher la réponse à la tâche 1.
Le modèle appris avait différentes formes à chaque exécution. La perte de test convergée variait presque deux fois, de la plus faible à la plus élevée.
Cliquez sur l'icône Plus pour afficher la réponse à la tâche 2.
L'ajout de la couche et de nœuds supplémentaires a donné des résultats plus reproductibles.
À chaque exécution, le modèle obtenu était à peu près identique. De plus, la perte de test convergée montrait une variance moindre entre les exécutions.
Spirale du réseau de neurones
Cet ensemble de données est une spirale bruyante. Bien entendu, un modèle linéaire échouera ici, mais même les croisements de caractéristiques définis manuellement peuvent être difficiles à construire.
Tâche 1 : entraînez le meilleur modèle possible en utilisant uniquement X1 et X2. N'hésitez pas à ajouter ou supprimer des couches et des neurones, et à modifier les paramètres d'apprentissage tels que le taux d'apprentissage, le taux de régularisation et la taille de lot. Quelle est la meilleure perte d'évaluation possible ? La surface de sortie du modèle est-elle lisse ?
Tâche 2:même avec les réseaux de neurones, une certaine extraction de caractéristiques est souvent nécessaire pour obtenir de meilleures performances. Essayez d'ajouter des caractéristiques croisées ou d'autres transformations, comme sin(X1) et sin(X2). Avez-vous un meilleur modèle ? La surface de sortie du modèle est-elle plus fluide ?
(Les réponses s'affichent juste en dessous de l'exercice.)
Cliquez sur l'icône Plus pour afficher les réponses possibles.
La vidéo suivante explique comment choisir des hyperparamètres dans Playground afin d'entraîner un modèle pour les données en spirale qui minimise la perte d'évaluation.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.