Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Equipment >> Robot industriel

Comment augmenter la précision d'un réseau de neurones à couche cachée

Dans cet article, nous allons effectuer quelques expériences de classification et recueillir des données sur la relation entre la dimensionnalité de la couche cachée et les performances du réseau.

Dans cet article, vous apprendrez comment modifier une couche cachée pour améliorer la précision du réseau neuronal à l'aide d'une implémentation Python et d'exemples de problèmes.

Avant d'aborder ce sujet, envisagez de rattraper votre retard sur les entrées précédentes de cette série sur les réseaux de neurones :

  1. Comment effectuer une classification à l'aide d'un réseau de neurones :qu'est-ce que le perceptron ?
  2. Comment utiliser un exemple simple de réseau neuronal Perceptron pour classer des données
  3. Comment former un réseau de neurones Perceptron de base
  4. Comprendre la formation simple sur les réseaux neuronaux
  5. Une introduction à la théorie de la formation pour les réseaux de neurones
  6. Comprendre le taux d'apprentissage dans les réseaux de neurones
  7. Apprentissage automatique avancé avec le Perceptron multicouche
  8. La fonction d'activation sigmoïde :activation dans les réseaux de neurones Perceptron multicouches
  9. Comment former un réseau de neurones Perceptron multicouches
  10. Comprendre les formules d'entraînement et la rétropropagation pour les perceptrons multicouches
  11. Architecture de réseau neuronal pour une implémentation Python
  12. Comment créer un réseau de neurones Perceptron multicouche en Python
  13. Traitement du signal à l'aide de réseaux de neurones :validation dans la conception de réseaux de neurones
  14. Entraînement d'ensembles de données pour les réseaux de neurones :comment entraîner et valider un réseau de neurones Python
  15. De combien de couches et de nœuds cachés un réseau de neurones a-t-il besoin ?
  16. Comment augmenter la précision d'un réseau de neurones à couche cachée

Le nombre de nœuds inclus dans une couche cachée influence la capacité de classification et la vitesse d'un réseau de neurones Perceptron. Nous allons mener des expériences qui nous aideront à formuler une intuition naissante sur la façon dont la dimensionnalité de la couche cachée s'intègre dans la tentative de conception d'un réseau qui s'entraîne dans un laps de temps raisonnable, produit des valeurs de sortie avec une latence acceptable et répond aux exigences de précision. .

Analyse comparative en Python

Le code Python du réseau de neurones présenté dans la partie 12 comprend déjà une section qui calcule la précision en utilisant le réseau formé pour classer les échantillons à partir d'un ensemble de données de validation. Ainsi, tout ce que nous devons faire est d'ajouter du code qui rapportera le temps d'exécution pour la formation (qui inclut l'opération d'anticipation et la rétropropagation) et pour la fonctionnalité de classification réelle (qui inclut uniquement l'opération d'anticipation). Nous utiliserons le time.perf_counter() fonction pour cela.

Voici comment je marque le début et la fin de la formation :

Les heures de début et de fin de validation sont générées de la même manière :


Les deux mesures de temps de traitement sont rapportées comme suit :


Données d'entraînement et procédure de mesure

Le réseau de neurones effectuera une classification vrai/faux sur des échantillons d'entrée constitués de quatre valeurs numériques comprises entre –20 et +20.

Ainsi, nous avons quatre nœuds d'entrée et un nœud de sortie, et les valeurs d'entrée sont générées avec l'équation Excel ci-dessous.


Mon ensemble de données d'entraînement se compose de 40 000 échantillons et l'ensemble de validation contient 5 000 échantillons. Le taux d'apprentissage est de 0,1 et je n'effectue qu'une seule période d'entraînement.

Nous allons effectuer trois expériences représentant des relations d'entrée-sortie avec divers degrés de complexité. Le np.random.seed(1) l'instruction est commentée, donc les valeurs de poids initiales varieront et donc la précision de la classification aussi.

