2013-02-28 4 views
4

J'ai un réseau de neurones avec N noeuds d'entrée et N noeuds de sortie, et peut-être plusieurs couches cachées et récurrences, mais oublions les premiers. Le but du réseau de neurones est d'apprendre une variable N-dimensionnelle Y *, donnée N-dimensionnelle X. Disons que la sortie du réseau neuronal est Y, qui devrait être proche de Y * après l'apprentissage. Ma question est la suivante: est-il possible d'obtenir l'inverse du réseau de neurones pour la sortie Y *? C'est-à-dire, comment puis-je obtenir la valeur X * qui donnerait Y * lorsqu'il est placé dans le réseau de neurones? (ou quelque chose de proche)l'inverse local d'un réseau de neurones

Une grande partie du problème est que N est très grand, typiquement de l'ordre de 10000 ou 100000, mais si quelqu'un sait comment résoudre cela pour les petits réseaux sans récurrences ou couches cachées cela pourrait déjà être utile. Je vous remercie.

Répondre

1

Il s'agit d'une tâche qui peut être résolue avec autoencoders. Vous pourriez également être intéressé par des modèles génératifs comme les machines restreintes de Boltzmann (RBMs) qui peuvent être empilées pour former des réseaux de croyances profondes (DBNs). Les RBM construisent un modèle interne h des données v qui peuvent être utilisées pour reconstruire v. Dans les DBN, h de la première couche sera v de la deuxième couche et ainsi de suite.

2

Si vous pouvez choisir le réseau de neurones de manière à ce que le nombre de nœuds dans chaque couche soit le même et la matrice de pondération non singulière et la fonction de transfert inversible (par exemple relu), la fonction sera inversible.

Ce type de réseau neuronal est simplement une composition de multiplication matricielle, d'addition de biais et de fonction de transfert. Pour inverser, il vous suffit d'appliquer l'inverse de chaque opération dans l'ordre inverse. C'est à dire. prenez la sortie, appliquez la fonction de transfert inverse, multipliez-la par l'inverse de la dernière matrice de poids, moins le biais, appliquez la fonction de transfert inverse, multipliez-la par l'inverse de la seconde matrice de poids, etc. .

0

zenna a raison. Si vous utilisez des fonctions d'activation bijective (inversible) vous pouvez inverser couche par couche, soustraire le biais et prendre la pseudo-inverse (si vous avez le même nombre de neurones par couche, c'est aussi l'inverse exact) . Pour répéter les conditions: dim (X) == dim (Y) == dim (layer_i), det (Wi) non = 0

Un exemple: Y = tanh (W2 * tanh (W1 * X + b1) + b2) X = W1p * (tanh^-1 (W2p * (tanh^-1 (Y) - b2)) -b1), où W2p et W1p représentent respectivement les matrices pseudo-inverses de W2 et W1.

+0

Avez-vous des informations sur la stabilité numérique d'une telle approche? Il me semble que ça pourrait aller horriblement mal. –

+0

Oui, il pourrait, par exemple. if | W2p * (tanh^-1 (Y) - b2) |> 1 l'argument de la fonction serait hors tanh^-1 (\ cdot) domain. –

0

Le paper suivant est une étude de cas en inversant une fonction apprise à partir de réseaux neuronaux. C'est une étude de cas de l'industrie et un bon début pour comprendre comment régler le problème.

Questions connexes