Verifica e validazione per l’IA con MATLAB e Simulink

Workflow di verifica e validazione: il processo di sviluppo a W

La tecnologia dell’IA sta rivoluzionando i vari settori industriali e sta modificando il nostro modo di vivere e lavorare. Man mano che vengono integrati nei settori fondamentali per la sicurezza, come l’aerospazio, l’automotive e il settore sanitario (Figura 1), i sistemi di IA prendono decisioni che hanno un impatto diretto sulla sicurezza e il benessere dell’uomo. Da ciò deriva la necessità impellente di processi di verifica e validazione rigorosi, per poter spiegare, verificare e validare il comportamento dei modelli.

Simboli rappresentativi di ciascun settore industriale: un segnale di stop per l’automotive, un aereo per l’aerospazio e la radiografia di un torace per il settore medico.

Figura 1. Nel settore medico, aerospaziale e dell’automotive vengono utilizzate le reti di classificazione di immagini.

Nell’ambito della certificazione IA, le tecniche di verifica e validazione aiutano a identificare e a mitigare i rischi dimostrando che i modelli di IA e i sistemi basati su IA rispettano gli standard industriali e le normative del settore.

I workflow di verifica e validazione tradizionali, come il ciclo a V, potrebbero non essere sufficienti a garantire la precisione e l’affidabilità dei modelli di IA. Per adattarsi meglio alle applicazioni di IA, tali workflow hanno subito degli adattamenti ed è nato, per esempio, il processo di sviluppo a W (Figura 2).

Adattamento del modello a V di sviluppo di sistemi di IA/Machine Learning, che mostra le fasi dai requisiti fino alla verifica.

Figura 2. Processo di sviluppo a W. Basato su un diagramma originale pubblicato dall’European Union Aviation Safety Agency (EASA). (Crediti dell’immagine: EASA)

Le sezioni seguenti ti guideranno attraverso le varie fasi di verifica e validazione del processo di sviluppo a W. Per analizzare il processo più nel dettaglio, dai un’occhiata alle risorse qui sotto.

Implementazione del processo a W: case study in ambito medico

Per dimostrare un caso pratico di questo processo, il presente white paper ti guiderà attraverso lo sviluppo di un sistema di IA medico progettato per capire se un paziente ha la polmonite tramite l’esame di radiografie del torace. Il seguente case study mette in evidenza i punti forti e le possibili problematiche poste dall’IA nelle applicazioni fondamentali per la sicurezza, mostrando il motivo per cui il modello di classificazione delle immagini deve essere sia accurato che robusto per prevenire diagnosi errate e dannose.

Dai requisiti alla modellazione robusta

La prima metà del processo di sviluppo a W aiuta a garantire che i modelli di IA soddisfino gli standard richiesti e si comportino in modo affidabile nelle applicazioni del mondo reale.

Requisiti attribuiti alla gestione dei componenti di ML

La prima fase del ciclo a W consiste nel raccogliere requisiti specifici per il componente di Machine Learning. Le considerazioni principali includono implementazione, test e spiegabilità del modello. Requirements Toolbox™ facilita l’authoring, il collegamento e la validazione dei requisiti (Figura 3).

App Requirements Editor che mostra un requisito di precisione di test per un modello di Machine Learning.

Figura 3. L’app Requirements Editor acquisisce i requisiti per il componente di Machine Learning.

Gestione dati

La fase successiva del ciclo a W prevede la gestione dei dati ed è fondamentale nell’apprendimento con supervisione in quanto richiede dati etichettati. MATLAB® mette a disposizione delle app di etichettatura, come Image Labeler e Signal Labeler, per svolgere operazioni di etichettatura interattive e automatizzate. Usando imageDatastore, che struttura i file immagine per la scalabilità, è possibile gestire grandi set di dati immagine ed eseguire, ad esempio, la gestione dei dati immagine per l’addestramento al rilevamento della polmonite:

trainingDataFolder = "pneumoniamnist\Train";

imdsTrain = imageDatastore(trainingDataFolder,IncludeSubfolders=true,LabelSource="foldernames");

countEachLabel(imdsTrain)

Gestione del processo di apprendimento

Prima dell’addestramento, è essenziale finalizzare l’architettura di rete e le opzioni di addestramento, tra cui l’algoritmo, la funzione di perdita e gli iperparametri. L’app Deep Network Designer consente di progettare e visualizzare le reti in modo interattivo. Il codice seguente definisce l’architettura di una rete neurale convoluzionale (CNN) per la classificazione delle immagini:

