Il est vrai qu'il est difficile de comprendre ce qu'un réseau de neurones apprend, mais il y a eu beaucoup de travail sur ce front. Nous pouvons certainement avoir une idée de ce que recherche notre réseau.
Prenons le cas d'un réseau neuronal convolutif pour les images. Nous avons l'interprétation pour notre première couche que nous glissons des filtres sur l'image, donc notre première couche cachée correspond à l'accord entre les petits morceaux de l'image et nos différents filtres. Nous pouvons visualiser ces filtres pour voir quelle est notre première couche de représentation:K
Cette image représente la première couche de filtres d'un AlexNet et est tirée de ce merveilleux tutoriel: http://cs231n.github.io/understanding-cnn/ . Cela nous permet d'interpréter la première couche cachée comme apprenant à représenter l'image, constituée de pixels bruts, comme un tenseur où chaque coordonnée est l'accord d'un filtre avec une petite région de l'image. La couche suivante travaille alors avec ces activations de filtre.
Il n'est pas si difficile de comprendre la première couche cachée, car nous pouvons simplement regarder les filtres pour voir comment ils se comportent, car ils sont directement appliqués à une image d'entrée. Par exemple, disons que vous travaillez avec une image en noir et blanc (donc nos filtres sont 2D plutôt que 3D) et que vous avez un filtre qui ressemble à
⎡⎣⎢0101- 41010⎤⎦⎥.
Imaginez appliquer cela à une région 3x3 d'une image (en ignorant le terme de biais). Si chaque pixel était de la même couleur, vous obtiendrez car ils annuleraient. Mais si la moitié supérieure est différente de la moitié inférieure, par exemple, vous obtiendrez une valeur potentiellement élevée. Ce filtre, en fait, est un détecteur de bord, et nous pouvons le comprendre en l'appliquant simplement aux images et en voyant ce qui se passe. Mais il est beaucoup plus difficile de comprendre les couches plus profondes, car tout le problème est que nous ne savons pas comment interpréter à quoi nous appliquons les filtres.0
Cet article d'Erhan et al (2009) est d'accord avec cela: ils disent que les premières visualisations de couches cachées sont courantes (et c'était en 2009) mais la visualisation des couches plus profondes est la partie difficile. De ce papier:
Le principal résultat expérimental de cette enquête est très surprenant: la réponse d'une unité interne aux images d'entrée, en tant que fonction dans l'espace image, semble être unimodale, ou du moins que le maximum est trouvé de manière fiable et cohérente pour toutes les initialisations aléatoires testées . Ceci est intéressant car trouver ce mode dominant est relativement facile et son affichage permet alors de bien caractériser ce que fait l'unité.
Chris Olah et al ( https://distill.pub/2017/feature-visualization/ ) s'appuient sur cela et expliquent comment en général vous pouvez (1) générer des images qui conduisent à de grandes activations afin d'avoir une idée de ce que le réseau cherche; ou (2) prendre des images d'entrée réelles et voir comment différentes parties de l'image activent le réseau. Ce post se concentre sur (1).
Dans l'image ci-dessous, tirée de cet article lié d'Olah et al., Les auteurs discutent des différents aspects du réseau que vous pouvez inspecter. L'image la plus à gauche montre le résultat de l'optimisation de l'activation d'un neurone particulier sur l'espace d'image d'entrée, etc.
Je recommanderais fortement de lire cet article dans son intégralité si vous voulez une compréhension plus approfondie de cela, et en lisant ses références, vous devriez avoir une bonne compréhension de ce qui a été fait avec cela.
Maintenant, bien sûr, tout cela n'était que pour les images où nous, en tant qu'humains, pouvons donner un sens aux entrées. Si vous travaillez avec quelque chose de plus difficile à interpréter, comme juste un grand vecteur de nombres, alors vous ne pourrez peut-être pas faire des visualisations aussi cool, mais en principe, vous pourriez toujours envisager ces techniques pour évaluer les différents neurones, couches, etc. .