# Aprendizaje federado

El aprendizaje federado (también llamado aprendizaje colaborativo) es una técnica de aprendizaje automático que entrena un algoritmo a través de una arquitectura descentralizada formada por múltiples dispositivos los cuales contienen sus propios datos locales y privados. Creado por Google en el año 2017, este enfoque contrasta con las técnicas tradicionales de aprendizaje automático centralizado y de enfoques descentralizados más clásicos, en las que todos los conjuntos de datos se cargan en un servidor de manera idéntica a como están almacenados en local. Gracias a esto se conserva la integridad de la información que está siendo utilizada para el aprendizaje sin poner en peligro la privacidad y seguridad.
El aprendizaje federado es una herramienta muy potente en el sector médico, defensa, telecomunicaciones, IoT o farmacia entre muchos otros campos.

## Definición

El aprendizaje federado tiene como objetivo entrenar un algoritmo de aprendizaje automático, por ejemplo, redes neuronales profundas, a múltiples actores y así construir un modelo de aprendizaje automático común y robusto sin intercambiar explícitamente muestras de datos. El principio general de este aprendizaje consiste en entrenar modelos locales sobre muestras de datos también locales e intercambiar con cierta frecuencia parámetros (por ejemplo, los pesos de una red neuronal profunda) entre estos nodos locales para generar un modelo global compartido por todos los nodos.
La principal diferencia entre el aprendizaje federado y el distribuido radica en los supuestos que se hacen sobre las propiedades de los conjuntos de datos locales ya que el aprendizaje distribuido tiene como objetivo original paralelizar la potencia de cálculo, mientras que el aprendizaje federado tiene como objetivo original el entrenamiento en conjuntos de datos heterogéneos. Los clientes que participan en el aprendizaje federado pueden ser poco fiables, ya que están sujetos a más fallos o abandonos, ya que suelen depender de medios de comunicación menos potentes y de sistemas alimentados por baterías. En contraparte, en el aprendizaje distribuido los nodos suelen ser centros de datos que tienen potentes capacidades de cálculo y están conectados entre sí con redes rápidas.

### Algoritmo Centralizado

En el aprendizaje federado centralizado se utiliza un servidor central que ejerce de director para coordinar los pasos del algoritmo y coordinar el resto de nodos. Este servidor central es el responsable de la elección de los nodos participantes al inicio del algoritmo, de su entrenamiento y de las actualizaciones pertinentes durante el algoritmo.
El principal problema de esta distribución centralizada es que todos los nodos participantes tienen que enviar actualizaciones a una única entidad (nodo central) por lo que este puede convertirse un cuello de botella para el sistema.

### Algoritmo Descentralizado

El algoritmo descentralizado, a diferencia del centralizado, no tiene un servidor central que gobierne el algoritmo. En este entorno se sigue una topología de red, donde serán los propios nodos quienes se coordinen entre sí, sin la necesidad de ser gobernados por un servidor central. De esta forma se evita el problema del cuello de botella que ocurría en la arquitectura centralizada. No obstante, el uso de esta descentralización provocará una serie de complicaciones que pueden afectar en el proceso de aprendizaje de esta.

### Algoritmo Heterogéneo

Un número cada vez mayor de dominios de aplicación implican un gran conjunto de clientes heterogéneos. Este caso se puede dar en dispositivos como teléfonos móviles o dispositivos IoT. La mayoría de las estrategias de aprendizaje federado existentes asumen que los modelos locales comparten la misma arquitectura de modelo global. Recientemente, se ha desarrollado un nuevo marco de aprendizaje federado denominado HeteroFL para abordar clientes heterogéneos equipados con capacidades de computación y comunicación muy diferentes. Esta técnica permite habilitar el entrenamiento de modelos locales heterogéneos con complejidades de cálculo que varían dinámicamente, sin dejar de producir un único modelo de inferencia global

## Funcionamiento

