Comment combiner des fonctionnalités d'entrée catégorielles et continues pour la formation d'un réseau de neurones

16

Supposons que nous ayons deux types de fonctions d'entrée, catégoriques et continues. Les données catégorielles peuvent être représentées sous la forme d'un code unique A, tandis que les données continues ne sont qu'un vecteur B dans un espace à N dimensions. Il semble que le simple fait d'utiliser concat (A, B) n'est pas un bon choix car A, B sont des types de données totalement différents. Par exemple, contrairement à B, il n'y a pas d'ordre numérique dans A. Donc ma question est de savoir comment combiner ces deux types de données ou existe-t-il une méthode conventionnelle pour les gérer.

En fait, je propose une structure naïve telle que présentée dans l'image

entrez la description de l'image ici

Comme vous le voyez, les premières couches sont utilisées pour changer (ou mapper) les données A en une sortie intermédiaire dans un espace continu et elles sont ensuite concaténées avec les données B qui forment une nouvelle entité d'entrée dans l'espace continu pour les couches ultérieures. Je me demande si c'est raisonnable ou si c'est juste un jeu "d'essai et d'erreur". Je vous remercie.

JunjieChen
la source

Réponses:

5

Il existe trois approches principales pour résoudre ce problème:

  1. Création de deux modèles séparément, puis formation d'un algorithme d'ensemble qui reçoit la sortie des deux modèles en entrée
  2. Concentrer toutes les données dans un seul vecteur / tenseur en tant qu'étape de prétraitement, puis former une simple entrée unique NN
  3. L'architecture NN à entrées multiples que vous proposiez

L'approche d'ensemble est l'option la plus simple et donnera des résultats décents, cependant, elle ne fonctionnera pas aussi bien que l'option que vous avez proposée car le réseau d'ensemble ne reçoit que les probabilités de classe des deux réseaux en entrée et le fera par rapport à votre approche passer à côté de relations plus complexes entre les types de données.

La deuxième approche n'est en théorie pas si différente de l'approche que vous proposez, à la différence près qu'elle suppose que le réseau déterminera à lui seul que l'entrée se compose de deux types de données (car elles sont toutes deux dans le même vecteur / tenseur). ). Il faudra beaucoup de temps de formation pour que le réseau apprenne cela et vous pourriez rester coincé dans un minimum local avant même que cela ne se produise.

Sur la base de mon expérience personnelle, le réseau que vous avez proposé est la meilleure option et il est susceptible d'avoir le temps de train le plus court et une fois que vous aurez l'architecture correcte, vous trouverez très facile de former et d'entretenir (recycler) le réseau en production ainsi que vous n'aurez jamais à recycler qu'un seul modèle.

Tadej Magajna
la source
0

J'utilisais la structure naïve que vous proposiez depuis un certain temps maintenant. Dans un problème bien cadré et avec suffisamment de données, ce type d'architecture fonctionne plutôt bien. Cependant, voici quelques choses que j'ai apprises:

  1. Les algorithmes basés sur des arbres (RF, XGB) fonctionnent généralement bien avec des classes mixtes, sauf si vous avez des exigences de sortie spécifiques ou une fonction de perte qui est plus facile à implémenter via des réseaux de neurones.
  2. Si l'utilisation d'un réseau de neurones est décidée, cette architecture fonctionne mieux par rapport à d'autres types de méthodes de codage de chaînes.
  3. Cette approche fonctionne également avec des données de séries chronologiques en entrée mixtes - bien mieux que toutes les approches classiques de séries chronologiques.

La conception clé serait la couche de concaténation et où voudriez-vous la mettre dans l'architecture. L'utilisation de couches d'intégration vous offre également l'avantage supplémentaire d'utiliser ces intégrations apprises dans certaines autres tâches / visualisations.

Ce type d'architecture a été utilisé dans les compétitions de Kaggle [1] et est également enseigné dans le cours Fast.ai par le professeur Jeremy Howard [2].

  1. https://yashuseth.blog/2018/07/22/pytorch-neural-network-for-tabular-data-with-categorical-embeddings/
  2. https://www.fast.ai/2019/01/24/course-v3/
Soumyajit
la source