AI Dictionary of Terms

Federated Learning

A decentralized machine learning technique where models are trained across multiple devices or servers holding local data samples, without exchanging the raw data itself — enabling collaborative model training while preserving data privacy and security.

The Simple Version

Imagine 100 hospitals around the world each want to build an AI that detects a rare disease. The problem? Patient records can’t be shared due to privacy laws.

In traditional machine learning, you’d need to collect all the patient data into one giant database — a legal and ethical nightmare.

Federated Learning flips this on its head. Instead of moving the data to the model, you move the model to the data. Each hospital trains a local copy of the model on its own patients’ records. Then, instead of sharing the patient data, each hospital shares only the learned model updates (the mathematical changes to the model’s weights). A central server combines all these updates into a single, improved global model, and sends it back to the hospitals.

The result? A powerful AI trained on the collective knowledge of all 100 hospitals, without a single patient record ever leaving its home hospital.

Detailed Explanation

Introduced by McMahan et al. at Google in 2016 (initially for improving keyboard prediction on Android phones), Federated Learning addresses the fundamental tension between AI’s data hunger and privacy regulations.

The Federated Learning Process:

1. Initialization:

2. Local Training:

3. Aggregation:

4. Iteration:

Key Challenges:

1. Non-IID Data:

2. Systems Heterogeneity:

3. Communication Efficiency:

4. Privacy Guarantees:

Popular Frameworks:

Key Characteristics

Business Context

Federated Learning unlocks AI applications that were previously impossible due to privacy constraints:

Enterprise Applications:

Strategic Benefits:

Cost Considerations:

Real-World Analogy

A group of chefs from different countries collaborating on a new recipe. Each chef experiments in their own kitchen using their own local ingredients. They don’t share their ingredient lists or recipes (the raw data). Instead, they share only what they learned: “Adding more garlic improved the flavor.” A master chef combines all these insights into a universal recipe that works everywhere. The final recipe benefits from everyone’s expertise, but no one’s secret ingredients were revealed.

Code Example

# Federated Learning using Flower framework (simplified)
import flwr as fl
import torch
import torch.nn as nn
from collections import OrderedDict

# Define a simple neural network
class SimpleNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)
    
    def forward(self, x):
        x = torch.relu(self.fc1(x))
        return self.fc2(x)

# Define a Federated Learning client
class FLCient(fl.client.NumPyClient):
    def __init__(self, local_data, model):
        self.local_data = local_data  # Data NEVER leaves this device
        self.model = model
    
    def get_parameters(self, config):
        # Extract model weights to send to server
        return [val.cpu().numpy() for _, val in self.model.state_dict().items()]
    
    def set_parameters(self, parameters):
        # Receive global model weights from server
        params_dict = zip(self.model.state_dict().keys(), parameters)
        state_dict = OrderedDict({k: torch.tensor(v) for k, v in params_dict})
        self.model.load_state_dict(state_dict, strict=True)
    
    def fit(self, parameters, config):
        # 1. Receive global model
        self.set_parameters(parameters)
        
        # 2. Train on LOCAL data only (privacy preserved!)
        optimizer = torch.optim.SGD(self.model.parameters(), lr=0.01)
        for epoch in range(5):
            for data, target in self.local_data:
                optimizer.zero_grad()
                output = self.model(data)
                loss = nn.CrossEntropyLoss()(output, target)
                loss.backward()
                optimizer.step()
        
        # 3. Return only the UPDATED WEIGHTS (not the data!)
        return self.get_parameters(config), len(self.local_data), {}

# Start the federated learning client
# In production, this would run on a phone, hospital server, or bank
fl.client.start_numpy_client(
    server_address="127.0.0.1:8080",
    client=FLClient(local_data=my_private_data, model=SimpleNet())
)

# The central server (Flower server) aggregates updates from all clients
# using Federated Averaging (FedAvg) to create an improved global model

Common Misconceptions

Sources & Further Reading