
Une bibliothèque d'exemples adverses pour construire des attaques, élaborer des défenses et évaluer les deux.
Ce dépôt contient le code source de CleverHans, une bibliothèque Python permettant d'évaluer la vulnérabilité des systèmes d'apprentissage automatique aux exemples adverses. Vous pouvez en apprendre davantage sur ces vulnérabilités sur le blog associé.
La bibliothèque CleverHans est en développement continu et accueille toujours les contributions des dernières attaques et défenses. En particulier, nous accueillons volontiers toute aide pour résoudre les problèmes actuellement ouverts.
Depuis la v4.0.0, CleverHans prend en charge 3 frameworks : JAX, PyTorch et TF2. Nous donnons actuellement la priorité à l'implémentation
des attaques en PyTorch, mais nous accueillons très volontiers les contributions pour les 3 frameworks. Dans les versions v3.1.0 et antérieures,
CleverHans prenait en charge TF1 ; le code pour v3.1.0 se trouve sous cleverhans_v3.1.0/ ou en consultant
une version GitHub antérieure.
La bibliothèque se concentre sur la fourniture d'implémentations de référence des attaques contre les modèles d'apprentissage automatique afin de faciliter l'évaluation comparative des modèles face aux exemples adverses.
La structure des répertoires est la suivante :
cleverhans/ contient les implémentations d'attaques, tutorials/ contient des scripts démontrant les fonctionnalités
de CleverHans, et defenses/ contient les implémentations de défenses. Chaque framework possède son propre sous-répertoire
dans ces dossiers, par exemple cleverhans/jax.
Cette bibliothèque utilise Jax, PyTorch ou TensorFlow 2 pour accélérer les calculs de graphe effectués par de nombreux modèles d'apprentissage automatique. Par conséquent, l'installation de l'une de ces bibliothèques est un prérequis.
Une fois les dépendances installées, vous pouvez installer CleverHans en utilisant
pip ou en clonant ce dépôt GitHub.
pipSi vous installez CleverHans avec pip, exécutez la commande suivante :
pip install cleverhans
Cela installera la dernière version publiée sur Pypi. Si vous préférez plutôt installer la version de pointe, utilisez :
pip install git+https://github.com/cleverhans-lab/cleverhans.git#egg=cleverhans
Si vous souhaitez faire une installation modifiable de CleverHans afin de pouvoir développer la bibliothèque et réintégrer vos modifications, commencez par forker le dépôt sur GitHub, puis clonez votre fork dans le répertoire de votre choix :
git clone https://github.com/<your-org>/cleverhans
Vous pouvez ensuite installer le paquet local en mode « editable » afin de l'ajouter à
votre PYTHONPATH :
cd cleverhans
pip install -e .
Bien que CleverHans soit susceptible de fonctionner sur de nombreuses autres configurations machine, nous le testons actuellement avec Python 3.6, Jax 0.2, PyTorch 1.7 et Tensorflow 2.4 sur Ubuntu 18.04 LTS (Bionic Beaver).
Si vous avez une demande d'assistance, veuillez poser une question sur StackOverflow plutôt que d'ouvrir un problème dans le suivi GitHub. Le suivi de problèmes GitHub doit uniquement être utilisé pour signaler des bogues ou demander des fonctionnalités.
Les contributions sont les bienvenues ! Pour accélérer le processus de revue de code, nous demandons que :
Black
dans vos pull requests.Les corrections de bogues peuvent être soumises via des pull requests GitHub.
tutorialsPour vous aider à démarrer avec les fonctionnalités fournies par cette bibliothèque, le
dossier tutorials/ contient les tutoriels suivants :
REMARQUE : les tutoriels sont maintenus avec soin, dans le sens où nous utilisons l'intégration continue pour nous assurer qu'ils continuent de fonctionner. Ils ne sont pas considérés comme faisant partie de l'API et peuvent changer à tout moment sans préavis. Vous ne devez pas écrire de code tiers qui importe les tutoriels en vous attendant à ce que l'interface ne casse pas. Seule la bibliothèque principale est soumise à notre règle d'avertissement de dépréciation d'interface sur six mois.
REMARQUE : veuillez ouvrir un fil sur le forum de discussion avant d'écrire un nouveau tutoriel. Étant donné que chaque nouveau tutoriel implique une grande quantité de code dupliqué par rapport aux tutoriels existants, et que chaque ligne de code nécessite des tests et une maintenance continus indéfiniment, nous préférons généralement ne pas ajouter de nouveaux tutoriels. Chaque tutoriel doit présenter une manière extrêmement différente d'utiliser la bibliothèque. Mentionner simplement une autre attaque, un autre modèle ou un autre jeu de données ne suffit pas pour justifier le maintien d'un tutoriel parallèle.
examplesLe dossier examples/ contient des scripts supplémentaires pour présenter différentes utilisations
de la bibliothèque CleverHans ou pour vous aider à participer à différents concours d'exemples
adverses. Nous n'offrons pas autant de maintenance continue ou de support pour ce répertoire que pour
le reste de la bibliothèque, et si le code qui s'y trouve casse, nous pouvons simplement le supprimer sans préavis.
Comme nous avons récemment abandonné le support de TF1, le dossier examples/ est actuellement
vide, mais vous êtes invités à soumettre vos utilisations via une pull request :)
Les anciens exemples pour CleverHans v3.1.0 et antérieurs se trouvent sous cleverhans_v3.1.0/examples/.
Lorsque vous rapportez des benchmarks, veuillez :
Par exemple, vous pourriez rapporter "Nous avons évalué la robustesse de notre méthode aux
attaques adverses en utilisant la v4.0.0 de CleverHans. Sur un ensemble de test modifié par la
FastGradientMethod avec une norme maximale eps de 0,3, nous avons obtenu une précision sur l'ensemble de test de 71,3 %."
Si vous utilisez CleverHans pour la recherche académique, vous êtes vivement encouragé (mais pas obligé) à citer l'article suivant :
@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}
}
Le nom CleverHans fait référence à une présentation de Bob Sturm intitulée « Clever Hans, Clever Algorithms: Are Your Machine Learnings Learning What You Think? » et la publication correspondante, « A Simple Method to Determine if a Music Information Retrieval System is a 'Horse'. » Clever Hans était un cheval qui semblait avoir appris à répondre à des questions d'arithmétique, mais qui n'avait en réalité appris qu'à lire des indices sociaux qui lui permettaient de donner la bonne réponse. Dans des environnements contrôlés où il ne pouvait pas voir les visages des gens ni recevoir d'autres retours, il était incapable de répondre aux mêmes questions. L'histoire de Clever Hans est une métaphore des systèmes d'apprentissage automatique qui peuvent atteindre une très grande précision sur un ensemble de test tiré de la même distribution que les données d'entraînement, mais qui ne comprennent pas réellement la tâche sous-jacente et performent mal sur d'autres entrées.
Cette bibliothèque est maintenue collectivement par le CleverHans Lab de l'Université de Toronto. Le contact actuel est Jonas Guan. Elle était auparavant maintenue par Ian Goodfellow et Nicolas Papernot.
Les auteurs suivants ont contribué 100 lignes ou plus (classés selon la page des contributeurs GitHub) :
Copyright 2021 - Google Inc., OpenAI, Pennsylvania State University, University of Toronto.