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

Incorporation de nœuds de polarisation dans votre réseau neuronal

Cet article vous montre comment ajouter des valeurs de biais à un Perceptron multicouche implémenté dans un langage de programmation de haut niveau tel que Python.

Bienvenue dans la série All About Circuits sur les réseaux de neurones, créée par le directeur de l'ingénierie Robert Keim. Avant de continuer avec cette leçon sur les nœuds de biais, pensez à rattraper le reste de la série ci-dessous :

  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
  17. Incorporer des nœuds de polarisation dans votre réseau de neurones


Les nœuds de biais, qui peuvent être ajoutés à la couche d'entrée ou à la couche cachée d'un Perceptron, produisent une valeur constante qui est choisie par le concepteur.

Nous avons discuté des valeurs de biais dans la partie 11, et je vous encourage à lire (ou relire) la partie pertinente de cet article si vous ne savez pas exactement ce que sont les nœuds de biais ou comment ils modifient et améliorent potentiellement la fonctionnalité d'un réseau de neurones.

Dans cet article, je vais d'abord expliquer deux méthodes d'incorporation de valeurs de biais dans votre architecture réseau, puis nous mènerons une expérience pour voir si les valeurs de biais peuvent améliorer les performances de précision que nous avons obtenues dans l'article précédent (partie 16).

Incorporation des biais via la feuille de calcul

Le schéma suivant illustre un réseau qui a un nœud de polarisation dans la couche d'entrée mais pas dans la couche cachée.

Si c'est la configuration que vous recherchez, vous pouvez ajouter une valeur de biais à l'aide de la feuille de calcul qui contient vos données d'entraînement ou de validation.

L'avantage de cette méthode est simplement qu'aucune modification substantielle du code n'est requise. La première étape consiste à insérer une colonne dans votre feuille de calcul et à la remplir avec votre valeur de biais :

Maintenant, tout ce que vous avez à faire est d'augmenter de un la dimensionnalité de votre couche d'entrée :

Intégrer le biais dans le code

Si vous voulez un nœud de biais dans la couche cachée, ou si vous n'aimez pas travailler avec des feuilles de calcul, vous aurez besoin d'une solution différente.

Supposons que nous souhaitions ajouter un nœud de polarisation à la fois à la couche d'entrée et à la couche cachée. Tout d'abord, nous devons augmenter I_dim et H_dim , puisque notre objectif est d'intégrer les nœuds de biais de telle sorte qu'ils fonctionnent comme des nœuds normaux mais avec une valeur prépondérée qui est choisie par le concepteur et qui ne change jamais.

Je vais accomplir cela comme suit :


Création du nœud de biais de couche d'entrée

Comme vous vous en souvenez peut-être, nous utilisons le code suivant pour assembler l'ensemble de données d'apprentissage, séparer les valeurs de sortie cibles et extraire le nombre d'échantillons d'apprentissage.

Après ces instructions, le nombre de colonnes dans le tableau à deux dimensions training_data sera égal au nombre de colonnes d'entrée dans la feuille de calcul. Nous devons augmenter le nombre de colonnes d'une pour tenir compte du nœud de biais dans la couche d'entrée, et pendant que nous y sommes, nous pouvons remplir cette colonne supplémentaire avec la valeur de biais souhaitée.

Le code suivant montre comment cela peut être fait.


Les np.ones() La fonction crée un tableau à une colonne dont le nombre de lignes est égal à training_count , et il attribue une valeur de +1 à chaque élément de ce tableau. Ensuite, nous utilisons le np.hstack() fonction pour ajouter le tableau à une colonne à droite des training_data d'origine tableau.

Notez que j'ai effectué cette procédure à la fois pour les données d'entraînement et les données de validation. Il est important de se rappeler que l'objectif n'est pas réellement de modifier les données d'entraînement ou de validation ; nous modifions plutôt les données afin de mettre en œuvre la configuration réseau souhaitée.

