Est-il possible de faire fonctionner un réseau de neurones sur un microcontrôleur

23

Pourriez-vous implémenter un réseau neuronal simple sur un microprocesseur tel que l'Arduino Uno à utiliser dans l'apprentissage automatique?

Jordan
la source
2
Par curiosité, pourquoi voudriez-vous?
Josh Vander Hook
1
Je ne suis pas un expert dans ce domaine, mais pour la dernière fois que j'ai entendu, la formation du NN a été faite en simulation, et le NN a été implémenté sur un châssis, et probablement un avec un contrôleur de niveau supérieur à l'Arduino.
Josh Vander Hook,
1
Eh bien, vous n'avez pas besoin de le lier, vous entraînez simplement le NN en simulation, puis vous extrayez la topologie du NN, y compris les poids de bord et les liens de nœud. Ensuite, vous programmez le NN (c'est juste une équation que vous devez résoudre). Je pense qu'il semble qu'un peu plus de recherche soit nécessaire avant de vous lancer dans ce projet.
Josh Vander Hook
1
Il vaut probablement la peine de mentionner que j'ai 16 ans et c'est mon travail majeur en électronique pour le lycée.
Jordan
1
Dans ce cas, je suppose que vous allez au-delà de l'appel du devoir en essayant de mettre en œuvre cela?
Joe Baker

Réponses:

10

Pourriez-vous former un réseau neuronal sur un microcontrôleur? Peut-être, mais n'essayez pas. Pourriez-vous utiliser un NN pour la classification, etc. sur un microcontrôleur? Bien sûr, tant que vous pouvez calculer le résultat de la propagation des valeurs de nœud et de bord et gérer les multiplications.

Josh Vander Hook
la source
1
Je suis d'accord. En supposant que vous puissiez obtenir un réseau de neurones de la complexité requise pour vous entraîner sur l'Arduino, vous serez toujours prêt pour un temps fou de formation. La formation hors-bord du NN est la voie logique à suivre.
fgb
23

Il est certainement possible de l'implémenter sur un Arduino. Voici 3 bibliothèques Arduino de ce type qui implémentent des réseaux de neurones:

La complexité du réseau que l'Arduino peut gérer est une question distincte, en particulier en ce qui concerne la formation - des dizaines de milliers d'itérations sur les données de formation. S'entraîner sur une machine rapide puis copier les poids des neurones sur l'Arduino sera un moyen plus intelligent de développer votre implémentation.

Ian
la source
5

Oui. Si vous ne l'exécutez qu'en mode feed-forward et que vous effectuez votre entraînement hors ligne ailleurs:

J'ai programmé un ANN à action directe à 3 couches (5-5-2) sur un Arduino UNO. Il a fonctionné sur un robot mobile. Chaque fois que le robot heurtait quelque chose, il réentraînait le réseau. La portion à action directe du filet a fonctionné en temps réel; tandis que la formation de rétropropagation a pris de l'ordre de ~ 5 à 20 secondes. Je suppose que vous pouvez réduire la taille du réseau ainsi que le jeu avec les paramètres pour le faire fonctionner un peu plus rapidement, mais si vous prévoyez de faire une rétropropagation sur un Arduino, je pense que ce serait trop lent.

Voici quelques idées pour accélérer les choses:

  • Utiliser une virgule fixe ou flottante (pour les microcontrôleurs sans FPU)
  • Utilisez un MCU doté d'un FPU
  • tanh
  • Faire en sorte que la phase de formation se déroule hors ligne sur un PC

Voici un bref compte rendu que j'ai fait du réseau.

Yahma
la source
3

Oui en effet, il est possible d'intégrer un réseau neuronal dans des microcontrôleurs. Il existe de nombreux exemples de cela dans la littérature scientifique, mais je peux citer un exemple frappant de ce qui peut être fait avec un MCU très simple si vous êtes assez intelligent. Dans Evolutionary Bits'n'Spikes , les auteurs décrivent la mise en place d'un réseau neuronal de dopage en temps réel ET d'un algorithme génétique pour le former, afin de contrôler un robot à roue différentielle. L'ensemble du code s'exécute dans un minuscule microcontrôleur PIC16F628 4 MHz intégré au robot Alice de 1 pouce cube.

abey
la source