Passa ai contenuti principali

Democratizziamo il machine learning


L'articolo presenta i risultati di un'implementazione che combina il training di una rete neurale in Python con la sua esecuzione su un dispositivo embedded a risorse limitate per approssimare la funzione matematica sin(x).
La rete neurale utilizzata è del tipo feedforward (MLP) con una struttura semplice ma efficace.
Il layer di input accetta un singolo neurone che rappresenta il valore x in radianti. Questo viene processato attraverso un layer nascosto di 8 neuroni con attivazione tanh, per poi produrre un singolo output tramite un neurone con attivazione lineare che restituisce il valore sin(x).
Questa architettura 1-8-1 rappresenta un buon compromesso tra accuratezza e utilizzo di memoria, aspetto cruciale per dispositivi embedded molto economici.
Il training è stato effettuato su 1000 campioni uniformemente distribuiti nell'intervallo [0, 2π]. Questo range copre un ciclo completo della funzione seno, permettendo alla rete di apprendere l'intero pattern della funzione.
La funzione tanh nel layer nascosto è particolarmente adatta per questo compito, poiché la sua forma sigmoide permette di catturare efficacemente il comportamento ondulatorio della funzione seno.
Una delle parti più interessanti dell'esperimento è la conversione dei pesi addestrati in un formato utilizzabile dalla scheda. 
Lo script Python estrae automaticamente tutti i parametri del modello scrivendoli in un file header C/C++.
Il file generato contiene la matrice di pesi W1 con dimensioni [8][1] per il primo layer e il vettore di bias b1 con 8 elementi, seguiti dalla matrice di pesi W2 con dimensioni [1][8] per il secondo layer e dal vettore di bias b2 con un singolo elemento. 
Tutti i valori sono memorizzati come array statici const float, ottimizzando l'utilizzo della memoria flash del microcontrollore.
Il firmware deve implementare la forward propagation per calcolare l'output attraverso i layer successivi. L'attivazione tanh può essere implementata manualmente o tramite librerie matematiche disponibili. Una volta caricato, il sistema è in grado di effettuare inferenza in tempo reale, calcolando sin(x) per valori di input arbitrari.
Questo metodo offre velocità di esecuzione costante e prevedibile, senza dipendenze da librerie matematiche pesanti. Inoltre, permette di approssimare funzioni più complesse con lo stesso framework, mantenendo un'occupazione di memoria fissa e nota a priori.
Il modello, costruito utilizzando TensorFlow/Keras con l'ottimizzatore Adam, presenta un learning rate di 0.01. La funzione di loss è la Mean Squared Error (MSE) e il training configurato per 500 epoche con un batch size di 32 campioni.

Considerazioni sulle Prestazioni

Con soli 8 neuroni nascosti, la rete riesce ad approssimare efficacemente la funzione seno nell'intero intervallo di training. L'errore quadratico medio dopo il training è dell'ordine di 10⁻³ o inferiore, un'accuratezza più che sufficiente per la maggior parte delle applicazioni embedded.

Possibili Estensioni

Questo approccio può essere facilmente esteso per approssimare altre funzioni trigonometriche o matematiche complesse, implementare modelli più profondi per pattern più articolati, utilizzare la quantizzazione dei pesi per ridurre ulteriormente l'occupazione di memoria, o portare il codice su microcontrollori ancora più limitati in termini di risorse.

Conclusioni

Questo esperimento rappresenta, a mio avviso, un eccellente esempio di come le tecniche di machine learning possano essere democratizzate e rese accessibili anche su hardware con risorse limitate.
La combinazione di training offline in Python e inferenza embedded su piccole schede apre la porta a numerose applicazioni nell'IoT, nella robotica e nei sistemi embedded intelligenti. 

Post popolari in questo blog

Salmoni, scarpette, cetrioli e altro

Tutto il testo contenuto in questa pagina è stato pensato e scritto dall'autore del blog.   1. Come il salmone 2. Ooops! 3. Le scarpette hi-tech 4. Equivoci contemporanei 5. I saccenti 6. Medaglie di legno 7. La festività del Nulla 8. Gli aggiornamenti elettronici del Libro dell'Apocalisse 9. Dubbi ne ho 10. La maieutica del vulcaniano 11. Un piacevole vasetto di miele 12. Povere sfere 13. Caos comune mezzo gaudio 14. La fontana senza volti 15. Il piromane super beffardo 16. Boom di serpenti 17. Sistemi in via di degradazione 18. Il gatto nero 19. Alain Delon è ancora vivo? 20. Per sempre con i cani 21. Eventi imprevedibili 22. I robot sottomessi 23. Lady Gaga e Bruno Mars incantano 24. Definizioni mancate 25. Il mio nemico drone 26. Errore di valutazione 27. Ringraziamenti 28. Cari cetrioli, vi scrivo 29. Boom di detective 30. Gli UFO trascurati 31. Il grande salto delle rane 32. La malattia artificiale 33. Homo consumens 34. Lacune informatiche 35. Sei troppo! 36. ...

Generatore Markmap HD

Pagina per il download di  Memento Lite Generatore Markmap Avanzato - Specifiche per l'utente finale Scopo principale: l'applicazione “Generatore Markmap Avanzato” permette agli utenti di trasformare testo scritto in formato Markdown in mappe mentali interattive. Offre funzionalità per creare, visualizzare, salvare, modificare, gestire ed esportare queste mappe mentali in vari formati. Interfaccia utente: l'interfaccia è strutturata nelle seguenti sezioni principali: Link al blog esterno: un link “🌐 Visita il Blog: Pensieri d'assestamento” che apre il blog associato in una nuova scheda. Intestazione (Header): Titolo: “Generatore Markmap Avanzato”. Sottotitolo: “Trasforma, salva e condividi il tuo testo Markdown in mappe mentali interattive”. Area Principale dei Contenuti: divisa in due pannelli affiancati (o impilati su schermi piccoli): Pannello di Input (Editor Markdown): Titolo: “✏️ Editor Markdown”. Area di Testo: un campo multiriga dove l...

Neural Tic-Tac-Toe Lab

Questo articolo presenta l'implementazione di una rete neurale specializzata nel gioco del tris (tic-tac-toe), addestrata mediante una metodologia innovativa basata sull'enumerazione completa degli stati di gioco. L'approccio supera le limitazioni dei metodi tradizionali di campionamento casuale, garantendo una copertura totale dello spazio delle configurazioni possibili. Struttura della rete neurale La rete implementata utilizza un'architettura feed-forward compatta con 9 neuroni di input, 16 neuroni nel layer nascosto e 9 neuroni di output. I neuroni di input ricevono la rappresentazione numerica dello stato della board (-1, 0, 1 per ciascuna delle 9 caselle), mentre i neuroni di output producono valutazioni numeriche per ogni possibile mossa. Il layer nascosto utilizza 16 neuroni con funzione di attivazione relu per introdurre capacità di apprendimento non-lineare. La rete contiene complessivamente 297 parametri: 144 pesi per le connessioni input-hidden, 16 bi...