
Una libreria di esempi avversariali per costruire attacchi, sviluppare difese e valutarne entrambi.
Questo repository contiene il codice sorgente di CleverHans, una libreria Python per valutare la vulnerabilità dei sistemi di machine learning agli esempi avversariali. Puoi saperne di più su queste vulnerabilità nel blog associato.
La libreria CleverHans è in continuo sviluppo e accoglie sempre contributi degli attacchi e delle difese più recenti. In particolare, accogliamo sempre volentieri aiuto per risolvere le issue attualmente aperte.
Dalla v4.0.0, CleverHans supporta 3 framework: JAX, PyTorch e TF2. Attualmente diamo priorità
all'implementazione degli attacchi in PyTorch, ma accogliamo con piacere contributi per tutti e 3 i framework. Nelle versioni v3.1.0 e precedenti,
CleverHans supportava TF1; il codice per la v3.1.0 si trova in cleverhans_v3.1.0/ oppure estraendo
una release Github precedente.
La libreria si concentra sulla fornitura di implementazioni di riferimento di attacchi contro modelli di machine learning per aiutare a valutare i modelli rispetto agli esempi avversariali.
La struttura delle directory è la seguente:
cleverhans/ contiene le implementazioni degli attacchi, tutorials/ contiene script che dimostrano le funzionalità
di CleverHans e defenses/ contiene le implementazioni delle difese. Ogni framework ha la propria sottodirectory
all'interno di queste cartelle, ad es. cleverhans/jax.
Questa libreria usa Jax, PyTorch o TensorFlow 2 per accelerare i calcoli sui grafi eseguiti da molti modelli di machine learning. Pertanto, installare una di queste librerie è un prerequisito.
Una volta gestite le dipendenze, puoi installare CleverHans usando
pip o clonando questo repository Github.
pipSe stai installando CleverHans usando pip, esegui il seguente comando:
pip install cleverhans
Questo installerà l'ultima versione caricata su Pypi. Se invece desideri installare la versione più recente in sviluppo, usa:
pip install git+https://github.com/cleverhans-lab/cleverhans.git#egg=cleverhans
Se vuoi effettuare un'installazione modificabile (editable) di CleverHans così da poter sviluppare la libreria e contribuire con le tue modifiche, prima crea un fork del repository su GitHub e poi clona il tuo fork in una directory a tua scelta:
git clone https://github.com/<your-org>/cleverhans
Puoi quindi installare il pacchetto locale in modalità "editable" per aggiungerlo al
tuo PYTHONPATH:
cd cleverhans
pip install -e .
Sebbene CleverHans probabilmente funzioni su molte altre configurazioni di macchine, attualmente lo testiamo con Python 3.6, Jax 0.2, PyTorch 1.7 e Tensorflow 2.4 su Ubuntu 18.04 LTS (Bionic Beaver).
Se hai una richiesta di supporto, ti preghiamo di fare una domanda su StackOverflow piuttosto che aprire una issue nel tracker GitHub. Il tracker delle issue di GitHub dovrebbe essere usato solo per segnalare bug o richiedere funzionalità.
I contributi sono benvenuti! Per velocizzare il processo di revisione del codice, chiediamo che:
Black
nelle tue pull request.Le correzioni di bug possono essere proposte tramite pull request Github.
tutorialsPer aiutarti a iniziare con le funzionalità offerte da questa libreria, la
cartella tutorials/ include i seguenti tutorial:
NOTA: i tutorial sono mantenuti con cura, nel senso che usiamo l'integrazione continua per assicurarci che continuino a funzionare. Non sono considerati parte dell'API e possono cambiare in qualsiasi momento senza preavviso. Non dovresti scrivere codice di terze parti che importa i tutorial e aspettarti che l'interfaccia non si rompa. Solo la libreria principale è soggetta alla nostra regola di preavviso di deprecazione dell'interfaccia di sei mesi.
NOTA: ti preghiamo di aprire una discussione nella bacheca delle discussioni prima di scrivere un nuovo tutorial. Poiché ogni nuovo tutorial comporta una grande quantità di codice duplicato rispetto ai tutorial esistenti, e poiché ogni riga di codice richiede test e manutenzione continui a tempo indeterminato, generalmente preferiamo non aggiungere nuovi tutorial. Ogni tutorial dovrebbe mostrare un modo estremamente diverso di usare la libreria. Chiamare semplicemente un attacco, un modello o un dataset diverso non basta a giustificare il mantenimento di un tutorial parallelo.
examplesLa cartella examples/ contiene script aggiuntivi per mostrare diversi usi
della libreria CleverHans o per aiutarti a iniziare a competere in diverse competizioni
sugli esempi avversariali. Non offriamo manutenzione o supporto continui
per questa directory quanto per il resto della libreria, e se il codice qui presente
si rompe potremmo semplicemente eliminarlo senza preavviso.
Dato che recentemente abbiamo interrotto il supporto a TF1, la cartella examples/ è attualmente
vuota, ma sei invitato a inviare i tuoi usi tramite una pull request :)
I vecchi esempi per CleverHans v3.1.0 e precedenti si trovano in cleverhans_v3.1.0/examples/.
Quando riporti i benchmark, ti preghiamo di:
Ad esempio, potresti riportare: "Abbiamo valutato la robustezza del nostro metodo agli
attacchi avversariali usando la v4.0.0 di CleverHans. Su un test set modificato dal
FastGradientMethod con una max-norm eps di 0.3, abbiamo ottenuto un'accuratezza del test set del 71.3%."
Se usi CleverHans per ricerca accademica, sei fortemente incoraggiato (anche se non obbligato) a citare il seguente articolo:
@article{papernot2018cleverhans,
title={Technical Report on the CleverHans v2.1.0 Adversarial Examples Library},
author={Nicolas Papernot and Fartash Faghri and Nicholas Carlini and
Ian Goodfellow and Reuben Feinman and Alexey Kurakin and Cihang Xie and
Yash Sharma and Tom Brown and Aurko Roy and Alexander Matyasko and
Vahid Behzadan and Karen Hambardzumyan and Zhishuai Zhang and
Yi-Lin Juang and Zhi Li and Ryan Sheatsley and Abhibhav Garg and
Jonathan Uesato and Willi Gierke and Yinpeng Dong and David Berthelot and
Paul Hendricks and Jonas Rauber and Rujun Long},
journal={arXiv preprint arXiv:1610.00768},
year={2018}
}
Il nome CleverHans è un riferimento a una presentazione di Bob Sturm intitolata “Clever Hans, Clever Algorithms: Are Your Machine Learnings Learning What You Think?" e alla pubblicazione corrispondente, "A Simple Method to Determine if a Music Information Retrieval System is a 'Horse'." Clever Hans era un cavallo che sembrava aver imparato a rispondere a domande di aritmetica, ma in realtà aveva solo imparato a leggere i segnali sociali che gli permettevano di dare la risposta corretta. In contesti controllati, dove non poteva vedere i volti delle persone o ricevere altri feedback, non era in grado di rispondere alle stesse domande. La storia di Clever Hans è una metafora dei sistemi di machine learning che possono raggiungere un'accuratezza molto elevata su un test set estratto dalla stessa distribuzione dei dati di addestramento, ma che in realtà non comprendono il compito sottostante e ottengono scarse prestazioni su altri input.
Questa libreria è mantenuta collettivamente dal CleverHans Lab dell'Università di Toronto. L'attuale punto di contatto è Jonas Guan. In precedenza è stata mantenuta da Ian Goodfellow e Nicolas Papernot.
I seguenti autori hanno contribuito con 100 o più righe (ordinati secondo la pagina dei contributori di GitHub):
Copyright 2021 - Google Inc., OpenAI, Pennsylvania State University, University of Toronto.