# Apprendimento federato

L'apprendimento federato è una tecnica di apprendimento automatico che permette di addestrare un algoritmo attraverso l'utilizzo di dispositivi decentralizzati o server che mantengono i dati, senza la necessità di scambiare i dati stessi. Questo approccio si oppone alle tradizionali tecniche di apprendimento automatico centralizzate dove i dati vengono caricati su un server, o ai più tradizionali metodi decentralizzati che assumono che i dati locali sono distribuiti in modo identico.
L’apprendimento federato permette ai diversi partecipanti di costruire un modello per l’apprendimento automatico comune e robusto, senza lo scambio di qualsiasi dato. L'utilizzo di questa tecnica consente di affrontare problemi critici come la protezione, la sicurezza, e i diritti di accesso ai dati e l’impiego di dati eterogenei. Le principali applicazioni dell’apprendimento federato comprendono vari campi come la difesa, le telecomunicazioni, l’IoT e la farmaceutica.

## Definizione

L’apprendimento federato ha lo scopo di fornire metodi per addestrare un modello di apprendimento automatico, per esempio le reti neurali profonde, utilizzando i dati locali che sono distribuiti su più nodi senza la necessità dello scambio degli stessi. Il principio generale consiste nell'addestrare modelli locali utilizzando i dati disponibili localmente ai nodi e, attraverso lo scambio dei parametri (ad esempio i pesi di una rete neurale profonda) generare un modello globale. La principale differenza tra l'apprendimento federato e l'apprendimento distribuito risiede nelle ipotesi formulate sulle proprietà dei set di dati locali poiché l'apprendimento distribuito è nato con l'intento di parallelizzare la potenza di calcolo mentre l'approccio federato ha come intento l'addestramento dei modelli su dati eterogenei. Anche se l'approccio distribuito ha come obiettivo l'apprendimento di un singolo modello su server multipli, i dati memorizzati all'interno dei nodi locali vengono considerati identicamente distribuiti e hanno all'incirca le stesse dimensioni per tutti i nodi. Nessuna di queste ipotesi viene fatta per l’apprendimento federato. Infatti, i dati disponibili ai nodi sono generalmente eterogenei ed hanno dimensioni che possono variare anche di molti ordini di grandezza. Inoltre, i nodi coinvolti nell'apprendimento federato possono subire delle disconnessioni o dei guasti, dovute principalmente al mezzo di comunicazione utilizzato (per esempio il Wi-fi) o alla batteria (per esempio dispositivi smartphones o IoT) mentre i nodi considerati nell'addestramento distribuito sono principalmente centri di elaborazione dati con una capacità computazionale molto elevata e possono utilizzare una connessione dedicata ad alta velocità.

### Apprendimento federato centralizzato

Nei metodi di apprendimento federato centralizzato, un server centrale è incaricato di gestire i differenti passi per gli algoritmi utilizzati e di coordinare i nodi che partecipano al processo di apprendimento. Il server ha la responsabilità di scegliere i nodi all'inizio della procedura e ha il compito di aggregare i modelli ricevuti dai nodi durante la fase di apprendimento. Considerando che tutti i nodi partecipanti devono mandare i modelli ad una singola entità, il server potrebbe costituire una forma di rallentamento per il sistema.

### Apprendimento federato decentralizzato

Nei metodi di apprendimento federato decentralizzato, i nodi hanno la capacità di coordinarsi al fine di ottenere il modello globale. Queste tecniche permettono di ovviare al problema degli approcci centralizzati dato che i nodi sono in grado di scambiarsi gli aggiornamenti dei modelli senza il coordinamento di un server centrale. Ciononostante, la specifica configurazione della topologia di rete può influenzare le prestazioni del processo di apprendimento.

## Caratteristiche principali
### Apprendimento iterativo

