Federasyonel Öğrenme (Federated Learning): Verilerinizi Paylaşmadan Yapay Zekayı Eğitmek
Geleneksel makine öğrenimi sürecinde, veri toplama ilk ve genellikle en maliyetli adımdır. Bir modeli eğitmek için; fotoğraflar, kısa mesajlar, sağlık kayıtları veya finansal işlemler gibi ham kullanıcı verilerini toplamanız ve bunları merkezi bir bulut sunucusuna yüklemeniz gerekir.
Bu merkezi yaklaşım yapay zeka devrimine güç vermiş olsa da büyük zorluklarla karşı karşıyadır:
- Gizlilik Endişeleri: Kullanıcılar, özel verilerini üçüncü taraf sunuculara yükleme konusunda giderek daha isteksiz hale gelmektedir.
- Veri Düzenlemeleri: GDPR ve HIPAA gibi düzenlemeler, kişisel verilerin nasıl aktarılabileceğini ve saklanabileceğini sıkı bir şekilde kısıtlar.
- Bant Genişliği Maliyetleri: Milyonlarca uç cihazdan (akıllı telefonlar gibi) gigabaytlarca ham veri yüklemek son derece verimsizdir.
Federasyonel Öğrenme (Federated Learning - FL), geleneksel paradigmayı tersine çevirerek bu sorunları çözer. Veriyi modele getirmek yerine, modeli veriye götürür.
Temel Konsept: Merkeziyetsiz Eğitim
Federasyonel Öğrenmede, merkezi sunucu bir küresel model barındırır. Sunucu, bu modeli eğitmek için ham veri toplamak yerine; akıllı telefonlar, akıllı ev cihazları veya bölgesel hastane veritabanları gibi uç cihazlardan (istemciler) oluşan bir ağ genelinde işbirlikçi bir eğitim sürecini koordine eder.
Federasyonel Öğrenmenin temel kuralı şudur:
Ham veri asla yerel cihazı terk etmez. Yalnızca matematiksel model güncellemeleri paylaşılır.
Adım Adım İşleyiş: Nasıl Çalışır?
Tipik bir Federasyonel Öğrenme eğitim döngüsü (bir iletişim turu olarak bilinir) beş ana adımdan oluşur:
sequenceDiagram
participant Server as Merkezi Sunucu (Küresel Model)
participant ClientA as İstemci A (Özel Veri A)
participant ClientB as İstemci B (Özel Veri B)
rect rgb(240, 248, 255)
Note over Server: Adım 1: Küresel Modeli Başlat
end
Server->>ClientA: Adım 2: Küresel Ağırlıkları Gönder (W_t)
Server->>ClientB: Adım 2: Küresel Ağırlıkları Gönder (W_t)
rect rgb(245, 245, 245)
Note over ClientA: Adım 3: Özel Verilerle Yerelde Eğit
Note over ClientB: Adım 3: Özel Verilerle Yerelde Eğit
end
ClientA->>Server: Adım 4: Yerel Güncellemeleri Gönder (W_t^A)
ClientB->>Server: Adım 4: Yerel Güncellemeleri Gönder (W_t^B)
rect rgb(240, 255, 240)
Note over Server: Adım 5: Güncellemeleri Ortalama (FedAvg)<br/>Küresel Modeli Güncelle (W_t+1)
end
1. Başlatma (Initialization)
Merkezi sunucu, küresel modeli başlangıç ağırlıklarıyla ($W_0$) başlatır. Bu ağırlıklar rastgele olabilir veya halka açık bir veri kümesinde önceden eğitilmiş olabilir.
2. Dağıtım (Model Broadcast)
Sunucu, mevcut istemci cihazların bir alt kümesini seçer (örneğin şarja takılı, Wi-Fi’ye bağlı ve boşta olan telefonlar) ve mevcut küresel model ağırlıklarını ($W_t$) bunlara yayınlar.
3. Yerel Eğitim
Seçilen her istemci, aldığı küresel modeli kendi yerel ve özel veri kümesinde eğitir. Bu, Stokastik Gradyan İnişi (SGD) gibi standart optimizasyon algoritmaları kullanılarak yapılır. Birkaç epoch sonunda, her istemci $i$ yeni bir yerel model ağırlıkları kümesi ($W_t^i$) üretir.
4. Yerel Güncellemeleri Yükleme
İstemciler, özel eğitim verilerini göndermek yerine yalnızca yeni yerel model ağırlıklarını (veya $\Delta W_t^i = W_t^i - W_t$ farkını) merkezi sunucuya geri gönderir. Bu güncellemeler genellikle kriptografik protokoller kullanılarak şifrelenir.
5. Küresel Agregasyon (Birleştirme)
Merkezi sunucu, katılan tüm istemcilerden gelen güncellemeleri toplar. Yeni bir küresel model ($W_{t+1}$) üretmek için bunları ortalamasını alır (genellikle her istemcinin sahip olduğu yerel veri miktarına göre ağırlıklandırılır). Bunun için en yaygın algoritma Federated Averaging (FedAvg)‘dir:
$$W_{t+1} = \sum_{i=1}^{K} \frac{n_i}{N} W_t^i$$
Burada:
- $K$ katılan istemci sayısıdır.
- $n_i$ istemci $i$ üzerindeki veri örneği sayısıdır.
- $N$ katılan tüm istemcilerdeki toplam veri örneği sayısıdır ($N = \sum n_i$).
Bu döngü, küresel model istenen doğruluğa ulaşana kadar birçok tur boyunca tekrarlanır.
Kod Örneği: Basit Bir Python Simülasyonu
Federasyonel Öğrenmeyi iş başında görmek için, NumPy kullanarak basit bir Python simülasyonu yazalım.
Bu senaryoda, doğrusal regresyon kullanarak ev fiyatlarını ($y = w \cdot x$) tahmin edecek bir modeli eğitmek istiyoruz. Bir merkezi sunucumuz ve her birinin kendine ait özel ev büyüklükleri ($x$) ve fiyatları ($y$) olan 3 istemcimiz var.
import numpy as np
# 1. İstemci Özel Verilerini Kurun (Sunucuyla paylaşılamaz)
# Her istemcinin farklı sayıda yerel örneği vardır (n_i)
clients_data = {
"Client_1": {"x": np.array([1.0, 1.5, 2.0]), "y": np.array([110.0, 160.0, 210.0])}, # Gerçek ilişki: y = 100x + 10
"Client_2": {"x": np.array([0.8, 1.2]), "y": np.array([90.0, 130.0])}, # Gerçek ilişki: y = 100x + 10
"Client_3": {"x": np.array([2.5, 3.0, 3.5]), "y": np.array([260.0, 310.0, 360.0])} # Gerçek ilişki: y = 100x + 10
}
# Tüm istemcilerdeki toplam veri noktası sayısı (N)
total_samples = sum(len(data["x"]) for data in clients_data.values())
# 2. Sunucu Başlangıç Ağırlığı (Küresel Model: W_t)
global_weight = 10.0 # İlk tahmin (gerçek değer olan 100.0'den çok uzak)
learning_rate = 0.05
epochs = 5 # Tur başına yerel eğitim epoch sayısı
communication_rounds = 3
print(f"Başlangıç Küresel Ağırlığı: {global_weight:.2f}\n")
# Federasyonel Öğrenme Döngüsü
for round_idx in range(communication_rounds):
print(f"--- İletişim Turu {round_idx + 1} ---")
local_weights = []
client_sample_sizes = []
# Adım 2 & 3: Model Dağıtımı ve İstemci Cihazlarda Yerel Eğitim
for client_name, data in clients_data.items():
x = data["x"]
y = data["y"]
n_i = len(x)
# İstemci küresel ağırlığı alır
w_local = global_weight
# İstemci birkaç epoch boyunca yerelde eğitim yapar
for epoch in range(epochs):
# Tahmini hesapla: y_pred = w * x
y_pred = w_local * x
# Basit doğrusal regresyon için gradyanı hesapla
gradient = -2 * np.mean(x * (y - y_pred))
# Yerel ağırlığı güncelle
w_local -= learning_rate * gradient
print(f" {client_name} yerel ağırlığı şu değere eğitti: {w_local:.2f} (örnek sayısı: {n_i})")
# Agregasyon için yerel ağırlıkları ve örnek boyutlarını kaydet
local_weights.append(w_local)
client_sample_sizes.append(n_i)
# Adım 4 & 5: Federasyonel Ortalama (FedAvg) kullanarak sunucu tarafında agregasyon
weighted_sum = 0.0
for w, n in zip(local_weights, client_sample_sizes):
weighted_sum += w * n
global_weight = weighted_sum / total_samples
print(f"=> Sunucu küresel ağırlığı birleştirdi: {global_weight:.2f}\n")
print(f"FL sonrasında nihai küresel model ağırlığı: {global_weight:.2f}")
Bu kod neden Federasyonel Öğrenmeyi temsil eder?
clients_datasözlüğü yalıtılmış veritabanlarını temsil eder. Sunucu bunlara asla erişemez.- Eğitim döngüsünde istemciden sunucuya iletilen tek değişken
w_local‘dir. - Sunucu,
FedAvgmatematiksel formülünü uygulayan örnek boyutlarına (client_sample_sizes) dayalı ağırlıklı bir ortalama gerçekleştirir.
Merkeziyetçi Öğrenme vs. Federasyonel Öğrenme
| Özellik | Merkeziyetçi Yapay Zeka | Federasyonel Öğrenme |
|---|---|---|
| Veri Konumu | Merkezi Bulut/Sunucu | Dağıtık Uç Cihazlar |
| Gizlilik | Ham veriler buluta yüklenir | Veri cihazda kalır |
| Bant Genişliği | Yüksek (ham veri kümelerini yükler) | Düşük (model ağırlıklarını yükler) |
| Veri Çeşitliliği | Yüklenen veri kümeleriyle sınırlı | Son derece yüksek (gerçek dünyadan uç veriler) |
| Yasal Uyumluluk | Zor (GDPR/HIPAA engelleri) | Doğal olarak uyumlu (tasarımdan gelen gizlilik) |
Güvenlik Eklentileri: Gizlilik ve Şifreleme
Federasyonel Öğrenme doğası gereği merkezi eğitimden daha güvenli olsa da, sunucuya ham ağırlıkların gönderilmesi hala küçük gizlilik riskleri taşır (çünkü ağırlıklar bazen eğitim verilerini yeniden oluşturmak için tersine mühendisliğe tabi tutulabilir). Buna karşı koymak için Federasyonel Öğrenme iki temel güvenlik tekniği ile birleştirilir:
- Güvenli Agregasyon (Secure Aggregation - SecAgg): Sunucunun, tek bir istemcinin yerel model güncellemesini görmeden tüm yerel model güncellemelerinin toplamını hesaplamasına olanak tanıyan kriptografik bir protokol. Sunucu yalnızca birleştirilmiş sonucu görür.
- Diferansiyel Gizlilik (Differential Privacy - DP): Yüklemeden önce yerel ağırlıklara matematiksel “gürültü” eklenmesi. Bu, hiçbir bireysel kullanıcının verisinin küresel model tarafından ayırt edilememesini veya hafızaya alınamamasını sağlar.
Gerçek Hayat Örnekleri
Federasyonel Öğrenme bugün zaten cihazlarınızda sessizce çalışıyor:
- Google Gboard: Google, sonraki kelime tahmini ve arama sorgusu önerilerini eğitmek için Federasyonel Öğrenme kullanır. Klavyeniz, tuş vuruşlarınızı Google sunucularına göndermeden yazma alışkanlıklarınızı öğrenir.
- Apple QuickType: Apple, iPhone’larda otomatik düzeltmeyi ve Siri ses tanıma önerilerini doğrudan geliştirmek için merkeziyetsiz eğitimden yararlanır.
- Sağlık Hizmetleri (MELLODDY Projesi): Lider ilaç şirketleri, tescilli araştırmalarını rakiplerine ifşa etmeden, özel kimyasal veritabanları üzerinde ilaç keşif modellerini işbirlikçi bir şekilde eğitmek için Federasyonel Öğrenme kullanır.
Özet
Federasyonel Öğrenme, yapay zeka sistemlerini kurma şeklimizde bir paradigma değişimine işaret ediyor. Veri sahipliğine saygı duyar, iletişim maliyetlerini en aza indirir ve yüksek düzeyde denetlenen sektörlerde yapay zeka eğitimini mümkün kılar. Eğitim sürecini uç noktalara taşıyarak, kişisel verilerimizi tam olarak ait olduğu yerde, yani kendi ellerimizde tutarken daha akıllı ve daha kişiselleştirilmiş modeller geliştirebiliriz.
Ghaznix Blog’unda merkeziyetsiz teknoloji hakkında daha fazla içgörü keşfedin →