Ist es möglich, ein neuronales Netzwerk auf einem 8-Bit-Mikrocontroller auszuführen und zu trainieren?

11

Ich habe kürzlich über neuronale Netze in eingeschränkten Umgebungen (insbesondere eine Implementierung eines neuronalen Netzes auf einem kostengünstigen Acht-Bit-Mikrocontroller ) und deren Anwendungen auf IoT-Geräte gelesen (z. B. Regression zur Vorhersage von Dingen basierend auf Sensoreingaben usw.).

Dies scheint ideal für einfache Anwendungen zu sein, bei denen die Verarbeitung nicht zeitkritisch ist und die zu verarbeitenden Daten relativ selten sind. Weitere Untersuchungen legen jedoch nahe, dass das Trainieren eines neuronalen Netzwerks in einer ressourcenbeschränkten Umgebung eine schlechte Idee ist (siehe die Antwort auf Ist es möglich, ein neuronales Netzwerk auf einem Mikrocontroller auszuführen ).

Gilt das immer noch für den Ansatz von Cotton, Wilamowski und Dündar, den ich verknüpft habe? Wäre es notwendig, ein Netzwerk, das für eine geringe Ressourcennutzung ausgelegt ist, auf einem leistungsstärkeren Gerät in meinem IoT-Netzwerk zu trainieren?

Wenn ich einen Sensor hätte, der die Wärmeeinstellung überträgt, erwäge ich ein neuronales Netzwerk, wie in der Veröffentlichung beschrieben, um die gewünschte Kesseleinstellung basierend auf dieser und der Tageszeit usw. vorherzusagen. Ein Training wäre nützlich, um das neuronale Netzwerk zu ändern Ausgaben basierend auf mehr vom Benutzer bereitgestellten Daten. Diese Quora-Frage beschreibt ein ähnliches Szenario gut und erläutert die Implementierungsdetails für ein neuronales Netzwerk. Meine Frage konzentriert sich jedoch mehr darauf, ob das Ausführen des Netzwerks auf dem Aktuator selbst funktionieren würde.

Aurora0001
quelle
Kuriositäten, beabsichtigen Sie, auf jedem Sensor- / Aktorknoten oder an einem (halb-) zentralisierten "Gehirn" ein neuronales Netzwerk zu betreiben (dann würde die 8-Bit-Beschränkung natürlich nicht unbedingt gelten)?
Ghanima
@ Ghana, wenn möglich, würde ich es gerne am Aktuatorknoten tun, um die zusätzliche Komplexitätsebene zu sparen, obwohl ich nicht sicher bin, ob dies mit den begrenzten Einschränkungen funktionieren würde.
Aurora0001
@ Aurora0001 Der bestimmte Controller, den Sie hier aufstellen, ist möglicherweise nicht zum Trainieren Ihres NN geeignet, aber in der eingebetteten Computer-Vision-Welt gibt es konzertierte Anstrengungen, um genau das zu tun. Wenn Sie versuchen, einen Mikrocontroller mit einer für solche Aufgaben geeigneten Architektur zu finden, sollten Sie sich an die Unternehmen wenden, die diese Art von Hardware für die Computer-Vision-Branche entwickeln. Ich bin sicher, dass ein Teil davon für andere Zwecke verwendet und an Ihre Anforderungen angepasst werden kann. Ein guter Anfang
grldsndrs
@grldsndrs fantastisch, danke für den Hinweis. Fühlen Sie sich frei, es als zusätzliche Antwort zu posten, wenn Sie der Meinung sind, dass es genug ist (ich würde sicherlich damit zufrieden sein)
Aurora0001
1
Ein 8-Bit-Prozessor kann alles, was ein breiteres Textverarbeitungsprogramm kann, nur möglicherweise (abhängig von der Aufgabe) langsamer. 8-Bit-Prozessoren haben jedoch tendenziell einen begrenzten nativen Adressraum, was bedeutet, dass sie indirekte Mittel verwenden müssen, um sehr große Speicher zu verwalten, und im Fall von Mikrocontrollern neigen sie dazu, mit vergleichsweise kleinen Mengen an On-Chip-Speicher zu liefern. Es gibt immer weniger Kostenunterschiede jenseits des niedrigsten Endes - der Haupttreiber der MCU-Kosten sind wohl Speicher, nicht die ALU-Breite.
Chris Stratton