Per garantire una buona esecuzione delle attività al fine di ottenere un modello globale condiviso da tutti i nodi, l’apprendimento federato si basa su un processo iterativo suddiviso in un insieme atomico di interazioni client-server noto come federated round. All'interno di ogni ciclo di questo processo, l’attuale stato del modello viene trasmesso ai nodi partecipanti, i nodi aggiornano il modello utilizzando i dati locali a disposizione e producono una serie di potenziali aggiornamenti del modello. Infine, il modello globale viene aggiornato aggregando gli aggiornamenti pervenuti dai nodi.
Nella metodologia seguente, si assume che il processo di apprendimento consideri l’interazione di un server centrale che fornisce i comandi ai nodi sulle operazioni da effettuare. Tuttavia, l’impiego di metodologie che non richiedono l’utilizzo di un’entità centrale, come per esempio gli approcci peer-to-peer, forniscono gli stessi risultati attraverso l'utilizzo di metodologie gossip o di consenso.
Assumendo che un federated round sia composto da una iterazione del processo di apprendimento, la procedura per l’addestramento federato può essere descritta come segue:
* Inizializzazione: in base agli input forniti dal server, un modello di apprendimento automatico, per esempio una regressione lineare, una rete neurale o un boosting, viene scelto per essere appreso ai nodi locali e viene inizializzato. Una volta completata la scelta del modello e l’inizializzazione dello stesso, i nodi vengono attivati e rimangono in attesa dei per ulteriori istruzioni dal server.
* Selezione dei nodi: una frazione dei nodi disponibili viene scelta per iniziare la fase di apprendimento sui dati locali. I nodi scelti acquisiscono il modello corrente dal server mentre gli altri aspettano il prossimo round.
* Configurazione: Il server comunica ai nodi selezionati di iniziare l’apprendimento utilizzando i propri dati locali con una modalità predefinita (per esempio utilizzando delle mini-batch per il calcolo del gradiente).
* Comunicazione: I nodi selezionati inviano al server i loro modelli per l’aggregazione. Il server aggrega i modelli ricevuti in base all'algoritmo selezionato all'inizio e restituisce il risultato dell’aggregazione ai nodi. Inoltre, il server gestisce eventuali errori o nodi disconnessi. A questo punto il prossimo round viene fatto iniziare e il processo riparte dalla fase della selezione dei nodi.
* Terminazione: quando il criterio di terminazione viene raggiunto, per esempio quando il numero massimo di iterazioni viene raggiunto o l’accuratezza del modello è maggiore di una certa soglia, il server aggrega gli ultimi aggiornamenti forniti dai nodi e costruisce il modello globale.
La procedura considerata precedentemente assume che i modelli vengano aggiornati in modo sincrono. Sviluppi recenti nell'apprendimento federato hanno iniziato ad introdurre meccanismi per l’aggiornamento asincrono. Rispetto agli approcci sincroni, in cui i modelli locali vengono scambiati una volta che i calcoli sono stati eseguiti su tutti i layer della rete neurale, quelli asincroni sfruttano le proprietà delle reti neurali per inviare gli aggiornamenti non appena i calcoli su un certo layer vengono completati. Queste tecniche vengono comunemente chiamate split learning e possono essere applicate sia durante la fase di apprendimento che quella di inferenza indipendentemente se si è considerato un approccio centralizzato o decentralizzato per l'apprendimento federato.

### Dati non-i.i.d.

