
공격을 구성하고 방어를 구축하며 둘 모두를 벤치마킹하기 위한 적대적 예제 라이브러리
이 저장소는 적대적 예제(adversarial examples)에 대한 머신러닝 시스템의 취약성을 벤치마킹하기 위한 Python 라이브러리인 CleverHans의 소스 코드를 포함합니다. 이러한 취약성에 대해 더 자세히 알아보려면 관련 블로그를 참조하세요.
CleverHans 라이브러리는 지속적으로 개발 중이며, 최신 공격 및 방어 기법의 기여(contributions)를 항상 환영합니다. 특히, 현재 열려 있는 이슈(issues)를 해결하는 데 도움을 주시면 항상 환영합니다.
v4.0.0부터 CleverHans는 JAX, PyTorch, TF2의 3가지 프레임워크를 지원합니다. 현재는 PyTorch에서의
공격 구현을 우선적으로 진행하고 있지만, 세 가지 프레임워크 모두에 대한 기여를 매우 환영합니다. v3.1.0 및 이전 버전에서
CleverHans는 TF1을 지원했습니다. v3.1.0의 코드는 cleverhans_v3.1.0/에서 찾거나
이전 Github 릴리스를 확인하면 됩니다.
이 라이브러리는 머신러닝 모델에 대한 공격의 참조 구현을 제공하여 적대적 예제에 대한 모델 벤치마킹을 돕는 데 중점을 둡니다.
디렉터리 구조는 다음과 같습니다:
cleverhans/에는 공격 구현이, tutorials/에는 CleverHans의 기능을 보여주는 스크립트가,
defenses/에는 방어 구현이 포함되어 있습니다. 각 프레임워크는
이 폴더 안에 고유한 하위 디렉터리를 가지고 있습니다(예: cleverhans/jax).
이 라이브러리는 많은 머신러닝 모델이 수행하는 그래프 계산을 가속화하기 위해 Jax, PyTorch 또는 TensorFlow 2를 사용합니다. 따라서 이러한 라이브러리 중 하나를 설치하는 것이 선행 조건입니다.
의존성이 처리되면 pip를 사용하거나 이 Github 저장소를 클론하여 CleverHans를
설치할 수 있습니다.
pip 설치pip를 사용하여 CleverHans를 설치하는 경우 다음 명령을 실행하세요:
pip install cleverhans
그러면 Pypi에 업로드된 마지막 버전이 설치됩니다. 최신 개발 버전을 설치하려면 다음을 사용하세요:
pip install git+https://github.com/cleverhans-lab/cleverhans.git#egg=cleverhans
CleverHans를 편집 가능한(editable) 설치로 만들어 라이브러리를 개발하고 변경 사항을 기여하려면, 먼저 GitHub에서 저장소를 포크한 다음 원하는 디렉터리에 포크를 클론하세요:
git clone https://github.com/<your-org>/cleverhans
그런 다음 로컬 패키지를 "editable" 모드로 설치하여 PYTHONPATH에
추가할 수 있습니다:
cd cleverhans
pip install -e .
CleverHans는 다른 많은 시스템 구성에서도 작동할 가능성이 높지만, 현재 Ubuntu 18.04 LTS (Bionic Beaver)에서 Python 3.6, Jax 0.2, PyTorch 1.7, Tensorflow 2.4로 테스트하고 있습니다.
지원 요청이 있는 경우 GitHub 트래커에 이슈를 여는 대신 StackOverflow에 질문을 올려 주세요. GitHub 이슈 트래커는 버그 신고 또는 기능 요청에 만 사용해야 합니다.
기여는 환영합니다! 코드 리뷰 과정을 빠르게 하기 위해 다음을 요청합니다:
Black
코딩 스타일을 따라야 합니다.버그 수정은 Github 풀 리퀘스트를 통해 진행할 수 있습니다.
tutorials 디렉터리이 라이브러리에서 제공하는 기능을 시작하는 데 도움이 되도록
tutorials/ 폴더에는 다음 튜토리얼이 포함되어 있습니다:
참고: 튜토리얼은 지속적으로 계속 작동하는지 확인하기 위해 지속적 통합(continuous integration)을 사용한다는 점에서 주의 깊게 유지 관리됩니다. 튜토리얼은 API의 일부로 간주되지 않으며 예고 없이 언제든지 변경될 수 있습니다. 튜토리얼을 임포트하는 타사 코드를 작성하고 인터페이스가 깨지지 않을 것이라고 기대해서는 안 됩니다. 6개월 인터페이스 폐기 경고 규칙이 적용되는 것은 기본 라이브러리뿐입니다.
참고: 새 튜토리얼을 작성하기 전에 토론 게시판에 스레드를 시작해 주세요. 각 새 튜토리얼은 기존 튜토리얼에 비해 많은 양의 중복 코드를 수반하고, 모든 코드 줄은 무기한 지속적인 테스트와 유지 관리가 필요하기 때문에, 일반적으로 새 튜토리얼을 추가하는 것을 선호하지 않습니다. 각 튜토리얼은 라이브러리를 사용하는 매우 다른 방식을 보여주어야 합니다. 단순히 다른 공격, 모델 또는 데이터셋을 호출하는 것만으로는 병렬 튜토리얼을 유지할 만한 이유가 되지 않습니다.
examples 디렉터리examples/ 폴더에는 CleverHans 라이브러리의 다양한 사용법을 보여주거나
다양한 적대적 예제 대회에 참가하는 데 도움이 되는 추가 스크립트가 포함되어 있습니다.
이 디렉터리는 라이브러리의 나머지 부분만큼 지속적인 유지 관리나 지원을 제공하지 않으며,
여기의 코드가 손상되면 예고 없이 삭제될 수 있습니다.
최근 TF1 지원을 중단했기 때문에 examples/ 폴더는 현재
비어 있지만, 풀 리퀘스트를 통해 여러분의 사용 사례를 제출해 주시면 환영합니다 :)
CleverHans v3.1.0 및 이전 버전의 이전 예제는 cleverhans_v3.1.0/examples/에서 찾을 수 있습니다.
벤치마크를 보고할 때는 다음을 지켜 주세요:
예를 들어, "CleverHans v4.0.0을 사용하여 적대적 공격에 대한 우리 방법의 강건성을 벤치마킹했습니다. 최대 놈(norm) eps가 0.3인 FastGradientMethod로 수정된 테스트 세트에서 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라는 이름은 Bob Sturm의 "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'."를 참조한 것입니다. Clever Hans는 산수 문제에 답하는 법을 배운 것처럼 보였지만, 실제로는 정답을 말할 수 있게 해주는 사회적 단서를 읽는 법만 배운 말이었습니다. 사람들의 얼굴을 볼 수 없거나 다른 피드백을 받을 수 없는 통제된 환경에서는 같은 질문에 답할 수 없었습니다. Clever Hans의 이야기는 훈련 데이터와 동일한 분포에서 추출된 테스트 세트에서 매우 높은 정확도를 달성할 수 있지만 실제로는 기본 작업을 이해하지 못하고 다른 입력에서는 성능이 저조한 머신러닝 시스템에 대한 은유입니다.
이 라이브러리는 토론토 대학교(University of Toronto)의 CleverHans Lab에서 공동으로 유지 관리합니다. 현재 연락 담당자는 Jonas Guan입니다. 이전에는 Ian Goodfellow와 Nicolas Papernot이 유지 관리했습니다.
다음 저자들은 100줄 이상을 기여했습니다(GitHub 기여자 페이지 기준):
Copyright 2021 - Google Inc., OpenAI, Pennsylvania State University, University of Toronto.