Lorsque nous regardons un schéma fonctionnel du Perceptron, les nœuds de polarisation apparaissent comme des éléments du réseau lui-même; ainsi, tous les échantillons qui sont traités par le réseau doivent subir cette modification.

Création du nœud de biais de couche cachée

Nous pouvons ajouter un biais dans le traitement anticipatif en modifiant la boucle for qui calcule les valeurs de postactivation de la couche cachée, puis en insérant manuellement la valeur de biais pour le dernier nœud caché (qui est en fait un nœud de biais).

La première modification est illustrée ci-dessous :


Si le réseau est configuré pour n'avoir aucun nœud de polarisation de couche cachée, hidden_bias est égal à 0 et l'exécution de la boucle for est inchangée.

Si, en revanche, nous avons décidé d'inclure un nœud de polarisation de couche cachée, la boucle for ne calculera pas de valeur de postactivation pour le nœud final de la couche (c'est-à-dire le nœud de polarisation).

L'étape suivante consiste à incrémenter la variable de nœud afin qu'elle accède au nœud de biais dans le postActivation_H tableau, puis attribuez la valeur de biais.

Notez que ces modifications doivent également être appliquées à la partie de validation du code.

Valeurs de biais autres que +1

D'après mon expérience, +1 est la valeur de biais standard, et je ne sais pas s'il existe une justification solide pour l'utilisation d'autres nombres. Le biais est modifié par les pondérations. Par conséquent, le choix de +1 n'impose pas de restrictions fermes sur la façon dont le biais interagit avec la fonctionnalité globale du réseau.

Cependant, si vous souhaitez expérimenter d'autres valeurs de biais, vous pouvez facilement le faire. Pour le biais caché, vous modifiez simplement le numéro attribué à postActivation_H[node] . Pour le biais d'entrée, vous pouvez multiplier la new_column tableau (qui a initialement +1 pour chaque élément) par la valeur de biais souhaitée.

Test de l'effet du biais

Si vous avez lu la partie 16, vous savez que mon Perceptron a eu quelques difficultés à classer les échantillons dans l'expérience 3, ce qui était le problème de « haute complexité ».

Voyons si l'ajout d'un ou plusieurs nœuds de biais offre une amélioration cohérente et significative.

Mon hypothèse était que les différences de précision de classification seraient assez subtiles, donc pour cette expérience, j'ai fait en moyenne dix courses au lieu de cinq. Les ensembles de données d'apprentissage et de validation ont été générés en utilisant la même relation hautement complexe entre l'entrée et la sortie, et la dimensionnalité de la couche cachée était de 7.

Voici les résultats :

Conclusion

Comme vous pouvez le constater, les nœuds de biais n'ont entraîné aucun changement significatif dans les performances de classification.

En fait, cela ne me surprend pas :je pense que les nœuds de biais sont parfois un peu surestimés, et étant donné la nature des données d'entrée que j'ai utilisées dans cette expérience, je ne vois aucune raison pour laquelle les nœuds de biais seraient utiles.

Néanmoins, la polarisation est une technique importante dans certaines applications; c'est une bonne idée d'écrire du code qui prend en charge la fonctionnalité de nœud de polarisation afin qu'il soit là quand vous en avez besoin.


Robot industriel

  1. Repenser votre plan de match pour la surveillance du réseau
  2. Comment renforcer vos appareils pour empêcher les cyberattaques
  3. Construire un réseau de capteurs sans fil dans votre maison
  4. Comprendre les minima locaux dans la formation sur les réseaux neuronaux
  5. Comment intégrer la gestion des pièces de rechange dans votre GMAO
  6. [Interview] Experts du secteur sur le choix de votre réseau IoT
  7. Comment réussir l'intégration de la robotique dans votre installation
  8. Transformer votre chaîne d'approvisionnement en centre d'opportunités
  9. Dans quelle mesure votre réseau d'ateliers est-il sécurisé ?