Partage
  • Partager sur Facebook
  • Partager sur Twitter

réseaux de neurones ou théorie des automates ?

    9 janvier 2018 à 9:56:53

    Bonjour,

    J'ai besoin d'un algorithme pour faire de la reconnaissance de motif dans un signal provenant d'un accéléromètre. Aujourd'hui j'ai le choix entre les réseaux de neurones et les automates. De plus, je dois m'orienter vers la solution la moins couteuse en calcule puisque l’application final doit être embarqué et donc consommer le moins possible.

    Je sais que les réseaux de neurones peuvent rapidement être couteux si les données en entrée sont nombreuse mais dans mon cas, le signal est échantillonné à 200 Hz voir en dessous (ce n'est pas encore défini) et est fenêtré avec un fenêtre glissante de 0.5 second max (taille pas encore définie). Donc mes données en entrée du réseaux contiendrait maximum 50 échantillons. De plus, le réseaux disposerait d'une seul sortie étant donnée qu'il y a qu'un seul motif à reconnaitre. reste a définir une couche intermédiaire, mais dans la mesure ou le motif à reconnaitre n'est pas compliqué (mais variant un peut tout de même et pouvant être confondue avec d'autre), cette couche ne devrait pas être énorme je pense (20 neurones max ?). J'ai donc 3 couche : 50 neurones d'entrée, 20 neurones intermédiaire et 1 de sortie. On peut donc facilement avoir une idée de la quantité de calcul nécessaire pour un passage.

    En revanche, quand vient la question des automates, je n'y connait pas grand chose. Je trouve ça bien plus obscure que les réseaux de neurones. j'aimerais donc savoir si quelqu'un peut m'apporter une comparaison, même rapide, pour que je puisse me renseigner plus efficacement par la suite. Comment ça marche (même si j'ai un vague idée) ? Comment connaitre la quantité de calcul nécessaire ? est ce qu'il y a une des deux solutions qui est d'avance moins couteuse considérant mon cas ? est-ce que l’apprentissage et long avec un automates ? le quel, apriori, et le plus efficace pour la reconnaissance ?

    -
    Edité par adrien050356 9 janvier 2018 à 10:02:44

    • Partager sur Facebook
    • Partager sur Twitter
      9 janvier 2018 à 11:10:32

      Salut ! Je ne vais pas vraiment pouvoir répondre à ton intérogation sur les automates, mais pour les réseaux de neurones, une question me vient à l'esprit.

      Je pense qu'en effet un réseau de neurones peut être adapté à la situation, j'ai déjà vu ce type d'application. Il existe des réseaux capables de "reconnaitre" un grand nombre d'objets en temps réél via une caméra. Donc un "simple signal" ne devrait pas poser de problème. Selon moi ici la difficulté ici viendrait plutôt pour la création du réseau.

      Si je me souviens bien de ce que j'avais lu, il faudrait un réseau à base de convolutions, qui nécessite une base de données labelisée pour son entrainement. J'entends par là, un nombre suffisant de signaux où l'on peut reconnaitre le motif, pour que le réseau puisse "l'apprendre". As-tu une telle base ? Si oui (et même si non...) tu peux regarder les tutoriels de TensorFlow.

      J'espère que ce petit commentaire pourra t'aider, bon courage !

      • Partager sur Facebook
      • Partager sur Twitter
        9 janvier 2018 à 13:03:51

        Je suis un peu rodé sur les réseaux de neurones, donc je te confirme que c'est possible,mais je te remercie pour ta réponse :).

        les réseaux convolutifs conviennent bien pour des images ou des données complexe. De plus, c'est quelque chose qui a besoin de pas mal de puissance de calcul, même une fois entrainé. Enfin tout dépends de la taille du réseaux évidement.

        Dans mon cas, un simple réseaux à trois couches devrait faire l'affaire. Mais l'application final doit consommé le moins possible. Je cherche donc a comprendre plus en détails les automates pour avoir la possibilité de comparer les deux solution.

        • Partager sur Facebook
        • Partager sur Twitter
          9 janvier 2018 à 13:35:16

          Regarde les AFD et les AFN (automate fini déterministe et non déterministe)
          Tu feras rapidement le lien avec ce que tu connais dans les réseaux de neurones.

          • Partager sur Facebook
          • Partager sur Twitter
            12 janvier 2018 à 23:00:02

            Salut,

            Les automates ne sont capables de reconnaître que des expressions régulières, du coup je ne vois pas trop comment tu voudrais t'en servir pour reconnaître un signal. A priori les réseaux de neurones sont plus adaptés, la taille du réseau que tu proposes me semble tout à fait acceptable pour un système embarqué. Sinon tu peux aussi regarder du côté des one-class SVM, ou alors tu peux aussi essayer de faire ta propre tambouille sur des fonctions de corrélation.

            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2018 à 11:57:55

              J'ai déjà vue une architecture qui proposait de la reconnaissance de motifs à partir d'un automate, mais le motifs devait peut varier et l’échantillonnage était particulier. Il s'agissait d'un échantillonnage par traversé de niveau où chaque niveau correspond à une transition au sein de l'automate. Mais je suis entrain d'abandonner l'idée après avoir lu des trucs dessus. Ça me semble peut viable pour mon application dans la mesure ou le motifs sera assez variables.

              Concernant les SVM, j'ai commencé à m'y intéresser aussi, en revanche je trouve que ça demande nettement plus de de calcul que les réseaux de neurones dans la mesure où les SVM comparent le nouveau motif avec un partie des données d'entrainement, et je suis assez limité en puissance de calcul. qu'en penses tu ?

              Je me suis intéressé au ACP aussi. J'ai eu des premiers résultat intéressant, mais là encore, j'ai besoin d'un vecteur de donnée assez conséquent pour que l'ACP fonctionne.

              En fait mon choix final repose essentiellement sur la puissance de calcul nécessaire et le taux de réussite de l’algorithme.

              • Partager sur Facebook
              • Partager sur Twitter
                17 janvier 2018 à 2:04:04

                Je suis un peu étonné par ce que tu me dis à propos de l'architecture avec automate, comme je te disais un automate peut reconnaître les expressions régulières du type ab*(d?.)|a, mais ça ne va pas chercher bien loin. Notamment, la regex est non adaptable (sauf si tu reprogrammes l'automate, bien sûr). Si tu as plus de détails ça m'intéresse.

                Pour les SVM, en fait ce qu'il se passe c'est que pour classer un objet, le SVM va effectuer un produit scalaire entre cet objet et le vecteur normal de l'hyperplan séparateur. Sauf qu'on peut optimiser en ne considérant que quelques coefficients de cet hyperplan, liés aux les vecteurs support (je t'avoue que j'ai oublié les détails). Je n'ai pas de chiffre sous la main, ni vraiment d'expérience dans le sujet, mais je ne pense pas qu'il y ait énormément de vecteurs support pour un problème donné. Et quand bien même tu aurais 50 vecteurs support, ça reste toujours plus faible que le nombre de calculs à faire dans un réseau de neurones ! Sur le MLP que tu donnes en exemple, il y a plus de 1000 interconnexions, ça prend du temps aussi à calculer.

                Après, c'est vrai que l'entraînement des SVM est d'autant plus long qu'il y a beaucoup de données d'entraînement (implémentation naïve en O(N^3), avec N le nombre de données d'entraînement), là où le réseau de neurones commence à donner des résultats plus intéressants. Je ne sais pas si c'est ton cas. Si tu embarques le classificateur déjà entraîné, ce n'est pas un problème, mais sinon c'est plus tendax. De même, si tu fais de l'apprentissage en ligne (online training), c'est mieux de prendre un réseau de neurones, vu qu'un SVM tu seras obligé de repartir de zéro à chaque fois.

                Enfin, le plus simple est encore de faire un benchmark ^^ Tu prends une bibliothèque standard sur ton ordi, tu montes tes deux classificateurs, et tu regardes leurs performances sur un exemple typique de dataset que tu utiliseras par la suite. Si telle structure est plus performante sur ton ordi, elle le sera aussi sur ton système embarqué.

                • Partager sur Facebook
                • Partager sur Twitter
                  17 janvier 2018 à 15:12:24

                  Je te renvoie directement vers la thèse concernée si la question des automates t'intéresse :) :

                  https://tel.archives-ouvertes.fr/tel-01217996/document

                  Je pensais pas que les vecteurs supports pouvait être si peu nombreux pour les SVM, c'est intéressent. D'autant si chaque comparaisons se limite à un produit scalaire. Je vais comparer les deux algo en effets. J'ai déjà commencé à implémenter un réseaux de neurones.

                  Des données d'entrainement je n'en ais pas énormément en effet. Une méthode pour élargir l’ensemble d'apprentissage et d'appliquer une modification sur cet ensemble. du type ajout de bruit ou distorsion. tout en restant raisonnable pour ne pas biaiser l'apprentissage évidement. Je sais que cette méthode est efficace sur les réseaux de neurones mais je ne sais pas sur les SVM !?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 janvier 2018 à 16:55:02

                    En fait pour les SVM, l'équation de l'hyperplan c'est \(\sum_k \alpha_k^*\times l_k (\varphi(x) \cdot \varphi(x_k)) + w_0\) où les alpha sont les paramètres duaux, l_k les labels, phi ta fonction noyau. Sauf que si le point x_k n'est pas un vecteur support, alors alpha est nul, donc plus besoin de calculer le produit scalaire sur les vecteurs support.

                    Après il faut voir comment ça se complique quand on utilise un SVC plutôt qu'un SVM (ce que font toutes les bibliothèques, vu qu'un SVM ça plante s'il y a la moindre erreur de classification), mais je suis convaincu que ça devrait rester léger niveau calculs.

                    Merci pour la thèse. J'ai regardé rapidement, effectivement il a l'air d'arriver à quelque chose avec les automates probabilistes, mais je n'ai pas bien vu comment il créait ses automates. Si ça ne tenait qu'à moi je n'irai pas trop m'embêter avec cette méthode, je pense que tu auras d'assez bons résultats avec les autres méthodes.

                    Pour les déformations, oui bien sûr ça améliorera le taux de réussite des SVM aussi, mais justement l'avantage d'un SVM c'est de pouvoir généraliser correctement même avec un petit nombre de données d'entraînement. Du coup je t'invite à voir ce qui marchera le mieux pour toi. :)

                    -
                    Edité par melepe 17 janvier 2018 à 16:56:03

                    • Partager sur Facebook
                    • Partager sur Twitter

                    réseaux de neurones ou théorie des automates ?

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown