Skip to content

Arnouux/FederatedLearning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Privacy Preserving Federated Learning

Using multiparty learning and homomorphic encryption, in Go.

1. What does this library do ?

The library aims at creating a network of nodes sharing neural network's parameters (weights) between them without sharing them own dataset. Moreover, fully homomorphic encryption is used to limit the access of the server receiving the weights and not let a white-box attack happen.

2. How to use ?

You can get inspiration by reading the tests file test/federated_test.go. In any case, you will need to instanciate nodes and make them connect and send data to a server node. In your project root directory: go get github.com/Arnouux/federated-learning-lib. After that, the library is importable and usable such as:

package main

import (
	fl "github.com/Arnouux/federated-learning-lib"
)

func main() {
	node := fl.Create()
	node.Start()

	server := fl.Create()
	server.Start()

	// ** //

	node.Join(server.Socket.GetAddress())

	// ** //

	server.StartLearning()
}

3. Todo list

  • send HE messages
  • fragment packets to fit max UDP size
  • server can send results back
  • make sure ACKs correspond to current msg / better udp
  • nodes can join server / nb of participants
  • gradients calculations
  • aggregation + local weights update
  • byzantine environnement resistance
  • change BFV to CKKS for float operations
  • generalize to n participants
  • server setup nn
  • let joiners propose input size, hyperparams,.. / not default
  • refactor
  • make project importable as lib
    • make this current repo usable

About

Privacy Preserving Federated Learning system in Go

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages