Ist es möglich, ein neuronales Netzwerk auf einem Mikrocontroller zu betreiben

23

Könnten Sie ein einfaches neuronales Netzwerk auf einem Mikroprozessor wie dem Arduino Uno implementieren, das beim maschinellen Lernen verwendet werden soll?

Jordan
quelle
2
Warum möchten Sie aus Neugier?
Josh Vander Hook
1
Ich bin kein Experte auf diesem Gebiet, aber das letzte Mal habe ich gehört, dass das Training des NN in Simulation durchgeführt wurde und der NN auf einem Chassis implementiert wurde und wahrscheinlich mit einem übergeordneten Controller als dem Arduino.
Josh Vander Hook
1
Nun, Sie müssen es nicht verknüpfen, Sie trainieren einfach den NN in der Simulation und extrahieren dann die Topologie des NN, einschließlich Kantengewichten und Knotenverknüpfungen. Dann programmieren Sie die NN (es ist nur eine Gleichung, die Sie lösen müssen). Ich denke, es hört sich so an, als ob ein bisschen mehr Forschung nötig ist, bevor Sie dieses Projekt aufnehmen.
Josh Vander Hook
1
Es ist wahrscheinlich erwähnenswert, dass ich 16 bin, und dies ist meine Hauptarbeit in der Elektronik für die High School.
Jordan
1
In diesem Fall gehe ich davon aus, dass Sie bei dem Versuch, dies umzusetzen, über die Pflicht hinausgehen?
Joe Baker

Antworten:

10

Könnten Sie ein neuronales Netzwerk auf einem Mikrocontroller trainieren ? Vielleicht, aber bitte versuche es nicht. Könnten Sie eine NN für die Klassifizierung usw. auf einem Mikrocontroller verwenden? Sicher, solange Sie das Ergebnis der Weitergabe der Knoten- und Kantenwerte berechnen und die Multiplikationen verarbeiten können.

Josh Vander Hook
quelle
1
Ich stimme zu. Angenommen, Sie können auf dem Arduino ein neuronales Netzwerk mit der erforderlichen Komplexität für das Training aufbauen, dann werden Sie immer noch wahnsinnig viel Trainingszeit haben. Off-Board-Training des NN ist der logische Weg.
fgb
23

Es ist sicherlich möglich, dies auf einem Arduino zu implementieren. Hier sind drei solcher Arduino-Bibliotheken, die neuronale Netze implementieren:

Die Komplexität des Netzwerks, mit dem der Arduino umgehen kann, ist eine andere Frage, insbesondere im Hinblick auf das Training - Zehntausende Iterationen von Trainingsdaten. Das Training auf einer schnellen Maschine und das anschließende Kopieren der Neuronengewichte auf das Arduino ist eine intelligentere Methode, um Ihre Implementierung zu entwickeln.

Ian
quelle
5

Ja. Wenn Sie es nur im Feed-Forward-Modus ausführen und Ihr Training offline an einem anderen Ort durchführen:

Ich habe eine 3-lagige (5-5-2) Feedforward-ANN auf einem Arduino UNO programmiert. Es lief auf einem mobilen Roboter. Wann immer der Roboter etwas traf, trainierte er das Netzwerk neu. Der Feedforward-Teil des Netzes lief in Echtzeit. während das Rückentraining in der Größenordnung von ~ 5 bis 20 Sekunden dauerte. Ich nehme an, Sie könnten die Größe des Netzwerks sowie das Spiel mit den Parametern verringern, um es ein bisschen schneller laufen zu lassen, aber wenn Sie vorhaben, auf einem Arduino eine Backpropagation durchzuführen, wäre dies meiner Meinung nach zu langsam.

Einige Gedanken, um die Dinge zu beschleunigen, sind:

  • Verwenden Sie Fixed vs Floating Point (für MCUs ohne FPU)
  • Verwenden Sie eine MCU mit einer FPU
  • Tanh
  • Lassen Sie die Trainingsphase offline auf einem PC ablaufen

Hier ist eine kurze Beschreibung des Netzwerks.

Yahma
quelle
3

Ja, es ist möglich, ein neuronales Netzwerk in Mikrocontroller einzubetten. Es gibt viele solcher Beispiele in der wissenschaftlichen Literatur, aber ich kann ein eindrucksvolles Beispiel dafür anführen, was mit einer sehr einfachen MCU getan werden kann, wenn Sie klug genug sind. In Evolutionary Bits'n'Spikes beschreiben die Autoren die Implementierung eines Echtzeit-Spiking-Neuronalen Netzwerks UND eines genetischen Algorithmus, um es zu trainieren, um einen Differentialradroboter zu steuern. Der gesamte Code läuft in einer winzigen 4-MHz-MCU PIC16F628, die in den 1-Kubik-Zoll-Alice-Roboter eingebettet ist.

abey
quelle