Outros métodos de compressão para Aprendizagem Federada
Percebi que o método de compressão Gradient Quantization já está implementado no framework TFF. E quanto aos métodos de compressão não tradicionais em que selecionamos um submodelo eliminando algumas partes do modelo global? Encontrei o método de compressão "Desistência Federada" no artigo "Expandindo o Alcance da Aprendizagem Federada pela Redução dos Requisitos de Recursos do Cliente" (https://arxiv.org/abs/1812.07210) Alguma ideia se o método Federated Dropout já é compatível com o Tensorflow Federated. Se não, alguma ideia de como implementá-lo (a ideia principal do método é descartar uma porcentagem fixa das ativações e filtros no modelo global para trocar e treinar um submodelo menor)?
Respostas
Atualmente, não há implementação dessa ideia disponível na base de código da TFF.
Mas aqui está um esboço de como você poderia fazer isso, recomendo começar examples/simple_fedavg
- Modifique o nível superior build_federated_averaging_processpara aceitar dois
model_fn
s - umserver_model_fn
para o modelo global, umclient_model_fn
para a estrutura de submodelo menor realmente treinada nos clientes. - Modifique build_server_broadcast_messagepara extrair apenas o submodelo relevante do
server_state.model_weights
. Este seria o mapeamento do modelo de servidor para o modelo de cliente. - O client_updatepode realmente não precisar ser alterado (não tenho 100% de certeza), contanto que apenas o
client_model_fn
seja fornecido de client_update_fn. - Modificar server_update-
weights_delta
será a atualização do submodelo do cliente, portanto, você precisará mapeá-lo de volta para o modelo global maior.
Em geral, as etapas 2 e 4 são complicadas, pois dependem não apenas de quais camadas estão em um modelo, mas também de como elas estão conectadas. Portanto, será difícil criar uma solução geral fácil de usar, mas não deve haver problema em escrevê-la para uma estrutura de modelo específica que você conhece com antecedência.