Para garantizar un buen rendimiento de la tarea de un modelo de aprendizaje automático final y central, el aprendizaje federado se basa en un proceso iterativo dividido en un conjunto atómico de interacciones cliente-servidor conocido como ronda de aprendizaje federado. Cada ronda de este proceso consiste en la transmisión del estado actual del modelo global a los nodos participantes, el entrenamiento de los modelos locales en estos nodos locales para producir un conjunto de posibles actualizaciones del modelo en cada nodo, y luego la agregación y el procesamiento de estas actualizaciones locales en una única actualización global y su aplicación al modelo global
Existen varias estrategias posibles a seguir dependiendo del uso o no de servidores centrales. En el caso de que se use un servidor central, los nodos locales realizarán el entrenamiento en función de las órdenes recibidas del servidor. Por otro lado, siguiendo un enfoque peer-to-peer sería la comunicación entre nodos la que haría posible el entrenamiento de la red siguiendo metodologías de cotilleo.

### Proceso del aprendizaje federado

Gracias a un contrato Inteligente, se conformará la puesta en común de la información formando una cadena de bloques. Este contrato inteligente actuará como ejecutor de la cadena de bloques para realizar automáticamente el proceso de aprendizaje federado iterativo. Todos los participantes participan al principio en la formulación de dicho contrato inteligente. Una vez formado este contrato, se trasmite a través de la red (si tiene nodo central será el quien lo difunda a los demás nodos, y si no siguiendo una forma de trabajo peer-to-peer) y se almacena en la cadena de bloques. Por último, el contrato ya en la cadena de bloques ejecutará el proceso de aprendizaje automáticamente. Una vez hecho esto, los participantes calculan el parámetro de configuración de aprendizaje basándose en el modelo actual. Encapsulan y transmiten a todos los nodos este parámetro, así como la tasa de error del modelo correspondiente.
Todos los nodos participantes en el aprendizaje compiten entre sí para obtener permiso para agregar nuevos bloques a la cadena. Esto se realiza captando resultados de la resolución de problemas matemáticos. Cuando un nodo obtiene el permiso de producir bloques, recopila todos los parámetros de configuración de aprendizaje y actualiza el parámetro del modelo conjunto en la cadena de bloques. Este nuevo bloque que se genera en la cadena de bloques contiene el valor del hash y la hora y la información de transacción del bloque. La optimización del parámetro de configuración de aprendizaje es la parte más crítica del aprendizaje federado.
El aprendizaje federado implementa el entrenamiento de modelos mediante la iteración continua para optimizar la actualización del modelo local. Estos parámetros de optimización representan distintos procesos de aprendizaje. Como los nodos solo comparten el parámetro de configuración de aprendizaje sin necesidad de compartir nada más, se mantiene la privacidad de los datos de los participantes.

#### Fases

En el protocolo del aprendizaje federado participan 2 tipos de dispositivos, los dispositivos que trabajan como nodos y el servidor donde se almacena la información para llevar a cabo el algoritmo, que por lo general es un servidor en la nube. Cuando los dispositivos anuncian que están listos para ejecutar una tarea del servidor, este especifica mediante un nombre único global el problema de aprendizaje o aplicación que los nodos van a ejecutar.
Una tarea es un cálculo específico para una población, un entrenamiento que se realizará con hiperparámetros o bien con la evaluación de modelos entrenados en local con los datos del dispositivo. Lo normal es que el servidor tenga decenas de miles de dispositivos disponibles, pero este, seleccionará un subconjunto de unos pocos cientos para trabajar en una tarea específica del aprendizaje federado. Esta comunicación entre dispositivos y servidor se denomina ronda.
Una vez se han comunicado el servidor indica a los dispositivos qué cálculo han de ejecutar. Esto se hace con un plan que incluye una estructura de datos, un gráfico generado con TensorFlow e instrucciones sobre cómo ejecutarlo. Una vez por ronda, el servidor envía a cada participante el parámetro del modelo global actual y cualquier otro que sea necesario. Cada participante o nodo hará un cálculo basado en el estado global y su conjunto de datos local. Y posteriormente enviará una actualización en forma de punto de control al servidor. El servidor incorporará estas actualizaciones de todos los nodos y repetirá el proceso iterativamente.
El protocolo de comunicación permite que los dispositivos avancen el modelo global (singleton de una población) entre rondas. Cada una de las rondas consta de las siguientes fases:
* Inicialización y Selección: Periódicamente, los dispositivos (nodos) que cumplen con los criterios propuestos por el servidor son candidatos para ser elegidos. De todos los candidatos el servidor escoge un subconjunto. Los dispositivos no elegidos reciben un mensaje del servidor para que se vuelvan a conectar en un momento posterior.
* Configuración: El servidor se configura según el método de agregación que haya sido seleccionado para los dispositivos elegidos en la primera etapa. El servidor envía a cada uno de los nodos el plan y un punto de control con el modelo global.
* Informes: El servidor espera que los nodos participantes informen de las actualizaciones. A medida que las recibe, el servidor las agrega mediante el promedio federado e indica a los dispositivos cuándo deben volver a conectarse. Si un número suficiente de dispositivos informan a tiempo, la ronda se completa con éxito y el servidor actualiza su modelo global. De lo contrario la ronda se abandona.
El servidor tiene cierta flexibilidad y tolerancia a fallos cuando algunos dispositivos no informan a tiempo. Esto es configurable por medio de la tarea.
Las fases de selección e informes están especificadas por un conjunto de parámetros que generan ventanas de tiempo flexibles. La fase de selección dura hasta que se alcanza el recuento de objetivos, o se agota el tiempo de espera

