Le reti neurali, specialmente nel contesto del deep learning, sono costruite attraverso l’assemblaggio di vari tipi di strati: strati di input, strati nascosti e strati di output. Ognuno di questi svolge un ruolo cruciale nel processo di apprendimento e classificazione. Tra i numerosi strati, ad esempio, vi è il Softmax, utilizzato per convertire l’output finale in probabilità di appartenenza alle classi previste, mentre lo strato di output restituisce le etichette predette.
Una funzione essenziale in MATLAB è feedforwardnet(), che consente di creare una rete neurale feedforward con uno o più strati nascosti definiti dalla dimensione hiddenSizes e di specificare la funzione di addestramento tramite trainFcn. Questa funzione permette quindi di definire quante unità neuronali sono presenti in ogni strato e con quale algoritmo la rete verrà addestrata. Parallelamente, la funzione network() permette la creazione di reti personalizzate, cosiddette "shallow" o poco profonde, che possono essere istanziate sia senza parametri sia con una configurazione precisa di input, strati e connessioni. Attraverso costruttori flessibili, è possibile definire architetture specifiche e personalizzare ogni aspetto della rete.
L’addestramento delle reti in MATLAB avviene principalmente con la funzione trainNetwork(), che accetta dati di tipo immagini, sequenze o features e li utilizza per la classificazione o la regressione. Questa funzione è altamente versatile, gestendo differenti forme di input e risposte, come etichette di classe o valori numerici. In alternativa, trainnet() si concentra sull’addestramento delle reti profonde, permettendo di utilizzare funzioni di perdita specifiche e opzioni di training più dettagliate, così da adattarsi a scenari più complessi come sequenze temporali, classificazioni basate su caratteristiche estratte e persino combinazioni di tipi di dati diversi.
Un elemento cruciale per il controllo del processo di addestramento è la funzione trainingOptions(), che consente di definire opzioni dettagliate quali l’algoritmo di ottimizzazione (ad esempio sgdm, ovvero stochastic gradient descent with momentum), il numero massimo di epoche, la frequenza di validazione e le metriche da monitorare durante il training. Questi parametri permettono di bilanciare la velocità di apprendimento con la qualità della rete finale, oltre a facilitare il monitoraggio visivo dell’andamento del training.
Tra i vari strati di input, il sequenceInputLayer() assume un ruolo peculiare poiché è progettato per ricevere dati sequenziali o serie temporali. Questa funzione può essere utilizzata sia isolatamente che in combinazione con strati ricorrenti come LSTM (Long Short-Term Memory), permettendo la gestione di input dinamici di lunghezza variabile e normalizzazione dei dati in ingresso. Oltre a questo, esistono diversi altri tipi di strati di input per gestire immagini 2D, immagini 3D, dati tabellari (features), regioni di interesse per il riconoscimento di oggetti e formati di dati personalizzati, ciascuno ottimizzato per differenti tipologie di problemi di machine learning.
L’integrazione accurata di queste funzioni e strati permette di costruire modelli di deep learning robusti e altamente personalizzabili, capaci di adattarsi a molteplici scenari applicativi, dal riconoscimento di immagini alla classificazione di dati sequenziali complessi.
È importante che chi utilizza queste funzioni comprenda la relazione tra la struttura della rete, le tipologie di dati in input e le funzioni di addestramento, poiché una scelta errata in uno di questi aspetti può compromettere l’efficacia del modello. La personalizzazione delle opzioni di training e la selezione appropriata degli strati di input influenzano direttamente la capacità della rete di generalizzare dai dati di addestramento a quelli di test. Inoltre, la comprensione delle differenze tra le reti shallow e deep learning, così come la conoscenza delle proprietà architetturali, è fondamentale per progettare reti che siano efficienti e scalabili per problemi reali. Il controllo accurato di parametri come la normalizzazione, la dimensione dei batch e la frequenza di validazione è imprescindibile per evitare fenomeni come l’overfitting o un apprendimento insufficiente.
Come addestrare un agente PPO nell’ambiente Continuous Cart Pole utilizzando MATLAB Reinforcement Learning App
L’ambiente Continuous Cart Pole offre una rappresentazione continua dello spazio degli stati, strutturato in quattro dimensioni: posizione e velocità sia del carrello che del palo. Lo spazio delle azioni, al contrario, è discreto e unidimensionale, limitato a due forze applicabili: -1N e 1N. La simulazione di questo ambiente in MATLAB avviene tramite l’interfaccia Reinforcement Learning App, uno strumento integrato che consente di definire, addestrare, simulare e analizzare agenti di apprendimento per rinforzo con un’interazione grafica minimale.
Dopo aver selezionato l’ambiente Continuous Cart Pole, è possibile consultare la sua descrizione nel pannello di anteprima. La creazione dell’agente avviene cliccando sull’icona "New Agent", scegliendo come algoritmo PPO (Proximal Policy Optimization), e mantenendo il nome predefinito "agent1". Dopo la creazione, viene presentata una panoramica dell’agente, inclusa la configurazione degli iperparametri.
Nel pannello dedicato agli iperparametri, è necessario modificare il tasso di apprendimento (learn rate) dell’ottimizzatore critico a 0.001. Questa regolazione è fondamentale per assicurare una convergenza stabile durante l’addestramento. Successivamente, nel pannello Overview, si trovano le specifiche degli stati e delle azioni per l’agente.
La fase di addestramento si configura nel tab “Train”, dove si imposta il numero massimo di episodi a 1000. I criteri di interruzione automatica si basano sulla media dei passi per episodio nelle ultime cinque iterazioni, che deve superare 500. Avviando l’addestramento attraverso la voce "Train agent", il sistema apre il tab "Training Session" e visualizza l’andamento dell’addestramento in tempo reale. È sempre possibile interrompere il processo con i comandi "Stop" o "Stop Training".
Al termine, il sistema visualizza i risultati: la ricompensa per episodio in azzurro chiaro, la media della ricompensa in blu scuro, e Q0 in giallo. Per accettare il risultato dell’addestramento, si clicca su "Accept", aggiungendo così l’agente addestrato "agent1_Trained" al pannello Agents.
Per la simulazione, si accede al tab "Simulate", selezionando l’agente addestrato e lasciando le impostazioni di default: 10 episodi e una lunghezza massima per episodio di 500. Avviando la simulazione tramite l’icona "Simulate", si apre la sessione corrispondente e, al termine, i risultati vengono visualizzati con media e deviazione standard delle ricompense.
Per una lettura dettagliata dei dati, si accede al "Simulation Data Inspector" dal menu a discesa "Inspect Simulation Data". Qui, si possono selezionare e visualizzare tutti e quattro gli stati salvati per ogni episodio, come CartPoleStates(1,1) ~ CartPoleStates(4,1). I segnali vengono tracciati nella parte superiore del pannello. Dopo l’analisi, si può chiudere il pannello cliccando su “Close” e accettare i risultati simulativi cliccando "Accept", il che genera una struttura chiamata “experience1” nei risultati.
Per esportare l’agente addestrato, si fa doppio clic su "agent1_Trained" nel pannello Agents, quindi si seleziona "Export" nel tab Reinforcement Learning. L’agente viene trasferito nello spazio di lavoro MATLAB. La sessione può essere salvata con il nome “First_RL_App.mat” per un successivo riutilizzo o caricamento nell’App. Il file completo si trova anche nella directory fornita con il materiale didattico.
Oltre all’utilizzo di ambienti predefiniti come CartPole, MATLAB permette la costruzione di ambienti personalizzati, che diventano fondamentali nei casi reali, come nel controllo di motori DC. Gli ambienti vengono trattati come oggetti che interagiscono con l’agente attraverso metodi standard come step() e reset(). Il metodo reset() imposta le condizioni iniziali, mentre step() aggiorna lo stato in base all’azione presa e restituisce la nuova osservazione e la ricompensa. Una volta definito l’ambiente nell’ambiente di lavoro MATLAB, si possono estrarre le specifiche di osservazione e azione, che servono per generare un agente compatibile.
Inoltre, è possibile utilizzare le funzioni train() e sim() per avviare direttamente l’addestramento o la simulazione con l’agente e l’ambiente definiti. Questo flusso è essenziale per chi intende modellare ambienti specifici non contemplati nel catalogo predefinito, come impianti industriali, robotica o sistemi dinamici complessi.
È cruciale comprendere che la buona riuscita dell’addestramento non dipende solo dalla corretta configurazione dell’ambiente o dell’agente, ma anche dalla sintonizzazione fine degli iperparametri, dalla qualità della definizione del modello fisico nel caso di ambienti personalizzati, e dalla corretta interpretazione dei risultati di simulazione. I criteri di arresto e le metriche utilizzate devono essere coerenti con gli obiettivi dell’agente, mentre l’analisi delle traiettorie e dei segnali simulativi permette di affinare la politica di controllo o identificare comportamenti indesiderati. La gestione della sessione come oggetto persistente consente una continuità nel lavoro e facilita l’esplorazione di strategie alternative di addestramento e simulazione.
Come si valuta e interpreta un modello di classificazione audio basato su KNN?
La definizione del numero di caratteristiche (features) è il primo passo cruciale, stabilito tramite stime e indicato dall'array featureSelectionIdx. Successivamente, la funzione fitcknn() viene utilizzata per addestrare il modello audio con l'algoritmo KNN nel formato fitcknn(X, Y, Name-Value), dove l'opzione Standardize=true normalizza ogni colonna dei dati predittori centrando e scalando rispetto a media e deviazione standard.
Dopo l'addestramento, si procede con la valutazione del modello. Si richiama la funzione read() per caricare i dati di test contenuti nel dataset adsTest, con le informazioni complementari quali frequenza di campionamento, nomi dei file audio e etichette, presenti nella struttura xinfo. Per confermare la correttezza, si riproduce il suono dell’audio di test selezionato (di default il primo, tipicamente la cifra "0").
Per predire il suono testato, si estrae l’insieme completo delle caratteristiche tramite la funzione extract() e si applica predict() sul modello Mdl addestrato, utilizzando le feature selezionate tramite selectedFeatureIndex. L’etichetta reale del suono test è definita in base alle etichette originarie, mentre l’etichetta predetta viene convertita da array colonna cella a array categoria riga tramite categorical() e trasposizione. Successivamente, la funzione mode() determina l’etichetta predetta più frequente tra tutte quelle ottenute per ogni finestra temporale, individuando così la previsione finale.
L’analisi dettagliata, che include l’uso di cat() per organizzare le etichette in formato diagonale, culmina nella visualizzazione del risultato sotto forma di matrice di confusione, evidenziando la performance complessiva del modello. I risultati mostrano un’accuratezza globale di circa il 98% su tutti i suoni audio delle cifre da 0 a 9, con alcune cifre come 0, 1, 2, 5 e 7 raggiungendo il 100%, e altre come 3, 4, 8, 9 attestandosi al 97%. Il peggior risultato si registra per la cifra 6, con una precisione del 90%.
L’analisi può essere ulteriormente raffinata valutando individualmente i suoni delle singole cifre. A tal fine, si crea uno script specifico (Digit_Audio_Evaluation.m) che consente di testare il modello su un singolo file audio, ad esempio la cifra "6". L’audio viene letto tramite audioread(), riprodotto per conferma uditiva, e la relativa etichetta assegnata. Si procede quindi a plottare il segnale audio nel dominio del tempo, utile per visualizzare la forma d’onda e valutarne caratteristiche temporali.
L’oggetto audioFeatureExtractor viene configurato con parametri come la finestra di analisi (ad esempio una finestra di Hann di circa 30 ms con sovrapposizione di 20 ms) e si attivano tutti gli estrattori di feature. Le caratteristiche estratte per ogni finestra temporale vengono quindi sottoposte al modello per la predizione. Il risultato conferma la validità del modello, con una corrispondenza completa tra etichetta reale e predetta (nel caso dell’audio "6" il tasso di predizione corretta è del 100%). È possibile testare anche altri file modificando semplicemente il nome del file audio nel codice.
La metodologia presentata si basa su principi fondamentali di machine learning applicati all’analisi audio, con particolare attenzione alla normalizzazione dei dati, estrazione selettiva di caratteristiche rilevanti, e valutazione statistica della performance tramite matrici di confusione. Il corretto bilanciamento tra complessità del modello, scelta delle feature, e qualità dei dati di input si rivela decisivo per raggiungere alte percentuali di accuratezza.
È importante sottolineare che la riproducibilità e l’efficacia del modello dipendono dalla preparazione accurata dei dati di addestramento e test, dalla corretta esecuzione del processo di estrazione delle caratteristiche e dalla valutazione metodica tramite metriche appropriate. Inoltre, l’analisi dettagliata per singola classe permette di identificare punti di forza e debolezze del modello, facilitando interventi di ottimizzazione mirati.
Nella pratica, il processo illustrato rappresenta un esempio paradigmatico di come approcciare la classificazione multiclass in ambito audio, mostrando l’importanza della trasparenza nei passaggi computazionali e della verifica continua mediante dati indipendenti di test.
Come si costruisce la teoria del genere delle forme quadratiche e quale significato ha nella teoria dei numeri?
La potenza del volo: adattamenti e segreti degli animali
Come gestire la continuità dei dati in scenari di emergenza con soluzioni SQL automatizzate

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский