
Una biblioteca de ejemplos adversariales para construir ataques, desarrollar defensas y comparar ambos.
Este repositorio contiene el código fuente de CleverHans, una biblioteca de Python para evaluar la vulnerabilidad de los sistemas de aprendizaje automático a los ejemplos adversariales. Puedes aprender más sobre estas vulnerabilidades en el blog adjunto.
La biblioteca CleverHans está en continuo desarrollo, y siempre recibe contribuciones de los últimos ataques y defensas. En particular, siempre agradecemos ayuda para resolver los issues actualmente abiertos.
Desde v4.0.0, CleverHans soporta 3 frameworks: JAX, PyTorch y TF2. Actualmente priorizamos la implementación de ataques en PyTorch, pero agradecemos mucho las contribuciones para los 3 frameworks. En las versiones v3.1.0 y anteriores, CleverHans soportaba TF1; el código para v3.1.0 se puede encontrar en cleverhans_v3.1.0/ o revisando una versión anterior de Github.
La biblioteca se centra en proporcionar una implementación de referencia de ataques contra modelos de aprendizaje automático para ayudar a evaluar los modelos frente a ejemplos adversariales.
La estructura de directorios es la siguiente: cleverhans/ contiene implementaciones de ataques, tutorials/ contiene scripts que demuestran las funcionalidades de CleverHans, y defenses/ contiene implementaciones de defensas. Cada framework tiene su propio subdirectorio dentro de estas carpetas, p. ej., cleverhans/jax.
Esta biblioteca utiliza Jax, PyTorch o TensorFlow 2 para acelerar los cálculos de grafos realizados por muchos modelos de aprendizaje automático. Por lo tanto, instalar una de estas bibliotecas es un requisito previo.
Una vez que las dependencias hayan sido gestionadas, puedes instalar CleverHans usando pip o clonando este repositorio de Github.
pipSi estás instalando CleverHans usando pip, ejecuta el siguiente comando:
pip install cleverhans
Esto instalará la última versión subida a Pypi. Si prefieres instalar la versión más avanzada, usa:
pip install git+https://github.com/cleverhans-lab/cleverhans.git#egg=cleverhans
Si quieres hacer una instalación editable de CleverHans para poder desarrollar la biblioteca y contribuir con cambios, primero haz un fork del repositorio en GitHub y luego clona tu fork en un directorio de tu elección:
git clone https://github.com/<your-org>/cleverhans
Luego puedes instalar el paquete local en modo "editable" para añadirlo a tu PYTHONPATH:
cd cleverhans
pip install -e .
Aunque es probable que CleverHans funcione en muchas otras configuraciones de máquina, actualmente lo probamos con Python 3.6, Jax 0.2, PyTorch 1.7 y Tensorflow 2.4 en Ubuntu 18.04 LTS (Bionic Beaver).
Si tienes una solicitud de soporte, por favor haz una pregunta en StackOverflow en lugar de abrir un issue en el rastreador de GitHub. El rastreador de issues de GitHub debe solo utilizarse para reportar errores o hacer solicitudes de funciones.
¡Las contribuciones son bienvenidas! Para acelerar el proceso de revisión de código, pedimos que:
Black en tus pull requests.Las correcciones de errores pueden iniciarse mediante pull requests de Github.
tutorialsPara ayudarte a comenzar con las funcionalidades que proporciona esta biblioteca, la carpeta tutorials/ incluye los siguientes tutoriales:
NOTA: los tutoriales se mantienen cuidadosamente, en el sentido de que utilizamos integración continua para asegurarnos de que sigan funcionando. No se consideran parte de la API y pueden cambiar en cualquier momento sin previo aviso. No debes escribir código de terceros que importe los tutoriales y esperar que la interfaz no se rompa. Solo la biblioteca principal está sujeta a nuestra regla de aviso de desaprobación de interfaces con seis meses de antelación.
NOTA: por favor, inicia un hilo en el foro de discusión antes de escribir un nuevo tutorial. Debido a que cada nuevo tutorial implica una gran cantidad de código duplicado en relación con los tutoriales existentes, y porque cada línea de código requiere pruebas y mantenimiento continuos indefinidamente, generalmente preferimos no añadir nuevos tutoriales. Cada tutorial debe mostrar una forma extremadamente diferente de usar la biblioteca. Simplemente usar un ataque, modelo o conjunto de datos diferente no es suficiente para justificar el mantenimiento de un tutorial paralelo.
examplesLa carpeta examples/ contiene scripts adicionales para mostrar diferentes usos de la biblioteca CleverHans o para ayudarte a comenzar a competir en diferentes concursos de ejemplos adversariales. No ofrecemos ni mucho menos el mismo mantenimiento o soporte continuo para este directorio que para el resto de la biblioteca, y si el código aquí se rompe, podríamos simplemente eliminarlo sin previo aviso.
Dado que recientemente descontinuamos el soporte para TF1, la carpeta examples/ está actualmente vacía, ¡pero puedes enviar tus usos mediante un pull request :)
Los ejemplos antiguos para CleverHans v3.1.0 y anteriores se pueden encontrar en cleverhans_v3.1.0/examples/.
Al reportar benchmarks, por favor:
Por ejemplo, podrías reportar: "Evaluamos la robustez de nuestro método ante ataques adversariales usando la v4.0.0 de CleverHans. En un conjunto de prueba modificado por el FastGradientMethod con una eps de norma máxima de 0.3, obtuvimos una precisión del 71.3% en el conjunto de prueba."
Si usas CleverHans para investigación académica, te recomendamos encarecidamente (aunque no es obligatorio) citar el siguiente artículo:
@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}
}
El nombre CleverHans hace referencia a una presentación de Bob Sturm titulada “Clever Hans, Clever Algorithms: Are Your Machine Learnings Learning What You Think?" y la publicación correspondiente, "A Simple Method to Determine if a Music Information Retrieval System is a 'Horse'." Clever Hans era un caballo que parecía haber aprendido a responder preguntas aritméticas, pero en realidad solo había aprendido a leer señales sociales que le permitían dar la respuesta correcta. En entornos controlados donde no podía ver los rostros de las personas ni recibir otra retroalimentación, era incapaz de responder las mismas preguntas. La historia de Clever Hans es una metáfora de los sistemas de aprendizaje automático que pueden alcanzar una precisión muy alta en un conjunto de prueba extraído de la misma distribución que los datos de entrenamiento, pero que en realidad no entienden la tarea subyacente y se desempeñan mal en otras entradas.
Esta biblioteca es mantenida colectivamente por el CleverHans Lab de la Universidad de Toronto. El punto de contacto actual es Jonas Guan. Anteriormente fue mantenida por Ian Goodfellow y Nicolas Papernot.
Los siguientes autores contribuyeron con 100 líneas o más (ordenados según la página de contribuyentes de GitHub):
Copyright 2021 - Google Inc., OpenAI, Pennsylvania State University, University of Toronto.