numClasses = numel(classNames);
layers = [
 imageInputLayer(imageSize,Normalization="none")
 convolution2dLayer(7,64,Padding=0)
 batchNormalizationLayer()
 reluLayer()
 dropoutLayer(0.5)
 averagePooling2dLayer(2,Stride=2)
 convolution2dLayer(7,128,Padding=0)
 batchNormalizationLayer()
 reluLayer()
 dropoutLayer(0.5)
 averagePooling2dLayer(2,Stride=2)
 fullyConnectedLayer(numClasses)
 softmaxLayer];

Trovare gli iperparametri ottimali può essere complesso, ma l’app Experiment Manager aiuta esplorando valori diversi tramite sweeping o l’ottimizzazione bayesiana (Figura 4). È possibile testare più configurazioni di addestramento in parallelo, sfruttando l’hardware disponibile per semplificare il processo.

Screenshot della configurazione dello sweeping degli iperparametri e della configurazione dei layer della CNN nell’app Experiment Manager.

Figura 4. Configurazione del problema nell’app Experiment Manager per trovare il set ottimale di iperparametri dall’architettura esportata in Deep Network Designer.

Addestramento del modello e validazione iniziale

La fase di addestramento inizia con l’esecuzione di esperimenti nell’app Experiment Manager, fino a ottenere un modello iniziale con un livello di accuratezza promettente (~96% sul set di validazione). Tuttavia, non soddisfa appieno tutti i requisiti predefiniti, come la robustezza. Poiché il ciclo a W è iterativo, occorrono ulteriori affinamenti.

Screenshot di Experiment Manager che mostra i risultati degli iperparametri della CNN e una matrice di confusione per il rilevamento della polmonite.

Figura 5. Ricerca di un modello iniziale con l’app Experiment Manager.

Verifica del processo di apprendimento

Assicurarsi che i modelli di IA soddisfino requisiti specifici è molto importante, soprattutto per le applicazioni fondamentali per la sicurezza. Le fasi successive del processo di sviluppo a W prevedono l’implementazione di tecniche di verifica per confermare che le prestazioni del modello rispondano alle aspettative.

Test e informazioni sulle prestazioni del modello

Il modello è stato addestrato con una tecnica di tipo adversarial, ovvero il Fast Gradient Sign Method (FGSM), per ottimizzare la robustezza rispetto agli esempi avversari. Ha così raggiunto un livello di accuratezza superiore al 90%, ben oltre i benchmark e i requisiti predefiniti. Per capire meglio le sue prestazioni, sono stati analizzati i pattern di errore con una matrice di confusione, mentre le tecniche di spiegabilità come Grad-CAM (Figura 6) hanno fornito dati visivi approfonditi che migliorano l’interpretabilità e la fiducia nelle sue decisioni.

Heatmap di Grad-CAM che evidenzia le regioni interessate dalla polmonite previste a partire da un RX torace.

Figura 6. Comprensione delle previsioni della rete tramite Grad-CAM (Gradient-weighted Class Activation Mapping).

Esempi avversari

Gli esempi avversari sono delle piccole modifiche impercettibili agli input che possono indurre le reti neurali a fare classificazioni errate, sollevando dubbi in merito alla robustezza nelle attività critiche per la sicurezza, come la diagnostica per immagini (Figura 7).

L’immagine radiografica originale dei polmoni con polmonite viene erroneamente classificata come normale dopo l’aggiunta di un lieve rumore avversario.

Figura 7. Esempi avversari: effetto della perturbazione dell’input sulla classificazione delle immagini.

Norma L-infinito

La norma L-infinito viene utilizzata per capire e quantificare le perturbazioni avversarie (Figura 8). Definisce un intervallo entro il quale i valori di pixel possono essere alterati. Da ciò risultano innumerevoli combinazioni possibili da testare, il che rende molto difficile la valutazione di tutti gli scenari.

Vista ingrandita di una radiografia con matrici che mostrano gli stadi di perturbazione dei pixel in una rete neurale.

Figura 8. La norma L-infinito: esempi di possibili perturbazioni degli input.

Verifica formale della robustezza

