
Библиотека состязательных примеров для построения атак, создания защит и сравнительного тестирования тех и других.
Этот репозиторий содержит исходный код CleverHans — библиотеки Python для оценки уязвимости систем машинного обучения к состязательным примерам. Подробнее о таких уязвимостях можно узнать в сопутствующем блоге.
Библиотека CleverHans находится в постоянном развитии и всегда рада вкладу в виде новейших атак и защит. В частности, мы всегда приветствуем помощь в решении открытых вопросов.
Начиная с версии v4.0.0, CleverHans поддерживает 3 фреймворка: JAX, PyTorch и TF2. В настоящее время мы в первую очередь реализуем
атаки в PyTorch, но очень приветствуем вклад для всех трёх фреймворков. В версиях v3.1.0 и более ранних
CleverHans поддерживал TF1; код для v3.1.0 можно найти в cleverhans_v3.1.0/ или
переключившись на более ранний релиз на GitHub.
Библиотека сосредоточена на предоставлении эталонных реализаций атак против моделей машинного обучения, чтобы помочь в сравнительном тестировании моделей на устойчивость к состязательным примерам.
Структура каталогов следующая:
cleverhans/ содержит реализации атак, tutorials/ — скрипты, демонстрирующие возможности
CleverHans, а defenses/ — реализации защит. Каждый фреймворк имеет свой подкаталог
внутри этих папок, например cleverhans/jax.
Эта библиотека использует Jax, PyTorch или TensorFlow 2 для ускорения графовых вычислений, выполняемых многими моделями машинного обучения. Поэтому установка одной из этих библиотек является обязательным условием.
После того как зависимости установлены, вы можете установить CleverHans с помощью
pip или клонировав этот репозиторий на GitHub.
pipЕсли вы устанавливаете CleverHans с помощью pip, выполните следующую команду:
pip install cleverhans
Будет установлена последняя версия, загруженная на Pypi. Если вместо этого вы хотите установить самую свежую версию, используйте:
pip install git+https://github.com/cleverhans-lab/cleverhans.git#egg=cleverhans
Если вы хотите сделать редактируемую установку CleverHans, чтобы иметь возможность разрабатывать библиотеку и вносить изменения обратно, сначала сделайте форк репозитория на GitHub, а затем клонируйте свой форк в каталог по вашему выбору:
git clone https://github.com/<your-org>/cleverhans
Затем вы можете установить локальный пакет в «редактируемом» режиме, чтобы добавить его в
ваш PYTHONPATH:
cd cleverhans
pip install -e .
Хотя CleverHans, вероятно, будет работать и на многих других конфигурациях машин, в настоящее время мы тестируем его с Python 3.6, Jax 0.2, PyTorch 1.7 и Tensorflow 2.4 на Ubuntu 18.04 LTS (Bionic Beaver).
Если у вас есть запрос на поддержку, пожалуйста, задайте вопрос на StackOverflow, а не открывайте issue в трекере GitHub. Трекер issues на GitHub следует использовать только для сообщения об ошибках или запросов новых функций.
Вклад приветствуется! Чтобы ускорить процесс рецензирования кода, мы просим:
Black
в ваших pull request.Исправления ошибок могут быть инициированы через pull request на GitHub.
tutorialsЧтобы помочь вам начать работу с функциями, предоставляемыми этой библиотекой,
папка tutorials/ содержит следующие учебные пособия:
ПРИМЕЧАНИЕ: за учебными пособиями тщательно следят, в том смысле, что мы используем непрерывную интеграцию, чтобы гарантировать их работоспособность. Они не считаются частью API и могут быть изменены в любое время без предупреждения. Вам не следует писать сторонний код, который импортирует учебные пособия, и ожидать, что интерфейс не сломается. Только основная библиотека подлежит нашему правилу шестимесячного предупреждения об устаревании интерфейса.
ПРИМЕЧАНИЕ: пожалуйста, создайте тему на дискуссионном форуме, прежде чем писать новое учебное пособие. Поскольку каждое новое руководство включает большой объём дублирующегося кода по сравнению с существующими руководствами, и поскольку каждая строка кода требует постоянного тестирования и сопровождения бессрочно, мы в целом предпочитаем не добавлять новые руководства. Каждое учебное пособие должно демонстрировать совершенно иной способ использования библиотеки. Просто использование другой атаки, модели или набора данных недостаточно для оправдания поддержки параллельного руководства.
examplesПапка examples/ содержит дополнительные скрипты, демонстрирующие различные способы
использования библиотеки CleverHans, или помогающие начать участвовать в различных состязаниях по
состязательным примерам. Мы не обеспечиваем почти такой же уровень постоянного сопровождения или поддержки
для этого каталога, как для остальной части библиотеки, и если код здесь сломается,
мы можем просто удалить его без предупреждения.
Поскольку мы недавно прекратили поддержку TF1, каталог examples/ сейчас
пуст, но вы можете отправить свои варианты использования через pull request :)
Старые примеры для CleverHans v3.1.0 и более ранних версий можно найти в cleverhans_v3.1.0/examples/.
При составлении отчётов о результатах тестирования, пожалуйста:
Например, вы можете указать: «Мы оценили устойчивость нашего метода к
состязательной атаке, используя v4.0.0 CleverHans. На тестовом наборе, модифицированном с помощью
FastGradientMethod с максимальной нормой eps 0,3, мы получили точность на тестовом наборе 71,3%».
Если вы используете CleverHans в академических исследованиях, настоятельно рекомендуется (хотя и не обязательно) цитировать следующую статью:
@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}
}
Название CleverHans отсылает к презентации Боба Штурма под названием «Clever Hans, Clever Algorithms: Are Your Machine Learnings Learning What You Think?» и соответствующей публикации "A Simple Method to Determine if a Music Information Retrieval System is a 'Horse'." Умный Ганс — это лошадь, которая, казалось, научилась отвечать на арифметические вопросы, но на самом деле научилась лишь считывать социальные сигналы, позволявшие ей давать правильный ответ. В контролируемых условиях, когда она не могла видеть лица людей или получать другую обратную связь, она не могла ответить на те же вопросы. История Умного Ганса — это метафора для систем машинного обучения, которые могут достигать очень высокой точности на тестовом наборе, взятом из того же распределения, что и обучающие данные, но которые на самом деле не понимают основную задачу и показывают плохие результаты на других входных данных.
Эта библиотека совместно поддерживается CleverHans Lab в Университете Торонто. Текущее контактное лицо — Джонас Гуань. Ранее её поддерживали Иан Гудфеллоу и Николас Паперно.
Следующие авторы внесли 100 или более строк кода (в порядке согласно странице участников GitHub):
Copyright 2021 - Google Inc., OpenAI, Pennsylvania State University, University of Toronto.