Sembra un argomento nuovo, invece è da circa dieci anni che questa tecnologia si colloca tra i sistemi di apprendimento automatico e la loro sicurezza informatica. Una definizione di Adversarial Learning che sarà approfondita è: l’arte che sfrutta la vulnerabilità degli algoritmi di apprendimento per creare input ingannevoli che invalidano l’output degli algoritmi stessi. Dal lato buono la ricerca in questo campo ha come scopo lo studio della sicurezza degli algoritmi di apprendimento contro gli attacchi mirati per progettare sistemi più sicuri e sviluppare le contromisure. Dal lato meno buono Adversarial Learning vuol dire costruire esempi di dati che riescano a “ingannare” algoritmi collaudati come per esempio sistemi anti-spam, sistemi di riconoscimento biometrico, sistemi autonomi basati su visione artificiale e in generale sistemi progettati per il controllo e la sicurezza informatica. Appare evidente quanto sia importante studiare e capire questa tipologia di apprendimento o perturbazione.
Adversarial learning, come si generano
Per migliorare la sicurezza e la robustezza degli algoritmi di apprendimento e per prevenire si procede in questo modo a ciclo continuo, dopo l’ultima fase si ricomincia dalla prima:
- Creazione di un modello “adversarial” e di input ingannevoli
- Utilizzo di questo modello per generare attacchi al modello originale
- Analisi dei risultati
- Sviluppo di contromisure e prevenzione
- Aggiornamento del modello originale
Inutile dire quale sia la parte più facile e quale la più difficile. Per fare esempi di facile comprensione facciamo riferimento alla classificazione di immagini tramite una rete neurale, ma i concetti si applicano ugualmente a casi di altri algoritmi. Sia nel ML sia nel DL si possono creare esempi “adversarial”, costituiti da esempi di input che generano un output scorretto rispetto a quello atteso. I casi più evidenti, intuitivi e con immediato effetto esplicativo si hanno nel riconoscimento di immagini tramite una rete neurale; il risultato è che questa risulta instabile rispetto ad alcune perturbazioni. Il punto critico è che con piccole perturbazioni negli esempi di input si producono grandi perturbazioni sugli output fino a falsare i risultati; un’immagine classificata correttamente se opportunamente perturbata non viene più classificata correttamente e la perturbazione è indistinguibile all’occhio umano.
Già nel 2013 ci sono tracce in articoli accademici della possibilità di generare “adversarial examples”, in seguito la tecnica è stata raffinata; è possibile trovare una perturbazione universale che falsa la classificazione di un’alta percentuale di immagini, in questo articolo se ne trovano gli esempi (https://arxiv.org/pdf/1610.08401.pdf) . Sono riportati nella figura seguente l’immagine falsata che a occhio nudo non è distinguibile da quella originale e il tipo di disturbo che è stato graficamente sommato all’immagine originale per creare l’inganno: in questo caso un calzino natalizio viene classificato come elefante indiano. Tra i vari esempi proposti nell’articolo ho scelto questo per sottolineare l’entità della distorsione che si può introdurre; in altri casi l’errore è più contenuto, per esempio un animale classificato correttamente con l’aggiunta della perturbazione viene classificato diversamente ma sempre come un animale.
Normalmente la creazione di adversarial richiede la conoscenza dell’algoritmo utilizzato e di alcune altre sue caratteristiche come la funzione di perdita (loss function) nonché a volte anche informazioni sul dataset di addestramento. Invece le perturbazioni universali non richiedono neanche la conoscenza dei parametri di una rete neurale ne della funzione di attivazione o altre informazioni; con sufficiente sicurezza introducono un disturbo tale da falsare alte percentuali di risultati.
In uno studio successivo è stata rilevata e verificata la possibilità di alterare la classificazione di una immagine con il cambio di 5 o 3 o anche di un solo pixel; lo studio è stato condotto su dataset di immagini pubblici come CIFAR-10 e ImageNet. Questo studio mette in evidenza il rischio potenziale di situazioni critiche, per esempio nella guida autonoma dove la situazione esterna al veicolo e le decisioni dipendono in gran parte da riprese video e da immagini di segnali stradali: una macchia di sporco su un cartello stradale potrebbe alterarne la classificazione e il riconoscimento. Sempre nell’analisi di immagini potrebbero verificarsi gli stessi problemi nel campo della diagnostica medica. In questi e in altri casi critici è ancora fondamentale una supervisione umana alla capacità di classificazione di un algoritmo pur ben addestrato.
Cosa fare per irrobustire gli algoritmi
La domanda che si pone è se sia possibile rilevare la presenza di perturbazioni in un esempio in input e nel caso se sia possibile eliminare la perturbazione. Per entrare più in dettaglio osserviamo che gli attacchi possono essere classificati in due categorie
- di contaminazione se viene alterato il dataset di addestramento; in questo caso viene contaminato il modello che risulta corrotto e darà output totalmente ingannevoli. Il pericolo causato da questo attacco può avere effetti di notevoli dimensioni: se viene contaminato un dataset pubblico o viene alterato un modello pubblico che viene personalizzato o completato con operazioni di transfer learning, si ha una diffusione incontrollata di sistemi falsati.
- di evasione se attaccano la fase di utilizzo e applicazione del modello e quindi quella di classificazione e/o previsione; questo tipo di attacchi sembrano più facili e più diffusi, inoltre potrebbero presentarsi in modo spontaneo involontariamente. Il pericolo di questi attacchi è la falsificazione dei risultati per esempio di un riconoscimento.
Rilevare a priori che un input è stato manipolato e alterato per creare una situazione di inganno o confusione di un algoritmo sarebbe la soluzione migliore ma sembra ancora la più lontana da raggiungere per cui ad oggi ci si focalizza in prevalenza sul miglioramento degli algoritmi per renderli più robusti.
Prevenire la contaminazione di un dataset, particolarmente se questo è di tipo pubblico e disponibile per il download da uno o più siti in mirroring, significa garantire la trasparenza e l’immutabilità dei dati originali. Questo compito ad oggi sembra che si possa assolvere in modo elegante con la validazione in blockchain che può garantire l’originalità dello stesso dataset anche se è geograficamente distribuito in su siti mirror.
Per prevenire altri tipi di invalidazioni dei modelli la ricerca è molto attiva e a oggi ci sono studi ed esperimenti con risultati promettenti anche se non infallibili. La prima cosa che si può pensare di fare in caso di algoritmi supervisionati è “data augmentation” ovvero lavorando sui dati disponibili introdurre delle piccole variazioni per ingrandire il dataset di partenza. Il tipo di variazioni che si introducono dipende dal tipo di dato, per esempio nel caso di una immagine si possono aggiungere diverse rotazioni della stessa immagine, le simmetriche, distorsioni per sfuocare o altre correzioni purché rimanga inalterato il significato; se le immagini sono dei numeri scritti in corsivo l’immagine capovolta potrebbe non avere senso e peggiorare il dataset invece di migliorarlo. La data augmentation è praticata regolarmente nel caso di algoritmi che lavorano su immagini o video e in generale non è sufficiente. Si passa quindi a fare data augmentation con esempi di tipo adversarial generati appositamente; si utilizzano le tecniche per generare adversarial example a partire dal dataset originale e dall’algoritmo che si intende ingannare per fornire allo stesso algoritmo anche gli esempi anomali in modo che sia “preparato”. Anche questo a volte non è sufficiente in quanto sicuramente non esaustivo. Una variante più avanzata è la simulazione degli attacchi di tipo adversarial durante il training dei modelli in modo da ottenere da subito un modello più robusto. Altre varianti in fase di ricerca nel caso di reti neurali consistono nell’addestramento di una rete col dataset originale, addestramento di una seconda rete con soli adversarial example generati da ogni input classico (non adversarial); si ottiene così il raddoppio del dataset. Si addestra quindi una seconda sottorete sugli esempi adversarial che fornisce la probabilità che un input sia adversarial. Questo metodo è “statico” in quanto fissato a priori in fase di preparazione dei dataset; esistono ricerche e sperimentazioni su un metodo “dinamico” in cui gli esempi adversarial vengono generati non prima ma durante l’addestramento in modo casuale sempre da ogni input. Il risultato è che questo ultimo sistema è stabile e più resistente agli attacchi anche di sistemi a cui sono noti la rete e il suo gradiente sia per la parte classica sia per la parte adversarial.
Conclusioni
L’argomento è interessante, ha molteplici aspetti e la ricerca fa molti passi avanti; come spesso capita siamo in un caso in cui lo stesso sistema può essere sfruttato per duplici e opposti scopi. Continuare la ricerca è importante per tutti gli aspetti applicativi e in particolare in settori che coinvolgono la sicurezza di esseri viventi, come il medicale, l’affiancamento o la sostituzione di attività umane. Nel frattempo l’uso degli algoritmi di apprendimento non si ferma ma è opportuno essere consapevoli dei potenziali errori dovuti sia a situazioni casuali involontarie sia a situazioni appositamente generate per fini malevoli; la documentazione e lo studio di tali errori contribuisce allo sviluppo di sistemi sempre più robusti e affidabili.