I metodi di verifica formale offrono un approccio matematico che permette di valutare in modo sistematico e garantire la robustezza delle reti neurali rispetto a una vasta serie di potenziali esempi avversari. Deep Learning Toolbox™ Verification Library mette a disposizione dei metodi di verifica formale, come l’interpretazione astratta. Data un’immagine da un set di prova, è possibile scegliere una perturbazione che definisce un’ampia raccolta di immagini perturbate per un’immagine specifica (Figura 9).

Workflow che mostra un input in forma di immagine radiografica, un set di perturbazioni, un modello e delle etichette di output: verificato, non verificato o violato.

Figura 9. Verifica formale con l’interpretazione astratta.

Esistono tre potenziali esiti per ciascuna delle immagini:

  • Verificato: l’etichetta di output rimane coerente.
  • Violato: l’etichetta di output cambia.
  • Non verificato: occorrono ulteriori verifiche oppure occorre migliorare il modello.

Rilevamento Out-of-Distribution

Un sistema di IA affidabile dovrebbe produrre previsioni accurate in un contesto noto. Tuttavia, il modello dovrebbe anche essere in grado di riconoscere esempi sconosciuti e rifiutarli o inviarli a un esperto umano per una gestione sicura. Con la Deep Learning Toolbox Verification Library, puoi creare un discriminatore di dati fuori distribuzione (OOD) per assegnare un livello di fiducia alle predizioni della rete, calcolando un punteggio di confidenza della distribuzione per ciascuna osservazione (Figura 10). Il discriminatore fornisce anche una soglia per separare i dati In-Distribution dai dati OOD.

Istogramma che mostra le distribuzioni dei punteggi di confidenza per i dati di addestramento e varie perturbazioni.

Figura 10. Distribuzione dei punteggi di confidenza per i set di dati originali e derivati.

Dall’implementazione del modello alla validazione dei requisiti

Una volta verificato il processo di apprendimento, occorre adattare i modelli di IA per le applicazioni del mondo reale. Queste ultime fasi del processo di sviluppo a W prevedono la preparazione del modello per la distribuzione e tutte le operazioni necessarie a garantire che soddisfi i requisiti operativi.

Implementazione del modello e generazione di codice

Il passaggio dalla verifica del processo di apprendimento all’implementazione del modello nel flusso di sviluppo a forma di W rappresenta il momento in cui un modello di intelligenza artificiale passa dalla fase di perfezionamento alla sua applicazione nel mondo reale. La generazione di codice con MATLAB e Simulink® automatizza la conversione dei modelli addestrati in codice implementabile (come C/C++ o CUDA®; cfr. Figura 11), riducendo gli interventi di codifica manuale e minimizzando gli errori.

Diagramma della generazione di codice da modelli MATLAB su CPU, GPU, microcontroller e target FPGA.

Figura 11. Strumenti per la generazione di codice MATLAB e Simulink.

È possibile utilizzare la funzione analyzeNetworkForCodegen in MATLAB per verificare se il proprio modello di Deep Learning è pronto per la generazione di codice. Ciò garantisce compatibilità con le librerie target e, in relazione alle applicazioni critiche per la sicurezza, consente di generare codice senza dipendenze di terze parti. La generazione automatica di codice semplifica la certificazione, migliora la portabilità e garantisce una distribuzione affidabile tra piattaforme diverse.

analyzeNetworkForCodegen(net)

 Supported
 _________
 none "Yes"
 arm-compute "Yes"
 mkldnn "Yes"
 cudnn "Yes"
 tensorrt "Yes"

Nei casi in cui la distribuzione richiede di ottimizzare la memoria, l’aritmetica a virgola fissa ed efficienza computazionale, Deep Learning Toolbox Model Quantization Library si rivela estremamente efficace. Tecniche quali la quantizzazione e il pruning possono notevolmente ridurre le dimensioni del modello e il carico computazionale, comprimendo ad esempio un modello di 4 volte con un calo dell’accuratezza dello 0,7% durante la conversione da virgola fissa a int8 usando l’app Deep Network Quantizer (Figura 12).

Screenshot dell’app Deep Network Quantizer che mostra le statistiche relative all’intervallo dinamico e i risultati di validazione di una rete neurale.

Figura 12. Quantizzazione di una rete neurale profonda con l’app Deep Network Quantizer.