Nella maggior parte dei casi, l'assunzione di avere dati indipendenti e identicamente distribuiti accessibili ai nodi locali non vale per le configurazioni di apprendimento federato. In queste occasioni, le prestazioni del processo di addestramento possono variare in modo significativo in base allo squilibrio dei dati locali, nonché alla particolare distribuzione di probabilità degli esempi di addestramento (cioè alle caratteristiche ed alle etichette) memorizzati nei nodi locali. Per approfondire gli effetti dei dati distribuiti in modo non i.i.d., la seguente descrizione considera le principali categorie presentate nell'articolo Advances and Open Problems in Federated Learning, Peter Kairouz and al. 2019.
La descrizione di questi particolari tipi di dati si basa sull'analisi della probabilità congiunta tra le caratteristiche e le etichette disponibili a ciascun nodo locale. Ciò consente di disaccoppiare ciascun contributo in base alla specifica distribuzione disponibile ai nodi locali. Le principali categorie possono essere riassunte come segue:
* Spostamento covariato: i nodi locali possono memorizzare dati che hanno distribuzioni statistiche diverse rispetto ad altri nodi. Questa condizione si verifica, ad esempio, nei set di dati per l'elaborazione del linguaggio naturale dove persone differenti possono scrivere la stessa lettera con larghezze e/o inclinazioni diverse.
* Spostamento della probabilità a priori: i nodi locali possono memorizzare etichette che hanno distribuzioni statistiche diverse rispetto ad altri nodi. Ciò può accadere se i set di dati sono regionali e/o partizionati demograficamente. Ad esempio, i set di dati contenenti immagini di animali variano in modo significativo da Paese a Paese.
* Spostamento del concetto (stesse etichette ma differenti caratteristiche): i nodi locali possono condividere le stesse etichette ma alcune di esse corrispondono a caratteristiche differenti per nodi diversi. Ad esempio, le immagini che raffigurano un particolare oggetto possono variare in base alle condizioni meteorologiche in cui sono state catturate.
* Spostamento del concetto (stesse caratteristiche ma differenti etichette): i nodi locali possono condividere le stesse caratteristiche ma alcuni di esse corrispondono a etichette differenti per nodi diversi. Ad esempio, nell'elaborazione del linguaggio naturale, l'analisi dei sentimenti può produrre sentimenti diversi anche se è stato osservato lo stesso testo.
* Sbilanciamento: le dimensioni dei dati memorizzati ai nodi può variare significativamente.
Altri descrittori di dati non i.i.d. tengono conto della variazione dinamica della topologia di rete, a causa di guasti o ineleggibilità dei nodi locali durante il processo di apprendimento federato, o spostamenti dei set di dati, in cui i nodi che partecipano alla fase di addestramento per l'apprendimento del modello globale potrebbero non essere idonei durante l'inferenza a causa di capacità computazionali insufficienti. Ciò si traduce in una differenza tra le statistiche dei dati di addestramento e di inferenza.

## Iperparametri algoritmici
### Topologia di rete

Il modo in cui gli output statistici locali sono raggruppati e il modo in cui i nodi comunicano tra di loro possono cambiare rispetto al modello centralizzato spiegato nella sezione precedente. Ciò porta a una varietà di approcci di apprendimento federati: ad esempio il caso in cui il server centrale non è presente o quello della comunicazione stocastica.
In particolare, le reti distribuite senza coordinatore centrale rappresentano un'importante variante. In questo caso, non vi è alcun server centrale che invia le richieste ai nodi locali e che aggrega i modelli ricevuti dai nodi. Ogni nodo invia il proprio modello a diversi nodi selezionati casualmente, i quali aggregano i risultati localmente. Questo limita il numero di transazioni, riducendo a volte i tempi di apprendimento e i costi di elaborazione.

### Parametri per l'apprendimento federato

Una volta scelta la topologia della rete dei nodi, è possibile controllare i diversi parametri del processo di apprendimento federato (in opposizione agli iperparametri del modello di apprendimento automatico) per ottimizzare l'apprendimento:
* Numero di cicli per l'apprendimento federato: $T$
* Numero totale di nodi utilizzati durante il processo di apprendimento: $K$
* Frazione di nodi utilizzati ad ogni iterazione per ciascun nodo: $C$
* Dimensione del numero di esempi locali utilizzati ad ogni iterazione nel processo di apprendimento: $B$
Si possono considerare, oltre a quelli già elencati, ulteriori parametri come:
* Numero di iterazioni per l'apprendimento locale al nodo: $N$
* Tasso di apprendimento locale: $\eta$
Tali parametri devono essere ottimizzati in base ai vincoli dell'applicazione di apprendimento automatico (ad esempio, potenza di calcolo disponibile, memoria disponibile, larghezza di banda). Ad esempio, scegliendo stocasticamente una frazione limitata $C$ di nodi per ciascuna iterazione si possono ridurre i costi di elaborazione e si può impedire l'eccessivo adattamento del modello, allo stesso modo in cui la discesa del gradiente stocastica può ridurre l'adattamento eccessivo.

