
Eine Adversarial-Examples-Bibliothek zum Erstellen von Angriffen, Entwickeln von Abwehrmaßnahmen und Benchmarking beider.
Dieses Repository enthält den Quellcode für CleverHans, eine Python-Bibliothek zur Bewertung der Anfälligkeit von Machine-Learning-Systemen gegenüber adversarial examples. Mehr über solche Schwachstellen erfahren Sie im zugehörigen Blog.
Die CleverHans-Bibliothek wird kontinuierlich weiterentwickelt und freut sich stets über Beiträge der neuesten Angriffe und Abwehrmaßnahmen. Insbesondere freuen wir uns jederzeit über Hilfe bei der Lösung der derzeit offenen Issues.
Seit v4.0.0 unterstützt CleverHans 3 Frameworks: JAX, PyTorch und TF2. Wir priorisieren derzeit die Implementierung
von Angriffen in PyTorch, freuen uns aber sehr über Beiträge für alle 3 Frameworks. In Versionen bis einschließlich v3.1.0
unterstützte CleverHans TF1; den Code für v3.1.0 finden Sie unter cleverhans_v3.1.0/ oder indem Sie
eine frühere Github-Version auschecken.
Die Bibliothek konzentriert sich darauf, Referenzimplementierungen von Angriffen auf Machine-Learning-Modelle bereitzustellen, um beim Benchmarking von Modellen gegen adversarial examples zu helfen.
Die Verzeichnisstruktur ist wie folgt:
cleverhans/ enthält die Angriffsimplementierungen, tutorials/ enthält Skripte, die die Funktionen
von CleverHans demonstrieren, und defenses/ enthält Implementierungen von Abwehrmaßnahmen. Jedes Framework hat sein eigenes Unterverzeichnis
in diesen Ordnern, z. B. cleverhans/jax.
Diese Bibliothek verwendet Jax, PyTorch oder TensorFlow 2, um die von vielen Machine-Learning-Modellen durchgeführten Graphenberechnungen zu beschleunigen. Daher ist die Installation einer dieser Bibliotheken eine Voraussetzung.
Sobald die Abhängigkeiten berücksichtigt wurden, können Sie CleverHans mit
pip installieren oder indem Sie dieses Github-Repository klonen.
pip-InstallationWenn Sie CleverHans mit pip installieren, führen Sie den folgenden Befehl aus:
pip install cleverhans
Dadurch wird die letzte Version installiert, die auf Pypi hochgeladen wurde. Wenn Sie stattdessen die neueste Entwicklungsversion installieren möchten, verwenden Sie:
pip install git+https://github.com/cleverhans-lab/cleverhans.git#egg=cleverhans
Wenn Sie eine bearbeitbare Installation von CleverHans vornehmen möchten, um die Bibliothek weiterzuentwickeln und Änderungen beizusteuern, forken Sie zunächst das Repository auf GitHub und klonen Sie dann Ihren Fork in ein Verzeichnis Ihrer Wahl:
git clone https://github.com/<your-org>/cleverhans
Sie können das lokale Paket dann im „editable“-Modus installieren, um es zu Ihrem
PYTHONPATH hinzuzufügen:
cd cleverhans
pip install -e .
Obwohl CleverHans wahrscheinlich auf vielen anderen Maschinenkonfigurationen funktioniert, testen wir es derzeit mit Python 3.6, Jax 0.2, PyTorch 1.7 und Tensorflow 2.4 auf Ubuntu 18.04 LTS (Bionic Beaver).
Wenn Sie eine Unterstützungsanfrage haben, stellen Sie bitte eine Frage auf StackOverflow, anstatt ein Issue im GitHub-Tracker zu eröffnen. Der GitHub-Issue-Tracker sollte nur verwendet werden, um Fehler zu melden oder Feature-Anfragen zu stellen.
Beiträge sind willkommen! Um den Code-Review-Prozess zu beschleunigen, bitten wir um Folgendes:
Black-Codestil befolgen.Fehlerbehebungen können über GitHub-Pull-Requests eingereicht werden.
tutorialsUm Ihnen den Einstieg in die Funktionen dieser Bibliothek zu erleichtern, enthält der
Ordner tutorials/ die folgenden Tutorials:
HINWEIS: Die Tutorials werden sorgfältig gepflegt, in dem Sinne, dass wir kontinuierliche Integration verwenden, um sicherzustellen, dass sie weiterhin funktionieren. Sie gelten nicht als Teil der API und können sich jederzeit ohne Vorwarnung ändern. Sie sollten keinen Drittanbieter-Code schreiben, der die Tutorials importiert, und erwarten, dass die Schnittstelle nicht bricht. Nur die Hauptbibliothek unterliegt unserer Regel zur sechsmonatigen Ankündigung von Schnittstellenänderungen.
HINWEIS: Bitte starten Sie einen Thread im Diskussionsforum, bevor Sie ein neues Tutorial schreiben. Da jedes neue Tutorial im Vergleich zu den vorhandenen Tutorials eine große Menge an dupliziertem Code mit sich bringt und da jede Codezeile dauerhaft getestet und gepflegt werden muss, ziehen wir es im Allgemeinen vor, keine neuen Tutorials hinzuzufügen. Jedes Tutorial sollte eine extrem andere Art der Nutzung der Bibliothek demonstrieren. Allein einen anderen Angriff, ein anderes Modell oder einen anderen Datensatz aufzurufen, reicht nicht aus, um ein paralleles Tutorial zu rechtfertigen.
examplesDer Ordner examples/ enthält zusätzliche Skripte, um verschiedene Verwendungszwecke
der CleverHans-Bibliothek zu demonstrieren oder Ihnen den Einstieg in verschiedene Adversarial-Example-Wettbewerbe
zu erleichtern. Wir bieten für dieses Verzeichnis bei weitem nicht so viel laufende Wartung oder Unterstützung
an wie für den Rest der Bibliothek, und wenn Code hier beschädigt wird,
löschen wir ihn möglicherweise einfach ohne Vorwarnung.
Da wir die Unterstützung für TF1 kürzlich eingestellt haben, ist der Ordner examples/ derzeit
leer, aber Sie können Ihre Verwendungszwecke gerne per Pull-Request einreichen :)
Alte Beispiele für CleverHans v3.1.0 und früher finden Sie unter cleverhans_v3.1.0/examples/.
Wenn Sie Benchmarks melden, beachten Sie bitte:
Sie könnten beispielsweise berichten: „Wir haben die Robustheit unserer Methode gegenüber
Adversarial-Angriffen mit v4.0.0 von CleverHans bewertet. Auf einem Testsatz, der mit der
FastGradientMethod mit einer Max-Norm eps von 0.3 modifiziert wurde, erzielten wir eine Genauigkeit des Testsatzes von 71,3 %."
Wenn Sie CleverHans für akademische Forschung verwenden, wird dringend empfohlen (aber nicht verlangt), die folgende Veröffentlichung zu zitieren:
@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}
}
Der Name CleverHans bezieht sich auf eine Präsentation von Bob Sturm mit dem Titel „Clever Hans, Clever Algorithms: Are Your Machine Learnings Learning What You Think?" und die entsprechende Veröffentlichung, „A Simple Method to Determine if a Music Information Retrieval System is a 'Horse'.“ Clever Hans war ein Pferd, das schien, das Beantworten von Rechenfragen gelernt zu haben, aber in Wirklichkeit nur gelernt hatte, soziale Hinweise zu lesen, die es ihm ermöglichten, die richtige Antwort zu geben. In kontrollierten Umgebungen, in denen es die Gesichter der Menschen nicht sehen oder anderes Feedback erhalten konnte, war es nicht in der Lage, dieselben Fragen zu beantworten. Die Geschichte von Clever Hans ist eine Metapher für Machine-Learning-Systeme, die möglicherweise eine sehr hohe Genauigkeit auf einem Testsatz erzielen, der aus derselben Verteilung wie die Trainingsdaten stammt, die die zugrunde liegende Aufgabe jedoch nicht wirklich verstehen und bei anderen Eingaben schlecht abschneiden.
Diese Bibliothek wird gemeinsam vom CleverHans Lab an der University of Toronto gepflegt. Der aktuelle Ansprechpartner ist Jonas Guan. Zuvor wurde sie von Ian Goodfellow und Nicolas Papernot gepflegt.
Die folgenden Autoren haben 100 Zeilen oder mehr beigetragen (geordnet nach der GitHub-Beitragendenseite):
Copyright 2021 - Google Inc., OpenAI, Pennsylvania State University, University of Toronto.