Dans chaque expérience, le programme sera exécuté cinq fois (avec les mêmes données d'apprentissage et de validation) pour chaque dimensionnalité de couche cachée, et les mesures finales de précision et de temps de traitement seront la moyenne arithmétique des résultats générés par les cinq exécutions distinctes. .

Expérience 1 :Un problème de faible complexité

Dans cette expérience, la sortie n'est vraie que si les trois premières entrées sont supérieures à zéro, comme le montre la capture d'écran Excel ci-dessous (notez que la quatrième entrée n'a aucun effet sur la valeur de sortie).

Je pense que cela peut être considéré comme une relation entrée-sortie assez simple pour un Perceptron multicouche.

Sur la base des recommandations que j'ai fournies dans la partie 15 concernant le nombre de couches et de nœuds dont un réseau de neurones a besoin, je commencerais par une dimensionnalité de couche cachée égale aux deux tiers de la dimensionnalité d'entrée.

Comme je ne peux pas avoir de couche cachée avec une fraction de nœud, je vais commencer à H_dim =2 . Le tableau ci-dessous présente les résultats.


Nous constatons une amélioration de la classification jusqu'à cinq nœuds cachés. Cependant, je pense que ces chiffres exagèrent l'avantage de passer de quatre à cinq nœuds, car la précision de l'une des exécutions à quatre nœuds cachés était de 88,6 %, ce qui a fait baisser la moyenne.

Si j'élimine cette exécution de faible précision, la précision moyenne pour quatre nœuds cachés est en fait légèrement supérieure à la moyenne pour cinq nœuds cachés. Je soupçonne que dans ce cas, quatre nœuds cachés fourniront le meilleur équilibre entre précision et vitesse.

Une autre chose importante à noter dans ces résultats est la différence dans la façon dont la dimensionnalité de la couche cachée affecte le temps de formation et le temps de traitement. Passer de deux à quatre nœuds cachés augmente le temps de validation d'un facteur 1,3, mais augmente le temps d'entraînement d'un facteur 1,9.

La formation est beaucoup plus gourmande en calculs que le traitement anticipatif, nous devons donc être particulièrement attentifs à la façon dont la configuration du réseau influence notre capacité à former le réseau dans un laps de temps raisonnable.

Expérience 2 :Un problème de complexité modérée

La capture d'écran Excel montre la relation entrée-sortie pour cette expérience. Les quatre entrées influencent désormais la valeur de sortie, et les comparaisons sont moins simples qu'elles ne l'étaient dans l'expérience 1.

J'ai commencé avec trois nœuds cachés. Voici les résultats :

Dans ce cas, je soupçonne que cinq nœuds cachés nous donneront la meilleure combinaison de précision et de vitesse, bien qu'une fois encore, les exécutions à quatre nœuds cachés aient produit une valeur de précision nettement inférieure aux autres. Si vous ignorez cette valeur aberrante, les résultats pour quatre nœuds cachés, cinq nœuds cachés et six nœuds cachés sont très similaires.

Le fait que les exécutions à cinq nœuds cachés et à six nœuds cachés n'aient pas généré de valeurs aberrantes nous conduit à une conclusion intéressante :peut-être que l'augmentation de la dimensionnalité de la couche cachée rend le réseau plus robuste contre les conditions qui, pour une raison quelconque, entraînent la formation à être particulièrement difficile.

Expérience 3 :Un problème très complexe

Comme indiqué ci-dessous, la nouvelle relation entrée-sortie inclut à nouveau les quatre valeurs d'entrée, et nous avons introduit la non-linéarité en mettant au carré l'une des entrées et en prenant la racine carrée d'une autre.


Voici les résultats :


Le réseau avait certainement plus de difficultés avec cette relation mathématique de complexité plus élevée; même avec sept nœuds cachés, la précision était inférieure à ce que nous avons obtenu avec seulement trois nœuds cachés dans le problème de faible complexité. Je suis convaincu que nous pourrions améliorer les performances de haute complexité en modifiant d'autres aspects du réseau, par exemple, y compris un biais (voir la partie 11) ou le recuit du taux d'apprentissage (voir la partie 6).

Néanmoins, je garderais la dimensionnalité de la couche cachée à sept jusqu'à ce que je sois complètement convaincu que d'autres améliorations pourraient permettre au réseau de maintenir des performances adéquates avec une couche cachée plus petite.

Conclusion

Nous avons vu des mesures intéressantes qui brossent un tableau assez clair de la relation entre la dimensionnalité de la couche cachée et les performances de Perceptron. Il y a certainement beaucoup plus de détails que nous pourrions explorer, mais je pense que cela vous donne des informations de base solides sur lesquelles vous pouvez vous appuyer lorsque vous expérimentez la conception et la formation de réseaux de neurones.


Robot industriel

  1. De combien de couches et de nœuds cachés un réseau de neurones a-t-il besoin ?
  2. Entraînement d'ensembles de données pour les réseaux de neurones :comment entraîner et valider un réseau de neurones Python
  3. Comment créer un réseau de neurones Perceptron multicouche en Python
  4. Architecture de réseau neuronal pour une implémentation Python
  5. Comment l'écosystème du réseau change l'avenir de la ferme
  6. Sécurisation de l'IoT de la couche réseau à la couche application
  7. En quoi Thomas WebTrax diffère de Google Analytics, du réseau Thomas et plus
  8. Comment les capteurs réseau 0G protègent la chaîne du froid des vaccins
  9. Comment choisir le bon système de découpe laser pour maximiser la productivité et la précision