## Metodi per l'apprendimento federato

In questa sezione, l'esposizione dell'articolo Communication-Efficient Learning of Deep Networks from Decentralized Data, H. Brendan McMahan and al. 2017 viene presa in considerazione.
Per descrivere i diversi metodi di apprendimento federato, le seguenti notazioni sono introdotte:
* $K$ : numero totale di nodi;
* $k$ : indice dei nodi;
* $n_{k}$ : numero di esempi disponibili durante l'addestramento per il nodo $k$ ;
* $k_{t}$ : vettore di peso del modello di apprendimento automatico al nodo $k$, all'iterazione $t$ ;
* $l(w,b)$ : funzione di perdita considerata per i pesi $w$ e batch $b$ ;
* $E$ : numero di epoche locali;

### Federated Stochastic Gradient Descent (FedSGD)

L'addestramento per l'apprendimento profondo si basa principalmente sulle varianti della discesa stocastica del gradiente, in cui i gradienti vengono calcolati su un sottoinsieme casuale dei dati disponibili e successivamente utilizzati per eseguire un passaggio nell'algoritmo della discesa del gradiente.
Il federated stochastic gradient descent è la trasposizione diretta di questo algoritmo all'impostazione federata, ma usando una frazione casuale $C$ dei nodi e utilizzando tutti i dati sui nodo considerati. I gradienti sono mediati dal server in modo proporzionale al numero di campioni presenti su ciascun nodo e utilizzati per eseguire uno step per la discesa del gradiente.

### Federated averaging

Il federated averaging (FedAvg) è una generalizzazione del FedSGD, che consente ai nodi locali di eseguire più di un aggiornamento sui dati locali e vengono scambiati i pesi aggiornati anziché i gradienti. La logica alla base di questa generalizzazione è che in FedSGD, se tutti i nodi locali iniziano dalla stessa inizializzazione, la media dei gradienti è strettamente equivalente alla media dei pesi stessi. Inoltre, la media dei pesi calibrati provenienti dalla stessa inizializzazione non danneggia necessariamente le prestazioni del modello medio risultante.

## Limitazioni tecniche

L'apprendimento federato richiede una comunicazione frequente tra i nodi durante il processo di apprendimento. Pertanto, richiede non solo sufficiente potenza di calcolo e memoria, ma anche connessioni ad alta larghezza di banda per poter scambiare i parametri del modello di apprendimento automatico. Tuttavia, la tecnologia evita anche la comunicazione dei dati, che può richiedere risorse significative prima di poter avviare l'apprendimento automatico nella versione centralizzata. Tuttavia, i dispositivi tipicamente impiegati nell'apprendimento federato possiedono una limitata capacità comunicativa, ad esempio i dispositivi IoT o gli smartphone sono generalmente collegati alle reti Wi-Fi, quindi, anche se i modelli sono generalmente meno costosi da trasmettere rispetto ai dati grezzi, i meccanismi di apprendimento federato potrebbero non essere adatti nella loro forma generale.
L'apprendimento federato introduce diverse limitazioni statistiche:
* L'eterogeneità tra i diversi set di dati locali: ogni nodo può presentare delle deviazioni rispetto alla popolazione generale e la dimensione dei set di dati può variare in modo significativo;
* L'eterogeneità temporale: la distribuzione dei dati memorizzati dai nodi può variare nel tempo;
* L'interoperabilità del set di dati di ciascun nodo è un prerequisito;
* Il set di dati di ciascun nodo può richiedere delle cure regolari;
* L'applicazione di meccanismi di oscuramento dei dati utilizzati per l'addestramento potrebbe consentire a degli utenti malevoli di iniettare backdoor nel modello globale;
* La mancanza di accesso ai dati globali per l'addestramento rende più difficile identificare deviazioni indesiderate che possono influenzare la fase di apprendimento, per esempio età, genere, orientamento sessuale;
* La perdita parziale o totale degli aggiornamenti del modello a causa di errori dei nodi possono incidere sul modello globale