#### Dirección de ritmo

La dirección de ritmo es un mecanismo que controla el patrón de conexiones de los dispositivos. Habilita al servidor tanto para poder manejar poblaciones de dispositivos muy pequeñas, o por el contrario escalar a una población de dispositivos de unas dimensiones considerablemente grandes. El control de ritmo se basa en el mecanismo simple del servidor. Escala este tipo de poblaciones sugiriendo al dispositivo la ventana de tiempo necesaria para que este vuelva a conectarse. Este parámetro es respetado en el módulo de elegibilidad.
Cuando se habla de poblaciones pequeñas se utiliza el control de ritmo para asegurar que un número suficiente de dispositivos se conecten a un servidor simultáneamente. Esto influye en la tasa de progreso de la tarea como en las propiedades de seguridad del protocolo de agregación segura. Para poblaciones grandes, el control del ritmo se utiliza para aleatorizar los tiempos de registro del dispositivo. De esta manera se evita una “manada atronadora” provocada cuando muchos dispositivos se conectan con mucha frecuencia al servidor, y los cuellos de botella que esto conlleva. Esta frecuencia debe ser controlada, para ser óptima pero no demasiada, ya que un exceso de control también saturaría el servidor.

### Datos No-iid

El sistema de aprendizaje federado permite una forma de trabajo donde no sea necesario tener datos idéntica e independientemente distribuidos (no-iid). Ante esto, el rendimiento del proceso de formación puede variar en función del desequilibrio de las muestras de datos locales, así como de la distribución probabilística de las muestras tomadas como ejemplo por cada uno de los nodos.
El concepto de los datos non-iid reside en el análisis e probabilidad conjunta entre características y etiquetas par cada nodo, consiguiendo desacoplar cada contribución teniendo en cuenta la distribución específica de muestreo en los nodos locales. Las principales categorías de datos no-iid son las siguientes:
* Desplazamiento de covariantes: Los nodos locales pueden almacenar ejemplos que tienen distribuciones estadísticas diferentes en comparación con otros nodos. Un ejemplo se da en los conjuntos de datos de procesamiento del lenguaje natural en los que las personas suelen escribir los mismos dígitos/letras con diferentes anchos de trazo o inclinaciones. También puede encontrarse un ejemplo en el procesamiento de reconocimiento de un árbol en función del follaje único que posee cada individuo.
* Desplazamiento de la probabilidad previa: Los nodos locales pueden almacenar etiquetas que tienen distribuciones estadísticas diferentes en comparación con otros nodos. Esto puede ocurrir si los conjuntos de datos están divididos regional o demográficamente.
* Cambio de concepto (mismas características, diferentes etiquetas): Los nodos locales pueden compartir las mismas etiquetas, pero algunas de ellas corresponden a diferentes características en diferentes nodos locales.
* Cambio de concepto (diferentes características, mismas etiquetas): Los nodos locales pueden compartir las mismas características pero algunas de ellas corresponden a diferentes etiquetas en diferentes nodos locales.
* Desequilibrio: Los datos disponibles en los nodos locales pueden variar significativamente en tamaño a causa de la probabilidad estadística de información útil en el muestreo disponible para cada uno de ellos.

### Parámetros de personalización