Antworten:

9

Nach dem ersten Artikel ist das Laufen kein Problem. Das war der Zweck. Nur gibt es eine Begrenzung der Maximalgewichte:

Derzeit ist die Einschränkung der in diesen Mikrocontroller eingebetteten Architektur nur durch die Anzahl der benötigten Gewichte begrenzt. Das neuronale Netzwerk ist derzeit auf 256 Gewichte begrenzt. Für die meisten eingebetteten Anwendungen sollte dieses Gewicht von 256 das System jedoch nicht einschränken.


Was das Training betrifft, so empfängt der PIC-Controller, soweit ich die beschriebene Implementierung verstehe, Parameter von einer externen Quelle.

Die Vorwärtsberechnungen des neuronalen Netzwerks werden so geschrieben, dass jedes Neuron einzeln in einer Reihe verschachtelter Schleifen berechnet wird. Die Anzahl der Berechnungen für jede Schleife und die Werte für jeden Knoten werden alle in einem einfachen Array im Speicher gespeichert.

[...]

Diese Arrays enthalten die Architektur und die Gewichte des Netzwerks. Derzeit werden diese Arrays zu Demonstrationszwecken zum Zeitpunkt der Programmierung des Chips vorinstalliert, in der endgültigen Version wäre dies jedoch nicht erforderlich. Der Mikrocontroller kann leicht so modifiziert werden, dass er einen einfachen Bootloader enthält, der die integrierte serielle RS232-Schnittstelle verwendet, die die Daten für die Gewichte und die Topographie von einem entfernten Standort empfängt. Dies würde es ermöglichen, die Gewichte oder sogar das gesamte Netzwerk zu modifizieren, während sich der Chip im Feld befindet.

Ich vermute, dass das Training auch extern durchgeführt wird.

Das Papier enthält auch Referenzen für Trainer für neuronale Netze, die wahrscheinlich zur Bestimmung der im Speicher des PIC vorprogrammierten Werte verwendet wurden.

Jetzt habe ich mir die erste angesehen, die Netzwerkarchitekturen und Algorithmen beschreibt, die mit ihnen verwendet werden können. Die hier verwendete Neural Network Trainer-Software ist jedoch in MATLAB implementiert.

Derzeit ist nur sehr wenig Trainingssoftware für neuronale Netze verfügbar, mit der vollständig verbundene Netze trainiert werden können. Zu diesem Zweck wurde in MATLAB ein Paket mit einer grafischen Benutzeroberfläche entwickelt. Mit dieser Software kann der Benutzer auf einfache Weise sehr komplexe Architekturen sowie Anfangsgewichte, Trainingsparameter, Datensätze und die Auswahl mehrerer leistungsstarker Algorithmen eingeben.

Ich muss erwähnen, dass die vollständig verbundenen Netzwerke für dieselbe Aufgabe eine niedrigere Gewichtungszahl haben als eine Schicht für Schicht-Architektur. Das macht es besser für Mikrocontroller geeignet.

Ich bin kein Experte für neuronale Netze und es ist ziemlich komplex, so dass ich mich irren kann, aber basierend auf diesen Papieren würde ich sagen, dass der Ansatz von Cotton, Wilamowski und Dündar eine externe, leistungsfähigere Plattform erfordert, um das Training durchzuführen.


Über das Ausführen eines neuronalen Netzwerks auf einem Mikrocontroller hat ST Microelectronics gerade ein Toolkit STM32Cube.AI angekündigt : Konvertieren Sie neuronale Netzwerke in optimierten Code für STM32 , um vorab trainierte neuronale Netzwerke aus gängigen Bibliotheken in die meisten ihrer STM32-MCUs zu konvertieren .

Bence Kaulics
quelle