## Proprietà dell'apprendimento federato
### Privacy by design

Il vantaggio principale dell'utilizzo di approcci federati nell'apprendimento automatico consiste nel garantire la riservatezza o la segretezza dei dati. Infatti, nessun dato locale viene caricato esternamente, concatenato o scambiato. Poiché l'intero database è segmentato in bit locali, questo rende più difficile manometterlo.
Con l'apprendimento federato, vengono scambiati solo i parametri di apprendimento automatico. Inoltre, tali parametri possono essere criptati prima della condivisione tra i cicli di apprendimento per estendere la privacy e gli schemi di crittografia omomorfica possono essere utilizzati per effettuare direttamente calcoli sui dati crittografati senza decriptarli in anticipo. Nonostante queste misure protettive, i parametri possono comunque rendere visibile informazioni associate ai dati sottostanti, ad esempio effettuando più query specifiche su set di dati specifici. La capacità di interrogazione dei nodi è quindi un importante punto di attenzione, che può essere affrontato utilizzando la privacy differenziale o l'aggregazione sicura.

### Personalizzazione

Il modello generato durante la fase di apprendimento fornisce una comprensione del modello globale appreso dai nodi. Tuttavia, se un nodo partecipante desidera apprendere da schemi globali ma anche adattare i risultati al suo stato peculiare, la metodologia di apprendimento federato può essere adattata per generare due modelli contemporaneamente in un framework di apprendimento multi-task. Inoltre, le tecniche di clustering possono essere applicate per aggregare nodi che condividono alcune somiglianze dopo il completamento del processo di apprendimento. Ciò consente la generalizzazione dei modelli appresi dai nodi secondo anche i loro dati locali.
Nel caso delle reti neurali profonde, è possibile condividere alcuni livelli tra i diversi nodi e mantenerne alcuni su ciascun nodo locale. In genere, i primi livelli che eseguono il riconoscimento generale del modello sono condivisi e addestrati utilizzando tutti i set di dati. Gli ultimi layer, invece, rimarranno su ciascun nodo locale e verranno addestrati solo sul set di dati del nodo locale.

### Aspetti legali dell'apprendimento federato

I quadri giuridici occidentali sottolineano sempre di più la protezione e la tracciabilità dei dati. Il rapporto della Casa Bianca del 2012 ha raccomandato l'applicazione di un principio di minimizzazione dei dati, che è menzionato nel GDPR europeo. In alcuni casi, è impossibile trasferire dati da un paese all'altro (ad es. dati genomici), tuttavia a volte i consorzi internazionali sono necessari per i progressi scientifici. In tali casi, l'apprendimento federato offre soluzioni per la formazione di un modello globale nel rispetto dei vincoli di sicurezza.

## Temi di ricerca attuali

L'apprendimento federato ha iniziato ad emergere come importante argomento di ricerca nel 2015 e nel 2016, con le prime pubblicazioni sul federated averaging nel campo delle telecomunicazioni. Un altro aspetto importante della ricerca è la riduzione della comunicazione durante il processo di apprendimento federato. Nel 2017 e nel 2018, le pubblicazioni hanno sottolineato lo sviluppo di strategie di allocazione delle risorse, in particolare per ridurre i requisiti di comunicazione tra nodi con algoritmi di gossip, nonché sulla caratterizzazione della robustezza agli attacchi differenziali alla privacy. Altre attività di ricerca si concentrano sulla riduzione della larghezza di banda durante l'addestramento attraverso metodi di sparsificazione e quantizzazione, in cui i modelli di apprendimento automatico sono sparsificati e/o compressi prima di essere condivisi con altri nodi. Inoltre, alcune tecniche di apprendimento federato stanno iniziando a considerare canali di propagazione reali dato che in implementazioni precedenti venivano utilizzati canali ideali.

