Path: blob/master/site/es-419/federated/tff_for_research.md
25115 views
Cómo usar TFF para la investigación sobre el aprendizaje federado
Descripción general
TFF es un marco de trabajo extensible y potente para llevar a cabo investigaciones sobre aprendizaje federado (FL) por medio de la simulación de cálculos federados en conjuntos de datos proxy realistas. Esta página describe los principales conceptos y componentes relevantes para las simulaciones de investigación, así como una guía detallada para llevar a cabo diferentes tipos de investigación en TFF.
La estructura típica del código de investigación en TFF.
Una simulación de FL de investigación que se implementa en TFF generalmente consta de tres tipos principales de lógica.
Piezas individuales de código TensorFlow, comúnmente
tf.function
s, que encapsulan la lógica que se ejecuta en una única ubicación (por ejemplo, en clientes o en un servidor). Este código suele escribirse y probarse sin referenciastff.*
, y se puede reutilizar fuera de TFF. Por ejemplo, el bucle de entrenamiento del cliente en el promediado federado se implementa en este nivel.Lógica de orquestación federada de TensorFlow, que une las
tf.function
s individuales de 1. al envolverlas comotff.tf_computation
s y luego orquestarlas mediante abstracciones comotff.federated_broadcast
ytff.federated_mean
dentro de unatff.federated_computation
. Consulte, por ejemplo, esta orquestación para el promediado federado.Un script de controlador externo que simula la lógica de control de un sistema de FL de producción, seleccionando clientes simulados de un conjunto de datos para luego ejecutar cálculos federados definidos en 2. en esos clientes. Por ejemplo, un controlador de experimento EMNIST federado.
Conjuntos de datos de aprendizaje federado
TensorFlow federado aloja múltiples conjuntos de datos que son representativos de las características de los problemas del mundo real que podrían resolverse gracias al aprendizaje federado.
Nota: Cualquier marco de aprendizaje automático basado en Python puede consumir estos conjuntos de datos como arreglos Numpy, tal y como se documenta en la ClientData API.
Entre los conjuntos de datos se incluyen los siguientes:
StackOverflow. Un conjunto de datos de texto realista para tareas de modelado lingüístico o aprendizaje supervisado, con 342 477 usuarios únicos 135 818 730 ejemplos (frases) en el conjunto de entrenamiento.
EMNIST federado. Un preprocesamiento federado del conjunto de datos de caracteres y dígitos de EMNIST, en el que cada cliente corresponde a un escritor diferente. El conjunto de entrenamiento completo contiene 3400 usuarios con 671 585 ejemplos de 62 etiquetas.
Shakespeare. Un conjunto de datos de texto más pequeño a nivel de personaje que se basa en las obras completas de William Shakespeare. El conjunto de datos consta de 715 usuarios (personajes de obras de Shakespeare), donde cada ejemplo corresponde a un conjunto contiguo de líneas que dice el personaje en una obra en particular.
CIFAR-100. Una partición federada del conjunto de datos CIFAR-100 entre 500 clientes de entrenamiento y 100 clientes de prueba. Cada cliente tiene 100 ejemplos únicos. La partición se lleva a cabo de forma que se cree una heterogeneidad más realista entre los clientes. Si desea obtener más detalles, consulte la API.
Conjunto de datos Google Landmark v2. El conjunto de datos consta de fotos de varios lugares emblemáticos del mundo, con imágenes agrupadas por fotógrafo para lograr una partición federada de los datos. Hay dos tipos de conjuntos de datos disponibles: uno más pequeño, con 233 clientes que tiene 23 080 imágenes, y uno más grande con 1262 clientes y 164 172 imágenes.
CelebA. Un conjunto de datos de ejemplos (imagen y atributos faciales) de rostros de famosos. El conjunto de datos federado agrupa los ejemplos de cada famoso para formar un cliente. Hay 9343 clientes, cada uno con al menos 5 ejemplos. El conjunto de datos se puede dividir en grupos de entrenamiento y de prueba, ya sea por clientes o por ejemplos.
iNaturalist. Un conjunto de datos consta de fotos de diferentes especies. El conjunto de datos contiene 120 300 imágenes de 1203 especies. Hay siete versiones disponibles del conjunto de datos. Una de ellas se agrupa por fotógrafo y consta de 9257 clientes. Los demás conjuntos de datos se agrupan por la ubicación geográfica en la que se tomó la foto. Estas seis versiones del conjunto de datos constan de entre 11 y 3606 clientes.
Simulaciones de alto rendimiento
Aunque el tiempo de ejecución de una simulación de FL no es una medida relevante para evaluar algoritmos (ya que el hardware de simulación no es representativo de los entornos reales de implementación del FL), la capacidad de ejecutar simulaciones de FL con rapidez resulta fundamental para la productividad de la investigación. En este sentido, TFF dedica grandes esfuerzos a mejorar el rendimiento de los tiempos de ejecución en una o varias máquinas. La documentación está en desarrollo, pero por ahora consulte las instrucciones sobre simulaciones de TFF con aceleradores y las instrucciones de configuración de simulaciones con TFF en GCP. El tiempo de ejecución de TFF de alto rendimiento se encuentra activado por defecto.
TFF para diferentes áreas de investigación
Algoritmos de optimización federados
La investigación sobre algoritmos de optimización federados se puede abordar de diferentes maneras en TFF, en función del nivel de personalización que se desee.
Puede acceder a una implementación autónoma mínima del algoritmo de promediado federado aquí. El código incluye funciones de TF para el cálculo local, cálculos de TFF para la orquestación y un script de controlador en el conjunto de datos EMNIST como ejemplo. Estos archivos pueden adaptarse fácilmente para aplicaciones personalizadas y cambios algorítmicos siguiendo las instrucciones detalladas en el README.
Puede acceder a una implementación más general del promediado federado aquí. Esta implementación admite técnicas de optimización más sofisticadas, como el uso de diferentes optimizadores tanto en el servidor como en el cliente. Aquí se pueden encontrar otros algoritmos de aprendizaje federado, incluida la agrupación en clústeres de k-medias federados.
Compresión de actualización del modelo
La compresión con pérdidas de las actualizaciones del modelo puede traducirse en una reducción de los costos de comunicación, lo que a su vez puede generar una reducción del tiempo total de entrenamiento.
Para reproducir un artículo, consulte este proyecto de investigación. Para implementar un algoritmo de compresión personalizado, consulte comparison_methods en el proyecto para conocer las líneas de base como ejemplo, y el tutorial sobre agregadores de TFF en caso de que aún no esté familiarizado con este tema.
Privacidad diferencial
TFF se puede combinar con la biblioteca TensorFlow Privacy para permitir la investigación de nuevos algoritmos para el entrenamiento federado de modelos con privacidad diferencial. Si desea ver un ejemplo de entrenamiento con DP en el que se utiliza el algoritmo básico DP-FedAvg y sus extensiones, consulte este controlador de experimentos.
Si desea implementar un algoritmo DP personalizado y aplicarlo a las actualizaciones agregadas de promediado federado, puede implementar un nuevo algoritmo DP promedio como una subclase de tensorflow_privacy.DPQuery
y crear un tff.aggregators.DifferentiallyPrivateFactory
con una instancia de su consulta. Puede consultar un ejemplo de implementación del algoritmo DP-FTRL aquí
Las GAN federadas (que se describen a continuación) son otro ejemplo de un proyecto de TFF que aplica la privacidad diferencial a nivel de usuario (por ejemplo, aquí en código).
Robustez y ataques
TFF también se puede usar para simular los ataques dirigidos a sistemas de aprendizaje federados y defensas diferenciales basadas en la privacidad que se consideran en ¿Puede realmente vulnerarse el aprendizaje federado?. Esto se hace mediante la creación de un proceso iterativo con clientes potencialmente maliciosos (consulte build_federated_averaging_process_attacked
). El directorio target_attack contiene más detalles.
Se pueden implementar nuevos algoritmos de ataque si se escribe una función de actualización del cliente que sea una función de TensorFlow. Consulte
ClientProjectBoost
para acceder a un ejemplo.Se pueden implementar nuevas defensas al personalizar 'tff.utils.StatefulAggregateFn' que agrega las salidas del cliente para obtener una actualización global.
Si desea ver un script de ejemplo para la simulación, consulte emnist_with_targeted_attack.py
.
Redes generativas adversativas
Las GAN ofrecen un patrón de orquestación federada interesante que difiere un poco del promediado federado estándar. Involucran dos redes distintas (el generador y el discriminador) y cada una de ellas se entrena con su propio paso de optimización.
TFF se puede usar para la investigación sobre el entrenamiento federado de GAN. Por ejemplo, el algoritmo DP-FedAvg-GAN que se presentó en un trabajo reciente se implementa en TFF. Este trabajo demuestra la eficacia de combinar el aprendizaje federado, los modelos generativos y la privacidad diferencial.
Personalización
La personalización en el marco del aprendizaje federado es un campo de investigación activo. El objetivo de la personalización es facilitar diferentes modelos de inferencia a diferentes usuarios. Este problema se puede abordar de distintas maneras.
Un enfoque consiste en dejar que cada cliente ajuste un único modelo global (entrenado mediante aprendizaje federado) con sus datos locales. Este enfoque está vinculado al metaaprendizaje (consulte, por ejemplo, este artículo. En emnist_p13n_main.py
se ofrece un ejemplo de este enfoque. Para explorar y comparar diferentes estrategias de personalización, puede hacer lo siguiente:
Definir una estrategia de personalización mediante la implementación de una
tf.function
que parta de un modelo inicial, entrene y evalúe un modelo personalizado a partir de los conjuntos de datos locales de cada cliente. Puede ver un ejemplo enbuild_personalize_fn
.Definir un
OrderedDict
que asigne los nombres de las estrategias a las estrategias de personalización correspondientes y usarlo como argumento depersonalize_fn_dict
entff.learning.build_personalization_eval_computation
.
Otro enfoque consiste en evitar el entrenamiento de un modelo totalmente global y entrenar una parte del modelo de forma totalmente local. En esta entrada del blog se describe un ejemplo de este enfoque. Esta estrategia también está vinculada al metaaprendizaje, consulte este artículo. Si desea explorar el aprendizaje federado parcialmente local, puede hacer lo siguiente:
Consulte este tutorial para acceder a un ejemplo de código completo en el que se apliquen la reconstrucción federada y los ejercicios de seguimiento.
Use
tff.learning.reconstruction.build_training_process
para crear un proceso de entrenamiento parcialmente local y modifiquedataset_split_fn
para personalizar el comportamiento del proceso.