È possibile eseguire e addestrare una rete neurale su un microcontrollore a 8 bit?


11

Di recente ho letto delle reti neurali in ambienti limitati (in particolare, un'implementazione di una rete neurale su un microcontrollore a otto bit economico ) e le loro applicazioni ai dispositivi IoT (ad es. Regressione per prevedere le cose in base agli ingressi dei sensori, ecc.).

Ciò sembra ideale per semplici applicazioni in cui l'elaborazione non è critica in termini di tempo e i dati da elaborare saranno relativamente poco frequenti. Tuttavia, ulteriori ricerche suggeriscono che la formazione di una rete neurale in un ambiente a risorse limitate è una cattiva idea (vedere la risposta a È possibile gestire una rete neurale su un microcontrollore ).

Questo vale ancora per l'approccio di Cotton, Wilamowski e Dündar che ho collegato? Sarebbe necessario formare una rete progettata per un utilizzo ridotto delle risorse su un dispositivo più potente nella mia rete IoT?

Per il contesto, se avessi un sensore che trasmette l'impostazione del calore, sto prendendo in considerazione una rete neurale come descritto nel documento per prevedere l'impostazione desiderata della caldaia in base a quella e l'ora del giorno, ecc. La formazione sarebbe utile per cambiare la rete neurale output basati su più dati forniti dall'utente. Questa domanda di Quora descrive bene uno scenario simile e discute i dettagli di implementazione di una rete neurale, ma la mia domanda è più focalizzata sul funzionamento della rete sull'attuatore stesso.


Curios, hai intenzione di gestire una rete neurale su ciascun nodo sensore / attuatore o in qualche "cervello" (semi) centralizzato (quindi ovviamente la restrizione a 8 bit non si applicherebbe necessariamente)?
Ghanima,

@Ghanima, se possibile, mi piacerebbe farlo sul nodo dell'attuatore per salvare il livello extra di complessità, anche se non sono sicuro che funzionerebbe con i vincoli limitati.
Aurora0001

@ Aurora0001 Il controller specifico che si trova qui potrebbe non essere adatto per addestrare il tuo NN ma, ci sono sforzi concertati nel mondo della visione computerizzata per fare esattamente questo. Se stai cercando di trovare un microcontrollore con un'architettura adatta a tali compiti, ti suggerisco di guardare alle aziende che sviluppano questo tipo di hardware per l'industria della visione artificiale. Sono sicuro che alcuni di essi possono essere riproposti e adattati alle tue esigenze. Un buon punto di partenza
grldsndrs il

@grldsndrs fantastico, grazie per il riferimento. Sentiti libero di postarlo come risposta aggiuntiva se ritieni che sia abbastanza (ne sarei sicuramente contento)
Aurora0001

1
Un processore a 8 bit può fare tutto ciò che un elaboratore di testi più ampio può, solo forse (dipende dall'attività) più lentamente. Tuttavia, i processori a 8 bit tendono ad avere uno spazio di indirizzamento nativo limitato, il che significa che devono utilizzare mezzi indiretti per gestire memorie molto grandi, e nel caso dei microcontrollori tendono a essere spediti con quantità relativamente piccole di memoria su chip. C'è una differenza di costo sempre più piccola oltre la fascia più bassa: il driver principale del costo MCU è probabilmente la memoria, non la larghezza ALU.
Chris Stratton,

Risposte:


9

Secondo il primo documento , la corsa non è un problema. Quello era lo scopo. Solo c'è una limitazione sui pesi massimi:

Attualmente la limitazione dell'architettura integrata in questo microcontrollore è limitata solo dal numero di pesi necessari. La rete neurale è attualmente limitata a 256 pesi. Tuttavia, per la maggior parte delle applicazioni integrate questo peso di 256 non dovrebbe limitare il sistema.


Per quanto riguarda la formazione, per quanto ho capito l'implementazione descritta, il controller PIC riceve parametri da una fonte esterna.

I calcoli forward della rete neurale sono scritti in modo tale che ogni neurone sia calcolato individualmente in una serie di loop nidificati. Il numero di calcoli per ciascun ciclo e i valori per ciascun nodo sono tutti memorizzati in un semplice array in memoria.

[...]

Questi array contengono l'architettura e i pesi della rete. Attualmente, a scopo dimostrativo, questi array sono precaricati al momento della programmazione del chip, ma nella versione finale ciò non sarebbe necessario. Il microcontrollore può essere facilmente modificato per contenere un semplice caricatore di avvio che utilizza la porta seriale RS232 integrata che riceve i dati per i pesi e la topografia da una posizione remota. Ciò consentirebbe di modificare i pesi o persino l'intera rete mentre il chip si trova sul campo.

Ho il sospetto che la formazione sia eseguita anche esternamente.

L'articolo fornisce anche riferimenti per i trainer di reti neurali che sono stati probabilmente utilizzati per determinare i valori preprogrammati nella memoria del PIC.

Ora, ho esaminato il primo che descrive le architetture di rete e gli algoritmi da usare con loro. Ma il software Neural Network Trainer utilizzato qui è implementato in MATLAB.

Attualmente, è disponibile pochissimo software di formazione per reti neurali che formerà reti completamente connesse. Pertanto a MATLAB è stato sviluppato un pacchetto con un'interfaccia utente grafica a tale scopo. Questo software consente all'utente di inserire facilmente architetture molto complesse, nonché pesi iniziali, parametri di allenamento, set di dati e la scelta di numerosi potenti algoritmi.

Devo dire che le reti completamente connesse hanno un numero di pesi inferiore per una stessa attività rispetto a un'architettura strato per strato. Ciò lo rende più adatto per i microcontrollori.

Non sono un esperto di reti neurali ed è piuttosto complesso, quindi posso sbagliarmi, ma sulla base di questi documenti direi che l'approccio di Cotton, Wilamowski e Dündar richiede una piattaforma esterna e più potente per eseguire l'addestramento.


A proposito della gestione di una rete neurale su un microcontrollore, ST Microelectronics ha appena annunciato un toolkit STM32Cube.AI: Converti reti neurali in codice ottimizzato per STM32 per convertire reti neurali pre-addestrate da librerie popolari alla maggior parte delle MCU STM32.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.