## Applicazioni

L'apprendimento federato viene applicato generalmente quando i singoli attori hanno bisogno di formare modelli su set di dati più grandi dei loro, ma non possono condividere i dati con altri (ad esempio, per motivi legali, strategici o economici). La tecnologia richiede tuttavia buone connessioni tra i server locali e una potenza computazionale minima per ciascun nodo.

### Google Gboard

Uno delle prime applicazioni considerate nel campo dell'apprendimento federato è stato il Google Gboard, implementato da Google per l'utilizzo nelle tastiere predittive. Sotto una forte pressione normativa, è risultato impossibile caricare i messaggi di testo di tutti gli utenti per addestrare l'algoritmo predittivo per predire le parole. Inoltre, un tale processo esporrebbe troppi dati dell'utente ad attacchi di malintenzionati. Nonostante la memoria e la potenza di elaborazione a volte limitate degli smartphone, Google ha realizzato un caso d'uso convincente dalla sua G-board, come presentato durante l'evento Google I/O nel 2019.

### Apprendimento federato nell'assistenza sanitaria

Nella ricerca farmaceutica, i dati reali vengono utilizzati per la creazione di farmaci e bracci sintetici. La generazione di conoscenze su problemi biologici complessi richiede la raccolta di numerosi dati da diverse istituzioni mediche, desiderose di mantenere il controllo dei loro dati sensibili dei pazienti. L'apprendimento federato consente ai ricercatori di formare modelli predittivi su molti dati sensibili in modo trasparente senza necessariamente che essi siano condivisi.

### Sistemi di trasporto: veicoli a guida autonoma

Le auto a guida autonoma utilizzano molte tecnologie di apprendimento automatico per funzionare: la visione artificiale per analizzare gli ostacoli, l'apprendimento automatico per adattare il loro ritmo all'ambiente (ad esempio, all'irregolarità della strada). A causa del potenziale elevato numero di auto a guida autonoma e della necessità di rispondere rapidamente a situazioni critiche, l'approccio tradizionale centralizzato può generare rischi per la sicurezza. L'apprendimento federato può rappresentare una soluzione per limitare il volume di trasferimento dei dati e accelerare i processi di apprendimento.

### Industria 4.0: sistemi di produzione intelligenti

Nell'industria 4.0, è diffusa l'adozione di tecniche di apprendimento automatico per migliorare l'efficienza e l'efficacia dei processi industriali garantendo un elevato livello di sicurezza. Tuttavia, la riservatezza dei dati sensibili per le industrie e le aziende manifatturiere è di fondamentale importanza. Gli algoritmi di apprendimento federato possono essere applicati per queste applicazioni in quanto consentono di non rivelare alcun dato sensibile.

## Strumenti software

Con l'interesse crescente suscitato nella ricerca sull'apprendimento federato, molti strumenti software sono stati resi accessibili per l'implementazione di diverse configurazioni di apprendimento federato:
* Tensorflow Federated: è uno strumento software open source che consente a qualsiasi utente di valutare modelli di apprendimento automatico su dati distribuiti. Fornisce diverse funzionalità API per simulare architetture di apprendimento federato e per definire calcoli federati specifici (ad es. diverse varianti di apprendimento federato).
* PySyft: è una libreria Python che fornisce strumenti per simulare i meccanismi di tutela della privacy all'interno delle tecniche di apprendimento federato. Si basa sul noto pacchetto Pytorch e consente di includere negli algoritmi federati sistemi per la Privacy differenziale e altri meccanismi di sicurezza, ad esempio il secure multy-party computation e la crittografia omomorfica.
* Leaf: è un framework utilizzato per l'analisi comparativa dei modelli di apprendimento automatico all'interno degli algoritmi di apprendimento federato. Supporta molte tipologie di apprendimento automatico, ad esempio l'apprendimento multi-task, il meta-learning e l'apprendimento online.