Les réseaux de neurones sont souvent traités comme des "boîtes noires" en raison de leur structure complexe. Ce n'est pas idéal, car il est souvent bénéfique de comprendre intuitivement le fonctionnement d'un modèle en interne. Quelles sont les méthodes de visualisation du fonctionnement d'un réseau de neurones formés? Sinon, comment pouvons-nous extraire des descriptions faciles à assimiler du réseau (par exemple, ce nœud caché fonctionne principalement avec ces entrées)?
Je suis principalement intéressé par les réseaux à feed-forward à deux couches, mais j'aimerais également connaître les solutions pour les réseaux plus profonds. Les données d'entrée peuvent être de nature visuelle ou non visuelle.
Réponses:
Les réseaux de neurones sont parfois appelés "approximateurs de fonction différenciables". Donc, ce que vous pouvez faire est de différencier toute unité par rapport à une autre unité pour voir quelle est leur relation.
Vous pouvez également vérifier la sensibilité de l'erreur du réseau à une entrée spécifique.
Ensuite, il y a quelque chose appelé "champs réceptifs", qui est juste la visualisation des connexions entrant dans une unité cachée. Cela permet de comprendre facilement ce que font les unités particulières pour les données d'image, par exemple. Cela peut également être fait pour les niveaux supérieurs. Voir Visualisation des fonctionnalités de niveau supérieur d'un réseau profond .
la source
Estimez l’importance des caractéristiques en modifiant de façon aléatoire chaque valeur d’une caractéristique unique et en enregistrant la dégradation de vos fonctions de mise en forme.
Par conséquent, si votre première une valeur continue et est mise à l'échelle à , vous pouvez ajouter à la valeur de chaque exemple d'apprentissage pour la première entité. Ensuite, cherchez combien votre diminue. Cela exclut effectivement une fonctionnalité de vos données d'entraînement, mais gère mieux les interactions croisées que la suppression littérale de la fonctionnalité.X1 , je [ 0 , 1 ] r a n d( 0 , 1 ) - 0,5 R2
Ensuite, classez vos caractéristiques par dégradation de la fonction de remise en forme et créez un joli diagramme à barres. Au moins certaines des caractéristiques les plus importantes devraient passer un test d’aiguille, compte tenu de votre connaissance du domaine problématique. Et cela vous permet également d'être agréablement surpris par des fonctionnalités informatives auxquelles vous ne vous attendiez peut-être pas.
Ce type de test d'importance des fonctionnalités fonctionne pour tous les modèles à boîte noire, y compris les réseaux de neurones et les grands ensembles CART. D'après mon expérience, l'importance des fonctionnalités est la première étape pour comprendre ce que fait réellement un modèle.
la source
Voici une intuition graphique pour un type particulier de réseaux de neurones. À la fin de ce post, il y a un lien vers le code R qui montre une visualisation pour un problème particulier. Voici à quoi ça ressemble:
la source
À l'automne 2011, j'ai suivi le cours d'apprentissage en ligne gratuit en ligne de Standford dispensé par Andrew Ng et nous avons visualisé un réseau de neurones qui était un détecteur de visage. La sortie était un visage générique. Je veux mentionner ceci pour être complet, mais vous n’avez pas mentionné ce type d’application, je ne vais donc pas chercher les détails. :)
la source
La méthode mentionnée ci-dessous est tirée de ce lien , visitez le site pour plus de détails.
Commencez avec une image aléatoire, c.-à-d., Fournissez des valeurs aux pixels de manière arbitraire. "Ensuite, nous faisons un passage en avant en utilisant cette image x comme entrée du réseau pour calculer l’activation a_i (x) provoquée par x sur un neurone i quelque part au milieu du réseau. Ensuite, nous effectuons un passage en arrière (effectuant un retour arrière). pour calculer le gradient de a_i (x) par rapport aux activations précédentes sur le réseau. À la fin de la passe arrière, il nous reste le dégradé a_i (x) / ∂x , ou comment changer la couleur de chaque pixel en augmenter l'activation du neurone I. Nous faisons exactement cela en ajoutant une petite fraction αα de ce gradient à l'image:
x ← x + α⋅∂a_i (x) / ∂x
Nous continuons à faire cela à plusieurs reprises jusqu'à ce que nous ayons une image x 'qui provoque une forte activation du neurone en question. "
la source