Altri metodi di compressione per Federated Learning

Aug 18 2020

Ho notato che il metodo di compressione Gradient Quantization è già implementato nel framework TFF. Che ne dici di metodi di compressione non tradizionali in cui selezioniamo un sottomodello eliminando alcune parti del modello globale? Mi sono imbattuto nel metodo di compressione "Federated Dropout" nel documento "Expanding the Reach of Federated Learning by Reducing Client Resource Requirements" (https://arxiv.org/abs/1812.07210). Qualche idea se il metodo Federated Dropout è già supportato in Tensorflow Federated. In caso negativo, qualche intuizione su come implementarlo (l'idea principale del metodo è eliminare una percentuale fissa delle attivazioni e dei filtri nel modello globale per scambiare e addestrare un sottomodello più piccolo)?

Risposte

2 JakubKonecny Aug 18 2020 at 19:34

Attualmente, non è disponibile alcuna implementazione di questa idea nel codice di base TFF.

Ma ecco uno schema di come potresti farlo, ti consiglio di iniziare examples/simple_fedavg

  1. Modifica il livello superiore build_federated_averaging_processper accettare due model_fns: uno server_model_fnper il modello globale, uno client_model_fnper la struttura del sottomodello più piccola effettivamente addestrata sui client.
  2. Modifica build_server_broadcast_messageper estrarre solo il sottomodello pertinente dal file server_state.model_weights. Questa sarebbe la mappatura dal modello server al modello client.
  3. La client_updatenon può effettivamente bisogno di essere cambiato (non sono sicuro al 100%), a condizione che solo il client_model_fnè fornito da client_update_fn.
  4. Modifica server_update: l' weights_deltaaggiornamento sarà il sottomodello del client, quindi sarà necessario mapparlo di nuovo al modello globale più grande.

In generale, i passaggi 2. e 4. sono complicati, poiché dipendono non solo dai livelli presenti in un modello, ma anche dal modo in cui sono collegati. Quindi sarà difficile creare una soluzione generale facile da usare, ma dovrebbe essere corretto scriverle per una struttura di modello specifica che conosci in anticipo.