web-dev-qa-db-fra.com

Comment les réseaux de neurones sont-ils utilisés lorsque le nombre d'entrées peut être variable?

Tous les exemples que j'ai vus de réseaux de neurones concernent un ensemble fixe d'entrées qui fonctionne bien pour les images et les données de longueur fixe. Comment gérez-vous les données de longueur variable telles que les phrases, les requêtes ou le code source? Existe-t-il un moyen de coder des données de longueur variable en entrées de longueur fixe tout en obtenant les propriétés de généralisation des réseaux de neurones?

56
Jeremy E

Vous extrayez généralement des fonctionnalités des données et les transférez au réseau. Il n'est pas conseillé de ne prendre que quelques données et de les alimenter sur le net. Dans la pratique, le prétraitement et le choix des fonctionnalités appropriées décideront de votre réussite et des performances du réseau neuronal. Malheureusement, à mon humble avis, il faut de l'expérience pour développer un sens à cela et ce n'est rien que l'on puisse apprendre d'un livre.

Résumant: "Déchets dedans, déchets dehors"

29
f3lix

J'y suis allé et j'ai fait face à ce problème. L'ANN a été conçu pour une longueur de vecteur d'entité fixe, tout comme de nombreux autres classificateurs tels que KNN, SVM, bayésien, etc., c'est-à-dire que la couche d'entrée doit être bien définie et non variée, c'est un problème de conception. Cependant, certains chercheurs optent pour l'ajout de zéros pour combler l'écart manquant, je pense personnellement que ce n'est pas une bonne solution car ces zéros (valeurs irréelles) affecteront les poids vers lesquels le filet convergera. en outre, il pourrait y avoir un vrai signal se terminant par des zéros.

ANN n'est pas le seul classificateur, il y en a de plus en plus comme la forêt aléatoire. ce classificateur est considéré comme le meilleur parmi les chercheurs, il utilise un petit nombre de caractéristiques aléatoires, créant des centaines d'arbres de décision en utilisant le bootstrap d'un bagging, cela pourrait bien fonctionner, le nombre des caractéristiques choisies est normalement le sqrt de la taille du vecteur de caractéristiques. ces caractéristiques sont aléatoires. chaque arbre de décision converge vers une solution, en utilisant des règles de majorité, la classe la plus probable sera alors choisie.

Une autre solution consiste à utiliser le DTW de déformation temporelle dynamique, ou mieux encore à utiliser les modèles HMM de Markov cachés.

Une autre solution est l'interpolation, interpoler (compenser les valeurs manquantes le long du petit signal) tous les petits signaux pour avoir la même taille que le signal max, les méthodes d'interpolation incluent et ne se limitent pas à la moyenne, B-spline, cubique ... .

Une autre solution consiste à utiliser la méthode d'extraction des fonctionnalités pour utiliser les meilleures fonctionnalités (les plus distinctives), cette fois-ci les rendre de taille fixe, ces méthodes incluent PCA, LDA, etc.

une autre solution consiste à utiliser la sélection des fonctionnalités (normalement après l'extraction des fonctionnalités) pour sélectionner facilement les meilleures fonctionnalités qui donnent la meilleure précision.

c'est tout pour le moment, si aucun de ceux qui travaillaient pour vous, contactez-moi.

29
Ahmad Hassanat

Certains problèmes pourraient être résolus par un réseau de neurones récurrent. Par exemple, il est bon pour calculer la parité sur une séquence d'entrées.

Le réseau de neurones récurrent pour le calcul de la parité n'aurait qu'une seule fonction d'entrée. Les bits pourraient y être introduits au fil du temps. Sa sortie est également renvoyée à la couche cachée. Cela permet d'apprendre la parité avec seulement deux unités cachées.

Un réseau neuronal à deux couches à action normale nécessiterait 2 ** unités cachées séquence_longueur pour représenter la parité. Ceci la limitation est valable pour toute architecture avec seulement 2 couches (par exemple, SVM).

18
Ivo Danihelka

Je suppose qu'une façon de le faire est d'ajouter une composante temporelle à l'entrée (réseau neuronal récurrent) et de diffuser l'entrée sur le réseau un morceau à la fois (en créant essentiellement l'équivalent du réseau neuronal d'un lexer et d'un analyseur), cela permettrait au l'entrée doit être assez grande, mais aurait l'inconvénient qu'il n'y aurait pas nécessairement un symbole d'arrêt pour séparer les différentes séquences d'entrée les unes des autres (l'équivalent d'une période en phrases)

2
Jeremy E

Pour utiliser un réseau neuronal sur des images de différentes tailles, les images elles-mêmes sont souvent recadrées et agrandies ou réduites pour mieux s'adapter à l'entrée du réseau. Je sais que cela ne répond pas vraiment à votre question, mais peut-être que quelque chose de similaire serait possible avec d'autres types d'entrée, en utilisant une sorte de fonction de transformation sur l'entrée?

1

je ne suis pas tout à fait sûr, mais je dirais, utilisez le nombre maximum d'entrées (par exemple pour les mots, disons qu'aucun mot ne dépassera 45 caractères (le plus long mot trouvé dans un dictionnaire selon wikipedia), et si un court Un mot est rencontré, définissez les autres entrées sur un caractère d'espacement.

Ou avec des données binaires, définissez-la sur 0. le seul problème avec cette approche est si une entrée remplie de caractères blancs/zéros/quoi que ce soit entre en collision avec une entrée valide de pleine longueur (pas autant un problème avec des mots qu'avec des nombres).

0
Zenon