  In recent years, data and computing resources are typically distributed in
the devices of end users, various regions or organizations. Because of laws or
regulations, the distributed data and computing resources cannot be directly
shared among different regions or organizations for machine learning tasks.
Federated learning emerges as an efficient approach to exploit distributed data
and computing resources, so as to collaboratively train machine learning
models, while obeying the laws and regulations and ensuring data security and
data privacy. In this paper, we provide a comprehensive survey of existing
works for federated learning. We propose a functional architecture of federated
learning systems and a taxonomy of related techniques. Furthermore, we present
the distributed training, data communication, and security of FL systems.
Finally, we analyze their limitations and propose future research directions.
