Réseau de neurones pour la régression à sorties multiples


12

J'ai un ensemble de données contenant 34 colonnes d'entrée et 8 colonnes de sortie. Une façon de résoudre le problème consiste à prendre les 34 entrées et à créer un modèle de régression individuel pour chaque colonne de sortie. Je me demande si ce problème peut être résolu en utilisant un seul modèle, en particulier en utilisant Neural Network.

J'ai utilisé un perceptron multicouche, mais qui nécessite plusieurs modèles, tout comme la régression linéaire. L' apprentissage de séquence en séquence 1 peut-il être une option viable? J'ai essayé d'utiliser TensorFlow, il ne semble pas pouvoir gérer les valeurs flottantes.

Toute suggestion pour résoudre ce problème en utilisant un seul modèle unifié utilisant spécialement un réseau de neurones sera appréciée.

  1. Ilya Sutskever, Oriol Vinyals et Quoc V. Le (2014). Apprentissage de séquence en séquence avec les réseaux de neurones. Advances in Neural Information Processing Systems , 27. ( pdf )

Quel est le problème?
TEG - Rétablir Monica le

1
(Pour tous les électeurs potentiels proches: Ce n'est pas une question de programmation. Ce serait hors sujet sur Stack Overflow .)
gung - Reinstate Monica

Pouvez-vous clarifier l'option "séquence à séquence" ici? Je ne sais pas si cela sera familier aux personnes qui travaillent avec des NN, mais ce n'est pas le cas pour moi.
gung - Rétablir Monica

Modélisation de séquence en séquence à l'aide de RNN. papers.nips.cc/paper/…
sjishan

Vous pouvez essayer MultiOutputRegressor (). Cela fonctionne pour ce type de problèmes
Subham Sarkar

Réponses:


7

Un réseau neuronal à résultats multiples prend la forme Si votre résultat a la dimension , alors aura la dimension .

Y=γ+V1Γ1+ϵV1=a(γ2+V2Γ2)V2=a(γ3+V3Γ3)VL1=a(γL+XΓL)
[ γ 1 , Γ 1 ] ( p V 1 + 1 ) × 8N×8[γ1,Γ1](pV1+1)×8

Ce qui veut dire que vous supposeriez que chaque résultat partage TOUS les paramètres dans les couches cachées, et n'a que des paramètres différents pour prendre la variable dérivée la plus élevée et la relier au résultat.

Est-ce une hypothèse réaliste pour votre contexte?


5

Au début, je pensais que le commentaire de generic_user était un spectacle, mais je viens de réaliser que ce n'est pas:

Si je forme d réseaux différents sur d sorties différentes, alors chacun sera adapté à cette dimension sans égard pour les autres.

Mais si je forme un réseau avec des sorties d et utilise toutes les sorties pour la rétropropagation, alors chaque poids dans chaque couche du réseau sera ajusté de sorte que toutes les sorties d soient plus précises.

C'est-à-dire: chaque paramètre de réseau sera ajusté par une somme de gradients (comment chaque sortie varie avec un " wiggle " dans ce paramètre) de sorte que l'ajuster dans le sens haut ou bas choisi donne une sortie plus précise dans l'ensemble - même si le réglage le poids de cette façon rend certaines dimensions de la sortie moins précises.

Donc, oui, la chose qui distingue finalement chaque sortie est juste une équation linéaire codée dans la dernière couche, mais en formant un réseau multi-sortie, chaque couche améliorera la présentation de cette dernière couche avec quelque chose qui lui permettra de mieux faire son travail . Il s'ensuit donc que les relations entre les sorties seront prises en compte par cette architecture.

Vous pourriez être en mesure de faire mieux qu'un réseau entièrement connecté en faisant en sorte que votre architecture reflète toutes les relations connues dans la sortie, tout comme les réseaux profonds font mieux que les réseaux peu profonds en exploitant les relations "compositionnelles" entre les entrées .


Une régression multivariée suppose qu'il existe une matrice de covariance (inconnue) qui relie les variables cibles entre elles. Êtes-vous en train de suggérer qu'il suffit d'avoir une seule couche dense pour capturer cette covariance sans avoir besoin d'inclure explicitement des couches cachées?
thecity2

Je suggère que les couches cachées doivent capturer une partie de cette covariance. Une couche de sortie dense à elle seule n'est qu'un ensemble de fonctions de régresseurs linéaires parallèles par activation. Aucune relation entre les sorties ne peut être établie lorsqu'il n'y a pas de couche cachée pour qu'elles s'accordent mutuellement et prennent en entrée / passent en entrée à d'autres nœuds de sortie.
Pavel Komarov

0

Vous pouvez le faire avec un seul réseau neuronal. Mais votre réseau de neurones devrait ressembler à ceci:
Couche d'entrée: 34 nœuds (un par votre colonne d'entrée)
Couche de sortie: 8 nœuds (un par votre colonne de sortie)

Vous pouvez ajouter autant et aussi grandes que les couches cachées que vous souhaitez dans le réseau neuronal. Ainsi, Neural Network génère 8 valeurs prédites et chaque valeur sera une régression différente des entrées.


quel paquet de quelle langue supporte donc ??
Arpit Sisodia

0

Je me demandais la même chose; voici mes idées:

Je suppose que si les sorties partagent certains modèles cachés, alors la formation peut bénéficier de l'apprentissage simultané de la régression pour toutes les sorties.

Il serait intéressant d'essayer une architecture où vous construisez un réseau neuronal pour chaque sortie, mais tous les réseaux neuronaux partagent certaines couches (les premières demi-couches par exemple). Ensuite, vous pourriez former chaque réseau de neurones en même temps: à l'intérieur de la boucle d'apprentissage, chaque réseau de neurones est formé une étape (avec un lot) séquentiellement.

Ce serait similaire au transfert de connaissances, mais avec la différence que dans le transfert de connaissances, chaque réseau neuronal est entièrement formé avant de réutiliser une partie de celui-ci pour former un autre réseau neuronal.

Je parie que quelqu'un y a déjà pensé, mais je n'y ai aucune référence.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.