Yapay zeka dünyasında model eğitimi uzun yıllar boyunca tek bir merkezde toplanan verilerle gerçekleştirildi. Bir hastane hasta kayıtlarını bir sunucuya gönderiyor, bir banka finansal işlem loglarını merkezi bir veri ambarına aktarıyor, bir akıllı telefon üreticisi kullanıcı davranış verilerini kendi bulutunda biriktiriyordu. Bu yaklaşım işe yarıyordu; ancak gizlilik, güvenlik, yasal uyumluluk ve bant genişliği maliyetleri açısından ciddi sorunlar doğuruyordu. Federated Learning (Birleşik Öğrenme), tam da bu kırılma noktasında ortaya çıkan ve veriyi merkeze taşımak yerine modeli verinin bulunduğu yere götüren devrimci bir paradigmadır.
Federated Learning Nedir ve Neden Önemlidir?
Federated Learning, ilk kez 2016 yılında Google araştırmacıları tarafından “Communication-Efficient Learning of Deep Networks from Decentralized Data” başlıklı makaleyle akademik literatüre kazandırıldı. Temel fikir son derece zarif: ham veri hiçbir zaman yerel cihazı terk etmez; bunun yerine her istemci kendi verisiyle yerel bir model eğitir, yalnızca model ağırlıklarını (gradyanları) merkezi sunucuya gönderir ve sunucu bu ağırlıkları birleştirerek global bir model oluşturur.
Bu yapı birkaç kritik avantaj sunar. Birincisi veri mahremiyeti: KVKK, GDPR ve HIPAA gibi düzenlemeler kapsamında hassas veriler kurumsal sınırları aşmak zorunda kalmaz. İkincisi dağıtık hesaplama: istemci cihazların (uç sunucular, mobil cihazlar, IoT sensörleri) işlem kapasitesi kullanılır; merkezi altyapı yükü azalır. Üçüncüsü heterojen veri: farklı kurumların birbiriyle paylaşamayacağı ama benzer dağılıma sahip verileri tek bir global model altında birleştirilir.
FedAvg: Temel Algoritmanın Anatomisi
Federated Learning’in bel kemiğini FedAvg (Federated Averaging) algoritması oluşturur. Algoritma şu adımlarla çalışır:
Merkezi sunucu, global model ağırlıklarını olarak başlatır ve her eğitim turunun başında bu ağırlıkları seçilen istemci kümesine dağıtır. Her istemci , yerel veri kümesi üzerinde belirlenen sayıda epoch boyunca SGD (Stochastic Gradient Descent) uygular ve güncellenmiş ağırlıklarını olarak sunucuya iletir. Sunucu ise bu ağırlıkları veri kümesi boyutuna göre ağırlıklı ortalama alarak birleştirir:
Bu formülde istemci ‘nın veri örneği sayısını, ise toplam veri örneği sayısını temsil eder. Ağırlıklı ortalama mekanizması, küçük veri kümesine sahip istemcilerin global modeli orantısız biçimde etkilemesinin önüne geçer.
PyTorch ile Yerel Model Eğitimi
PyTorch, Federated Learning uygulamalarında tercih edilen birincil çerçevedir; dinamik hesaplama grafı ve modüler yapısı istemci tarafı esnekliğine olanak tanır. Temel bir yerel eğitim döngüsü şu şekilde kurgulanır:
import torch
import torch.nn as nn
import copy
class LocalTrainer:
def __init__(self, model, data_loader, lr=0.01, epochs=5):
self.model = copy.deepcopy(model)
self.data_loader = data_loader
self.optimizer = torch.optim.SGD(
self.model.parameters(), lr=lr, momentum=0.9
)
self.criterion = nn.CrossEntropyLoss()
self.epochs = epochs
def train(self):
self.model.train()
for epoch in range(self.epochs):
for X, y in self.data_loader:
self.optimizer.zero_grad()
output = self.model(X)
loss = self.criterion(output, y)
loss.backward()
self.optimizer.step()
return self.model.state_dict()Dikkat edilmesi gereken kritik nokta copy.deepcopy(model) kullanımıdır. Her istemci global modelin tam bir kopyası üzerinde çalışır; orijinal global model nesnesini değiştirmez. Bu izolasyon, istemciler arasındaki ağırlık karışımını önlemek için zorunludur.
FastAPI ile Federated Sunucu Mimarisi
Merkezi sunucu, istemcilerle HTTP tabanlı iletişimi yönetir. FastAPI’nin asenkron yapısı, eş zamanlı istemci bağlantılarını düşük gecikmeyle karşılar. Minimal bir federated sunucu tasarımı:
from fastapi import FastAPI
from pydantic import BaseModel
import torch
import torch.nn as nn
from typing import Dict, List
import numpy as np
app = FastAPI(title="Federated Learning Server")
# Global model tanımı
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 128)
self.fc2 = nn.Linear(128, 10)
self.relu = nn.ReLU()
def forward(self, x):
return self.fc2(self.relu(self.fc1(x)))
global_model = SimpleNet()
client_updates: List[Dict] = []
REQUIRED_CLIENTS = 5
class ModelUpdate(BaseModel):
client_id: str
weights: Dict[str, List]
data_size: int
@app.get("/get_model")
async def get_model():
state = {k: v.tolist() for k, v in global_model.state_dict().items()}
return {"weights": state}
@app.post("/submit_update")
async def submit_update(update: ModelUpdate):
client_updates.append(update.dict())
if len(client_updates) >= REQUIRED_CLIENTS:
await aggregate_models()
return {"status": "received", "clients_waiting": len(client_updates)}
async def aggregate_models():
global global_model, client_updates
total_samples = sum(u["data_size"] for u in client_updates)
new_weights = {}
for key in client_updates[0]["weights"]:
weighted_sum = sum(
np.array(u["weights"][key]) * (u["data_size"] / total_samples)
for u in client_updates
)
new_weights[key] = torch.tensor(weighted_sum)
global_model.load_state_dict(new_weights)
client_updates.clear()Bu mimaride senkron bir aggregasyon stratejisi kullanılmaktadır: sunucu belirlenen sayıda istemciden güncelleme aldıktan sonra birleştirme işlemini tetikler. Üretim ortamlarında asenkron ve yarı-asenkron stratejiler (yalnızca en hızlı istemcileri beklemek) daha yüksek verimlilik sağlar.
Veri Heterojenliği ve Non-IID Problemi
Federated Learning’in pratikte karşılaştığı en zorlu problem Non-IID (bağımsız ve özdeş dağılmayan) veri sorunudur. Gerçek dünya senaryolarında istemciler birbirinden çok farklı veri dağılımlarına sahiptir: bir hastanede çoğunlukla yaşlı hastalar, bir diğerinde pediatrik vakalar bulunabilir. Bu heterojenlik, yerel modellerin birbirinden uzaklaşmasına ve FedAvg’ın yakınsama hızının dramatik biçimde düşmesine yol açar.
Bu soruna karşı geliştirilmiş başlıca yaklaşımlar şunlardır:
FedProx algoritması, yerel eğitime bir yakınlık terimi ekleyerek istemci modellerinin global modelden çok uzaklaşmasını cezalandırır. Kayıp fonksiyonu şu şekilde düzenlenir: . Bu düzenlileştirme terimi, özellikle sistem heterojenliğinin (farklı hesaplama kapasitelerine sahip istemciler) belirgin olduğu senaryolarda %30’a varan yakınsama iyileşmesi sağlar.
SCAFFOLD algoritması ise kontrol varyatörleri kullanarak istemci sürüklemesini (client drift) düzeltir ve non-IID ortamlarında FedAvg’a kıyasla çok daha kararlı bir eğitim süreci sunar.
Güvenlik: Differential Privacy ve Güvenli Toplama
Federated Learning veriyi merkeze taşımasa da gradient inversiyon saldırıları sayesinde gönderilen model ağırlıklarından ham verinin yeniden inşa edilebildiği gösterilmiştir. Bu tehdit, ek güvenlik katmanlarını zorunlu kılar.
Differential Privacy (DP) en yaygın savunma mekanizmasıdır. Gradyanlar sunucuya gönderilmeden önce Gauss gürültüsü eklenir:
def add_dp_noise(gradients, noise_multiplier=1.0, max_grad_norm=1.0):
# Gradyan kırpma
grad_norm = torch.norm(gradients)
gradients = gradients * min(1, max_grad_norm / grad_norm)
# Gauss gürültüsü ekleme
noise = torch.randn_like(gradients) * noise_multiplier * max_grad_norm
return gradients + noiseGüvenli Toplama (Secure Aggregation) ise kriptografik protokoller kullanarak sunucunun bireysel istemci güncellemelerini görmesini engeller; sunucu yalnızca toplamı öğrenebilir. Google’ın 2017 tarihli güvenli toplama protokolü, binlerce istemciye ölçeklenebilen pratik bir çözüm sunar.
Üretim Ortamı: Ölçeklendirme ve İzleme
Gerçek bir federated learning sistemini üretime taşırken göz ardı edilmemesi gereken birkaç kritik bileşen vardır. Model versiyonlama hayati önem taşır: istemciler farklı zamanlarda bağlandığından hangi global modelin hangi turu temsil ettiği net biçimde takip edilmelidir. İstemci seçim stratejisi de doğrudan model kalitesini etkiler; rastgele seçim, güç kaynağına bağlı ve Wi-Fi’a erişimi olan cihazları ön plana çıkararak temsil yanlılığı yaratabilir.
Flower (flwr) kütüphanesi, PyTorch ile entegre çalışan ve yukarıdaki sorunların büyük bölümünü ele alan olgunlaşmış bir açık kaynak federated learning çerçevesidir. PySyft ise diferansiyel gizlilik ve güvenli çok taraflı hesaplamayı soyutlayan daha kapsamlı bir gizlilik odaklı makine öğrenmesi platformu sunar.
Gerçek Dünya Uygulamaları
Federated Learning bugün yalnızca teoride değil, büyük ölçekli üretim sistemlerinde aktif olarak çalışmaktadır. Google Gboard klavyesi, bir milyarı aşkın Android cihazda kullanıcı yazma kalıplarını merkeze göndermeden tahmin modelini iyileştirmektedir. Apple, iOS cihazlarında Siri ve QuickType özelliklerini federated öğrenme ile geliştirmekte; NHS (İngiltere Ulusal Sağlık Servisi) ise hastane veritabanlarını birleştirmeksizin kanser tespit modellerini eğitmek için bu teknolojiyi kullanmaktadır.
Finans sektöründe birden fazla bankanın ortak bir dolandırıcılık tespiti modeli eğitmesi, veri paylaşımı gerektirmeksizin sektör genelinde doğruluk artışı sağlamaktadır. Endüstriyel IoT’de ise fabrikalar arasındaki makine arıza tahmin modelleri, rekabete duyarlı üretim verileri paylaşılmadan konsolide edilebilmektedir.
Federated Learning mükemmel değildir; iletişim maliyeti, yakınsama yavaşlığı ve sistem heterojenliği hâlâ aktif araştırma konuları olmaya devam etmektedir. Ancak veri egemenliği ve model kalitesini aynı anda optimize etmeye çalışan her sistem mimarisi için bugün itibarıyla en güçlü paradigmadır.
İleri Okuma ve Kaynaklar
- McMahan, B. et al. (2017). Communication-Efficient Learning of Deep Networks from Decentralized Data. AISTATS. https://arxiv.org/abs/1602.05629
- Flower Framework Belgeleri: A Friendly Federated Learning Framework. https://flower.dev/docs/
- Li, T. et al. (2020). Federated Learning: Challenges, Methods, and Future Directions. IEEE Signal Processing Magazine. https://arxiv.org/abs/1908.07873








