Deep learning: comment savoir quelles variables sont importantes?

20

En termes de jargon de réseau de neurones (y = poids * x + biais), comment saurais-je quelles variables sont plus importantes que d'autres?

J'ai un réseau neuronal avec 10 entrées, 1 couche cachée avec 20 nœuds et 1 couche de sortie qui a 1 nœud. Je ne sais pas comment savoir quelles variables d'entrée ont plus d'influence que les autres variables. Ce que je pense, c'est que si une entrée est importante, elle aura une connexion très pondérée avec la première couche, mais le poids peut être positif ou négatif. Donc, ce que je pourrais faire, c'est prendre la valeur absolue des poids de l'entrée et les additionner. Les intrants les plus importants auraient des sommes plus élevées.

Ainsi, par exemple, si la longueur des cheveux est l'une des entrées, elle devrait avoir 1 connexion à chacun des nœuds de la couche suivante, donc 20 connexions (et donc 20 poids). Puis-je simplement prendre la valeur absolue de chaque poids et les additionner?

user1367204
la source
3
Vous pouvez certainement le faire, mais on ne sait pas vraiment ce que cela signifie en dehors de "la somme de tous les poids pour cette variable sur toutes les connexions". L'appeler "importance" est tout à fait arbitraire.
Matthew Drury
1
Je veux juste N'IMPORTE QUELLE information qui suggérerait une variable importante, et je pense que cela pourrait être un bon moyen.
user1367204

Réponses:

16

Ce que vous décrivez est en effet une façon standard de quantifier l'importance des entrées du réseau neuronal. Notez que pour que cela fonctionne, cependant, les variables d'entrée doivent être normalisées d'une manière ou d'une autre. Sinon, les poids correspondant aux variables d'entrée qui ont tendance à avoir des valeurs plus élevées seront proportionnellement plus petits. Il existe différents schémas de normalisation, comme par exemple la soustraction de la moyenne d'une variable et la division par son écart-type. Si les variables n'étaient pas normalisées en premier lieu, vous pourriez effectuer une correction sur les poids eux-mêmes dans le calcul de l'importance, par exemple en multipliant par l'écart-type de la variable.

Ii=σij=1nhidden|wij|.

Ici est l'écart-type de la ème entrée, est l'importance de la ème entrée, est le poids reliant la ème entrée au ème nœud caché dans la première couche, et est le nombre de nœuds cachés dans la première couche. i I i i w i j i j n cachéσiiIiiwijijnhidden

Une autre technique consiste à utiliser la dérivée de la cartographie du réseau neuronal par rapport à l'entrée en question, moyenne sur les entrées.

Ii=σi|dydxi|

Ici est la ème entrée, est la sortie et la valeur d'attente est prise par rapport au vecteur d'entrées . i y xxiiyx

Sam Marinelli
la source
Est-ce que cela fonctionnerait si j'utilisais uniquement les connexions entre les entrées et la première couche cachée (plutôt que d'utiliser toutes les couches cachées)?
user1367204
Vous ne devez utiliser que le premier calque masqué. Après une couche, les autres poids ne sont pas plus liés à une entrée qu'à une autre. J'ai légèrement modifié la réponse pour clarifier cela.
Sam Marinelli
Je me suis souvenu d'une autre approche et l'ai ajoutée à la réponse.
Sam Marinelli
11

Une solution un peu brutale mais efficace:

Essayez de «supprimer» une entrée en utilisant une constante pour l'une de vos fonctionnalités d'entrée. Ensuite, entraînez le réseau pour chacun des cas possibles et voyez comment votre précision diminue. Les entrées importantes fourniront le plus grand avantage à la précision globale.

rhadar
la source
C'est certainement une possibilité.
SmallChess
6
Il y a cependant un piège: même si une fonctionnalité est extrêmement importante, s'il y en a une autre fortement corrélée à la première, aucune ne sera considérée comme importante par vos critères (l'absence du premier est compensée par la présence de ce dernier, bien que moins informative mais des fonctionnalités plus «uniques» apparaîtront plus importantes de cette façon)
Firebug
Ceci est parfois appelé test d'ablation (plus spécifiquement de micro ablation)
Veltzer Doron
7

Ce que vous avez décrit n'est pas un "réseau profond", où vous n'avez que entrées et unités en couche cachée. Lorsque les gens parlent d'apprentissage en profondeur, cela signifie généralement des centaines de milliers d'unités cachées.5105

Pour un réseau peu profond, cela donne un exemple de définition de l'importance variable.

Pour un réseau vraiment profond, les gens ne parlent pas trop d'importance variable. Parce que les entrées sont des fonctionnalités de niveau brut, telles que des pixels dans une image.

Haitao Du
la source
J'ai modifié mon commentaire pour refléter ce que je voulais dire. Je voulais dire 20 nœuds dans la première couche, pas 5 nœuds. Grande part et merci pour distinguer les filets peu profonds / profonds.
user1367204
9
@ hxd1011 ne pas être prude pédant, mais profond signifie plus de couches et non des milliers d'unités cachées :).
Rafael
3

Le plus que Ive a trouvé à ce sujet est minutieusement répertoriés sur ce site plus précisément vous pouvez regarder ce . Si vous ne parlez que de modèles linéaires, vous devez normaliser les poids pour les rendre interprétables, mais même cela peut être plus trompeur à ce sujet sur le lien mentionné. Certaines personnes ont essayé de faire des fonctions complexes de poids pour interpréter l'importance des entrées (Garson, Gedeon et Milne), mais même cela peut être trompeur, vous pouvez en savoir plus une fois que vous faites défiler le premier lien que j'ai mentionné. En général, je conseillerais d'aller de l'avant interpréter les résultats avec un grain de sel.

serait d'accord avec la réponse de @ rhadar mais voudrait ajouter qu'au lieu d'utiliser une constante, essayez d'utiliser la valeur moyenne pour cette entrée et n'oubliez pas de recycler le réseau.

PS: désolé, je n'ai pas pu poster plus de liens ou de commentaires ici n'ont pas beaucoup de réputation.

Vaibhav Arora
la source
1

Étant donné que vous avez:

  1. Une tâche de classification
  2. Un modèle formé
  3. Fonctionnalités normalisées (entre 0 et 1)

Quelqu'un a-t-il essayé:

  1. Remettre à zéro les préjugés
  2. Passez à chaque fois en tant qu'unités un vecteur chaud où toutes les entités sont nulles sauf un.
  3. Examinez la sortie.

Dans ce cas, je pense que la sortie serait un nombre désignant l '"importance" de la fonction car cette sortie représenterait également la sortie du chemin de ce 1 signal à l'intérieur du réseau.

C'est comme allumer une seule ampoule à l'intérieur d'un labyrinthe et mesurer la lumière qui sort à la sortie.

Δημητρης Παππάς
la source
Je ne pense pas que cela aiderait beaucoup. Ce que vous aimeriez évaluer, c'est dans quelle mesure la variation de cette entrée affecterait la sortie (seule ou en combinaison avec d'autres fonctionnalités)
elachell