La personalización de parámetros es la principal herramienta de configuración de estos escenarios de aprendizaje. A continuación se desarrollan los parámetros de personalización más comunes:
* Tarea de búsqueda de información: se utiliza para facilitar la búsqueda de información útil haciendo pasar toda la información disponible por un filtro de dominio específico.
* Nivel de conocimiento: se utiliza para tener en cuenta el historial del nodo a la hora de comunicarle nueva información para seguir entrenando
* Objetivos de aprendizaje: se utilizan para planificar el aprendizaje y comunicar los materiales de aprendizaje que satisfacen los objetivos del nodo.
* Preferencia de multimedia: permite escoger los materiales de aprendizaje que más prefiere (texto, fotografía, vídeo, audio, gráficos, etc.).
* Preferencia lingüística: permite presentar el material de aprendizaje en el idioma preferido por el nodo.
* Nivel de motivación: definido por Keller (1983), identifica cuatro componentes esenciales para la motivación: atención relevancia, confianza y satisfacción.
Otros parámetros que sirven para configurar el proceso de aprendizaje son:
* Número de rondas de aprendizaje federado: $T$
* Número total de nodos utilizados en el proceso: $K$
* Fracción de nodos utilizados en cada iteración para cada nodo: $C$
* Tamaño del lote local utilizado en cada iteración de aprendizaje: $B$
Existen varios estilos a seguir sobre los modelos de aprendizaje:
* Ciclo de aprendizaje de Kolb: modelo de aprendizaje experiencial propuesto por Kolb (1984) compuesto por cuatro etapas (experiencia concreta, observación reflexiva, conceptualización abstracta y experimentación activa) que acepta estilos de aprendizaje derivados.
* Estilo de aprendizaje de de Honey-Mumford: Honey y Mumford (1986) identificaron cuatro estilos de aprendizaje (Activista, Reflexivo, Teórico y Pragmático), que tienen mucho en común con el trabajo de Kolb y presentan fuertes correlaciones con el ciclo de aprendizaje.
* Estilo de aprendizaje de de Felder-Silverman: Felder y Silverman (1988) propusieron cuatro dimensiones de estilos de aprendizaje (Sensible/Intuitivo, Visual/Verbal, Activo/Reflexivo, y Secuencial/Global) relativas a las formas en que se recibe y procesa la información.
* Estilo de aprendizaje de La Garanderie: La Garanderie (1993) Basándose en estudios psicológicos definió seis estilos de aprendizaje (competitivo, cooperativo, acceso al escape, participativo, dependiente e independiente).

## Variaciones del Aprendizaje federado

Las características de los datos no identificados en la red, la baja participación de los dispositivos y el mandato de que los datos permanezcan privados suponen un reto a la hora de entender la convergencia de los algoritmos de aprendizaje federado. Es por esto que se aplican técnicas para tratar con estos problemas.

### Promedio federado

El promediado federado (FedAvg) es una generalización de FedSGD, que permite a los nodos locales realizar más de una actualización por lotes en los datos locales e intercambiar los pesos actualizados en lugar de los gradientes. Además, promediar los pesos sintonizados que provienen de la misma inicialización no perjudica necesariamente el rendimiento del modelo promediado resultante. A pesar de su simplicidad, carece de garantías teóricas en entornos realistas.
El aprendizaje federado convencional se basa en el descenso de gradiente en cada dispositivo trabajador (nodo): En cada ronda, cada trabajador actualiza localmente sus pesos por descenso de gradiente durante un número de veces por su conjunto de datos local, y luego el nodo central o agregador promedia los pesos de todos los trabajadores y los distribuye a los trabajadores de nuevo. El proceso anterior se repite para múltiples rondas. La principal desventaja de este método es su baja eficiencia. Se sabe que los altos gastos generales de comunicación debido a las frecuentes transmisiones en gradiente desaceleran el FL. Para mitigar los gastos generales de comunicación, se han estudiado dos técnicas principales: (i) actualización local de ponderaciones que caracterizan la compensación entre comunicación y computación y (ii) compresión de gradiente que caracteriza la compensación entre comunicación y precisión.

### Descenso de gradiente estocástico federado (FedSGD)

