Visualisez la partie interne d'un réseau neuronal
Pour comprendre le fonctionnement interne d'un réseau de classification d'images entraîné, on peut essayer de visualiser les caractéristiques de l'image auxquelles les neurones du réseau répondent.
Téléchargez un réseau pré-entraîné.
Les caractéristiques d'images des neurones de la première couche de convolution sont simplement fournies par leurs noyaux de convolution.
Ces neurones encodent des caractéristiques de bas niveau, telles que les arêtes et les lignes de niveaux de gris et de couleurs, avec des orientations variables.
Cependant, cette approche simple ne fonctionne pas pour les neurones des couches qui se trouvent plus bas dans la chaîne de traitement du réseau. Vous pouvez donc utiliser l'algorithme Deep Dream de Google pour générer des caractéristiques neuronales dans une image aléatoire.
Tout d'abord, spécifiez une couche et une fonction que vous souhaitez visualiser.
Pour se faire une idée de ce qu'un neurone encode, tronquez le réseau à la couche en question et attachez des couches supplémentaires qui extraient toute l'activité de chaque neurone.
La maximisation de la sortie de ce réseau par la mise à jour constante d'une image d'entrée aléatoire avec le gradient de rétropropagation du réseau donne une image qui excite principalement le neurone en question. L'image obtenue montre donc les caractéristiques auxquelles le neurone réagit.
Créez une image initiale qui montre le caractère aléatoire à toutes les échelles.
La commande NetPortGradient["Input"] fournit le gradient de rétropropagation sur le port d'entrée du réseau. Le code suivant normalise le coefficient de gradient maximal à 1/8 et le convertit en une image.
Avant de mettre à jour l'image de façon itérative avec le gradient précédent, vous devez introduire une fonction de gigue qui déplace l'image d'une petite valeur.
L'incorporation d'une gigue aléatoire dans la boucle suivante aide à étaler les artefacts locaux de la rétropropagation et favorise une image plus régulière.
Si vous mettez à jour l'image aléatoire initiale 256 fois, vous obtenez l'image suivante. Les neurones en question semblent encoder de petits oiseaux ou poulets.
N'hésitez pas à répéter la procédure ci-dessus pour d'autres fonctions dans d'autres couches. Vous remarquerez que les neurones des couches peu profondes encodent des caractéristiques simples, comme les textures, alors que les neurones des couches profondes encodent des caractéristiques plus complexes, comme les visages des animaux.
Caractéristiques de la couche initiale 3b.
Caractéristiques de la couche initiale 4d.