Con MATLAB Coder™ e GPU Coder™, è possibile generare codice C++ e CUDA per distribuire modelli di IA su sistemi real-time in cui velocità e bassa latenza sono aspetti fondamentali. Ciò prevede la configurazione del linguaggio target e delle impostazioni di Deep Learning, ad esempio l’uso di cuDNN per l’accelerazione GPU.

cfg = coder.gpuConfig("mex"); 

cfg.TargetLang = "C++"; 

cfg.GpuConfig.ComputeCapability = "6.1"; 

cfg.DeepLearningConfig = coder.DeepLearningConfig("cudnn"); 

cfg.DeepLearningConfig.AutoTuning = true; 

cfg.DeepLearningConfig.CalibrationResultFile = "quantObj.mat"; 

cfg.DeepLearningConfig.DataType = "int8"; 

input = ones(inputSize,"int8"); 

codegen -config cfg -args input predictCodegen -report

Verifica e integrazione del modello di inferenza

La fase di verifica e integrazione del modello di inferenza garantisce che un modello di IA, come quello usato per il rilevamento della polmonite, si comporti in modo affidabile con dati nuovi e mai visti e che si integri bene in un sistema sanitario più ampio. 

Dopo la conversione del modello in C++ e CUDA, questa fase ne verifica l’accuratezza e lo integra all’interno di un sistema completo, insieme a componenti per il monitoraggio del runtime, l’acquisizione dei dati e la visualizzazione. Simulando il sistema in Simulink, è possibile verificare se il modello funziona in modo efficace in tempo reale e se mantiene lo stesso livello prestazionale all’interno del sistema più ampio (Figura 13).

Diagramma di un modello di IA con monitoraggio del runtime e visualizzazione per la valutazione del livello di fiducia.

Figura 13. Test harness in Simulink che integra il modello di Deep Learning.

Il monitoraggio del runtime può aiutare a distinguere tra input già noti e non (Figura 14). Segnala le previsioni con un alto livello di confidenza in verde quando i dati corrispondono alla distribuzione di addestramento, mentre contrassegna le potenziali anomalie in rosso per i casi OOD. Questa funzionalità ottimizza la sicurezza e l’affidabilità del sistema di IA, garantendo che non faccia solo delle previsioni accurate ma che identifichi anche e gestisca in modo opportuno i dati non ancora noti.

Due radiografie che mostrano una previsione corretta e una non corretta di polmonite con punteggi di confidenza.

Figura 14. Esempi dell’output del sottosistema di monitoraggio del runtime.

A questo punto, è fondamentale implementare una strategia di test globale. Usando MATLAB Test™ o Simulink Test™, è possibile creare dei test automatizzati per validare in modo approfondito l’accuratezza del modello di IA, le sue prestazioni e l’integrazione all’interno del sistema completo.

Verifica indipendente dei dati e dell’apprendimento

La fase di verifica indipendente dei dati e dell’apprendimento assicura che i seti di dati di addestramento, validazione e test siano gestiti in modo opportuno, completi e rappresentativi dello spazio di input dell’applicazione. Ciò prevede una revisione indipendente dopo la verifica del modello di inferenza sulla piattaforma target. Questa fase conferma altresì che la verifica dell’apprendimento, compresa l’analisi di copertura, sia stata completata in modo soddisfacente.

Verifica dei requisiti

La fase di verifica dei requisiti conclude il processo di sviluppo a W garantendo che tutti i requisiti siano completamente implementati e testati. Usando Requirements Toolbox™, le funzioni e i test sono collegati ai requisiti corrispondenti, il che chiude il ciclo di sviluppo. Eseguendo tali test da Requirements Editor, si verifica che tutti i requisiti siano stati adeguatamente soddisfatti (Figura 15).

Figura 15. Esecuzione dei test da Requirements Editor.

Conclusione del processo di sviluppo

Al termine della verifica dei requisiti, il processo di sviluppo a W è completo. In questo esempio di dispositivo medico, le fasi minuziose e meticolose di questo processo servono a garantire che il modello di IA per il rilevamento della polmonite sia accurato, robusto e pronto per la distribuzione. Collegando i requisiti a funzioni e test specifici, è possibile stabilire una tracciabilità chiara e verificare in modo sistematico ogni requisito, confermando che il modello è in grado di soddisfare i rigidi standard delle applicazioni in ambito sanitario. A questo punto, è possibile distribuire uno strumento affidabile che possa contribuire al miglioramento del servizio reso ai pazienti.