El entrenamiento del aprendizaje profundo se basa principalmente en variantes del descenso de gradiente estocástico, en el que los gradientes se calculan en un subconjunto aleatorio del conjunto de datos y luego se utilizan para realizar un paso del descenso de gradiente. Los gradientes son promediados por el servidor proporcionalmente al número de muestras de entrenamiento en cada nodo, y se utilizan para hacer un paso de descenso de gradiente. Gracias a esto se obtiene un resultado continuo al poner en conjunto los resultados individuales del entrenamiento de cada nodo local. Si todos los nodos locales parten de la misma inicialización, promediar los gradientes es estrictamente equivalente a promediar los propios pesos.

### Descenso de gradiente acelerado de Nesterov (NAG)

Este entrenamiento es más ventajoso en un entorno de entrenamiento centralizado. En este método, cada trabajador actualiza sus pesos basándose en el gradiente acelerado de Nesterov (NAG) en lugar del descenso de gradiente. Para cada ronda se seguirá el mismo proceso que en el promedio federado, pero cuanto mayor sea el número total de rondas, más se reducen las agregaciones, y por tanto se sobrecarga menos la comunicación entre los nodos para actualizar ese peso.

## Ventajas y desventajas

La principal ventaja del aprendizaje Federado descentralizado es la privacidad de los datos, ya que los modelos locales se añaden a la red y ayudan a un modelo general, pero al no tener que compartir los datos directamente, se garantiza la confidencialidad de cada uno de los nodos y sus datos.
Por el contrario, la implementación de este aprendizaje tiene claras desventajas ya depende de la capacidad del dispositivo local para ser entrenado. Esto a día de hoy entrama un problema menor, ya que la mayoría de dispositivos inteligentes son capaces de ejecutar estos algoritmos de auto-aprendizaje, pero hace unos años, esto si era realmente una complicación real a la que se enfrentaba el algoritmo ya que muchos dispositivos no tenían la capacidad de cómputo para poder llevar a cabo ese auto entrenamiento que requiere el aprendizaje federado.
Otra dificultad del algoritmo se basa en disponer de datos etiquetados para el entrenamiento local. Debido a esto, el tiempo de convergencia de estos modelos comparados con el aprendizaje automático tradicional es mayor.

## Usos Actuales

El aprendizaje federado no fue una gran revolución cuando Google lo inventó en 2017, debido a que no se sabía a qué proyectos reales en desarrollo se podía aplicar tal aprendizaje. Actualmente, se ha descubierto el potencial de este tipo de aprendizajes descentralizados y se está utilizando principalmente en 3 áreas.

### Transporte: Conducción autónoma

Una conducción autónoma de un coche necesita multitud de tecnologías de aprendizaje automático para funcionar: Visión para analizar obstáculos, aprendizaje para la adaptación de la velocidad al entorno, etcétera. Debido a la cantidad de vehículos autónomos que se usarían si este proyecto fructuase, y la necesidad imperial de una rápida respuesta, hace que el enfoque tradicional de aprendizaje en la nube genere grandes riesgos de seguridad. El aprendizaje federado puede ser una gran solución para limitar este volumen de transferencia de datos y acelerar los procesos de aprendizaje de los coches autónomos.

### Industria 4.0: Fabricación Inteligente

La industria 4.0 tiene una tendencia generalizada a la adopción de técnicas de aprendizaje automático, con el objetivo de mejorar la eficiencia y la eficacia de los procesos industriales al tiempo que se garantiza la seguridad. El problema llega con la privacidad de datos confidenciales que tanto las industrias como las empresas manejan. Por ello, el aprendizaje federado puede resolver este problema ya que, como se explica anteriormente, no revela ningún dato sensible.

### Medicina

El aprendizaje federado ha encontrado en el campo médico y sanitario un gran sector en el que explotar la máximo su potencial, ya que el principal problema de este, era la gran confidencialidad y sensibilidad de los datos que maneja. Con un aprendizaje tradicional en la nube, todos estos datos se verían expuestos de una forma muy clara y con una gran brecha de seguridad de información. Por ello, gracias a este nuevo aprendizaje, se podrá entrenar las redes de los distintos hospitales, para utilizar sus inmensas bases de datos como entrenamiento sin comprometer la seguridad de los mismos. Esto supone un gran avance y se está trabajando intensamente en esta área.