Est-il possible d'exécuter et d'entraîner un réseau neuronal sur un microcontrôleur 8 bits?

11

J'ai récemment lu sur les réseaux de neurones dans des environnements contraints (en particulier, une implémentation de réseau de neurones sur un microcontrôleur huit bits peu coûteux ) et leurs applications aux dispositifs IoT (par exemple, la régression pour prédire des choses en fonction des entrées des capteurs, etc.).

Cela semble idéal pour les applications simples où le traitement n'est pas critique en termes de temps et où les données à traiter seront relativement peu fréquentes. Cependant, d'autres recherches suggèrent que la formation d'un réseau de neurones dans un environnement à ressources limitées est une mauvaise idée (voir la réponse à Est-il possible de faire fonctionner un réseau de neurones sur un microcontrôleur ).

Est-ce que cela s'applique toujours à l'approche de Cotton, Wilamowski et Dündar que j'ai liée? Serait-il nécessaire de former un réseau conçu pour une faible utilisation des ressources sur un appareil plus puissant de mon réseau IoT?

Pour le contexte, si j'avais un capteur transmettant le réglage de chaleur, j'envisage un réseau neuronal tel que décrit dans l'article pour prédire le réglage de chaudière souhaité en fonction de cela et de l'heure de la journée, etc. Une formation serait utile pour changer le réseau neuronal sorties basées sur plus de données fournies par l'utilisateur. Cette question Quora décrit bien un scénario similaire et traite des détails de mise en œuvre d'un réseau de neurones, mais ma question est plus axée sur le fonctionnement du réseau sur l'actionneur lui-même.

Aurora0001
la source
Curios, avez-vous l'intention d'exécuter un réseau de neurones sur chaque nœud de capteur / actionneur ou sur un "cerveau" (semi-) centralisé (alors bien sûr, la restriction de 8 bits ne s'appliquerait pas nécessairement)?
Ghanima
@Ghanima si possible, j'aimerais le faire au nœud de l'actionneur pour économiser la couche supplémentaire de complexité, bien que je ne sois pas sûr que cela fonctionnerait avec les contraintes limitées.
Aurora0001
@ Aurora0001 Le contrôleur particulier que vous visitez ici n'est peut-être pas adapté pour former votre NN, mais il y a des efforts concertés dans le monde de la vision par ordinateur intégré pour faire exactement cela. Si vous essayez de trouver un microcontrôleur avec une architecture adaptée à de telles tâches, je vous suggère de vous tourner vers les sociétés développant ce type de matériel pour l'industrie de la vision par ordinateur. Je suis sûr que certains peuvent être réutilisés et adaptés à vos besoins. Un bon point de départ
grldsndrs
@grldsndrs fantastique, merci pour la référence. N'hésitez pas à le poster comme réponse supplémentaire si vous pensez que cela suffit (j'en serais certainement content)
Aurora0001
1
Un processeur 8 bits peut faire tout ce qu'un processeur de texte plus large peut, mais peut-être plus lentement (en fonction de la tâche). Cependant, les processeurs 8 bits ont tendance à avoir un espace d'adressage natif limité, ce qui signifie qu'ils doivent utiliser des moyens indirects pour gérer de très grandes mémoires, et dans le cas des microcontrôleurs, ils ont tendance à être livrés avec des quantités comparables de mémoire sur puce. Il y a de plus en plus peu de différence de coût au-delà du bas de gamme - le principal moteur du coût du MCU est sans doute la mémoire, pas la largeur de l'ALU.
Chris Stratton

Réponses:

9

Selon le premier article , la course n'est pas un problème. C'était le but. Seulement, il y a une limitation sur les poids maximum:

Actuellement, la limitation de l'architecture intégrée à ce microcontrôleur n'est limitée que par le nombre de poids nécessaires. Le réseau neuronal est actuellement limité à 256 poids. Cependant, pour la plupart des applications intégrées, ce poids de 256 ne devrait pas limiter le système.


En ce qui concerne la formation, pour autant que je comprends la mise en œuvre décrite, le contrôleur PIC reçoit les paramètres d'une source externe.

Les calculs avancés du réseau neuronal sont écrits de telle sorte que chaque neurone est calculé individuellement dans une série de boucles imbriquées. Le nombre de calculs pour chaque boucle et les valeurs pour chaque nœud sont tous stockés dans un tableau simple en mémoire.

[...]

Ces tableaux contiennent l'architecture et les poids du réseau. Actuellement, à des fins de démonstration, ces baies sont préchargées au moment de la programmation de la puce, mais dans la version finale, cela ne serait pas nécessaire. Le microcontrôleur pourrait facilement être modifié pour contenir un simple chargeur de démarrage qui utilise le port série RS232 intégré qui recevrait les données pour les poids et la topographie à partir d'un emplacement distant. Cela permettrait de modifier les poids ou même l'ensemble du réseau pendant que la puce est sur le terrain.

Je soupçonne que la formation est également effectuée en externe.

L'article donne également des références pour les entraîneurs de réseaux neuronaux qui ont probablement été utilisés pour déterminer les valeurs préprogrammées dans la mémoire du PIC.

Maintenant, j'ai examiné le premier qui décrit les architectures de réseau et les algorithmes à utiliser avec eux. Mais le logiciel Neural Network Trainer utilisé ici est implémenté dans MATLAB.

Actuellement, il existe très peu de logiciels de formation sur les réseaux neuronaux qui formeront des réseaux entièrement connectés. Ainsi, un paquet avec une interface utilisateur graphique a été développé dans MATLAB à cet effet. Ce logiciel permet à l'utilisateur de saisir facilement des architectures très complexes ainsi que les poids initiaux, les paramètres de formation, les ensembles de données et le choix de plusieurs algorithmes puissants.

Je dois mentionner que les réseaux entièrement connectés ont un nombre de poids inférieur pour une même tâche qu'une architecture couche par couche. Cela le rend plus adapté aux microcontrôleurs.

Je ne suis pas un expert en réseaux de neurones et c'est assez complexe, donc je peux me tromper, mais sur la base de ces articles, je dirais que l'approche de Cotton, Wilamowski et Dündar nécessite une plate-forme externe plus puissante pour effectuer la formation.


À propos de l'exécution d'un réseau neuronal sur un microcontrôleur, ST Microelectronics vient d'annoncer une boîte à outils STM32Cube.AI: convertir les réseaux neuronaux en code optimisé pour STM32 pour convertir les réseaux neuronaux pré-formés des bibliothèques populaires vers la plupart de leurs microcontrôleurs STM32.

Bence Kaulics
la source