فیڈریٹڈ لرننگ: اپنے ڈیٹا کو شیئر کیے بغیر AI کی تربیت

فیڈریٹڈ لرننگ کا تصوراتی خاکہ

مشین لرننگ کے روایتی فلو میں، ڈیٹا اکٹھا کرنا سب سے پہلا اور اکثر سب سے مہنگا مرحلہ ہوتا ہے۔ ایک ماڈل کو تربیت دینے کے لیے، آپ کو صارفین کا خام ڈیٹا (جیسے تصاویر، ٹیکسٹ میسجز، صحت کے ریکارڈ، یا مالی لین دین) جمع کرنا پڑتا ہے اور اسے مرکزی کلاؤڈ سرور پر اپ لوڈ کرنا پڑتا ہے۔

اگرچہ اس مرکزی نقطہ نظر نے AI انقلاب کو جنم دیا ہے، لیکن اسے بڑے چیلنجز کا سامنا ہے:

  1. پرائیویسی کے خدشات: صارفین نجی ڈیٹا کو تھرڈ پارٹی سرورز پر اپ لوڈ کرنے سے کتراتے ہیں۔
  2. ڈیٹا ریگولیشن: GDPR اور HIPAA جیسے قوانین سختی سے نجی ڈیٹا کی منتقلی اور اسٹوریج کو محدود کرتے ہیں۔
  3. بینڈوتھ کے اخراجات: لاکھوں ایج ڈیوائسز (جیسے اسمارٹ فونز) سے خام ڈیٹا اپ لوڈ کرنا انتہائی غیر موثر ہے۔

فیڈریٹڈ لرننگ (Federated Learning - FL) روایتی طریقے کو بدل کر ان مسائل کو حل کرتی ہے۔ ڈیٹا کو ماڈل کے پاس لانے کے بجائے، یہ ماڈل کو ڈیٹا کے پاس لے جاتی ہے۔


بنیادی تصور: غیر مرکزی تربیت (Decentralized Training)

فیڈریٹڈ لرننگ میں، مرکزی سرور ایک عالمی ماڈل (global model) کو برقرار رکھتا ہے۔ اس ماڈل کی تربیت کے لیے خام ڈیٹا اکٹھا کرنے کے بجائے، سرور ایج ڈیوائسز (کلائنٹس) جیسے اسمارٹ فونز، اسمارٹ ہوم ڈیوائسز، یا ہسپتالوں کے ڈیٹا بیس پر مشتمل نیٹ ورک میں ایک باہمی تربیتی عمل کو مربوط کرتا ہے۔

فیڈریٹڈ لرننگ کا بنیادی اصول یہ ہے:

خام ڈیٹا کبھی بھی مقامی آلہ سے باہر نہیں جاتا۔ صرف ماڈل کے ریاضیاتی اپ ڈیٹس شیئر کیے جاتے ہیں۔


ورک فلو: یہ کیسے کام کرتا ہے؟

ایک عام فیڈریٹڈ لرننگ کا تربیتی دورانیہ (جسے کمیونیکیشن راؤنڈ کہا جاتا ہے) پانچ اہم مراحل پر مشتمل ہوتا ہے:

sequenceDiagram
    participant Server as مرکزی سرور (عالمی ماڈل)
    participant ClientA as کلائنٹ A (نجی ڈیٹا A)
    participant ClientB as کلائنٹ B (نجی ڈیٹا B)
    
    rect rgb(240, 248, 255)
        Note over Server: مرحلہ 1: عالمی ماڈل کا آغاز
    end
    Server->>ClientA: مرحلہ 2: عالمی ویٹس بھیجنا (W_t)
    Server->>ClientB: مرحلہ 2: عالمی ویٹس بھیجنا (W_t)
    rect rgb(245, 245, 245)
        Note over ClientA: مرحلہ 3: مقامی طور پر نجی ڈیٹا پر تربیت
        Note over ClientB: مرحلہ 3: مقامی طور پر نجی ڈیٹا پر تربیت
    end
    ClientA->>Server: مرحلہ 4: مقامی اپ ڈیٹس بھیجنا (W_t^A)
    ClientB->>Server: مرحلہ 4: مقامی اپ ڈیٹس بھیجنا (W_t^B)
    rect rgb(240, 255, 240)
        Note over Server: مرحلہ 5: اپ ڈیٹس کا اوسط نکالنا (FedAvg)<br/>عالمی ماڈل کو اپ ڈیٹ کرنا (W_t+1)
    end

1. آغاز (Initialization)

مرکزی سرور عالمی ماڈل کو ابتدائی ویٹس ($W_0$) کے ساتھ شروع کرتا ہے۔ یہ ویٹس رینڈم ہو سکتے ہیں یا کسی عوامی ڈیٹا سیٹ پر پہلے سے تربیت یافتہ ہو سکتے ہیں۔

2. تقسیم (ماڈل براڈکاسٹ)

سرور دستیاب کلائنٹ ڈیوائسز کے ایک گروپ کو منتخب کرتا ہے (جیسے وہ فونز جو چارج ہو رہے ہوں، وائی فائی سے منسلک ہوں اور فارغ ہوں) اور انہیں موجودہ عالمی ماڈل کے ویٹس ($W_t$) بھیجتا ہے۔

3. مقامی تربیت

ہر منتخب کلائنٹ حاصل کردہ عالمی ماڈل کو اپنے مقامی نجی ڈیٹا سیٹ پر تربیت دیتا ہے۔ یہ کام عام طور پر اسٹاکسٹک گریڈینٹ ڈیسنٹ (SGD) جیسے معیاری اصلاحی الگورتھم کے ذریعے کیا جاتا ہے۔ چند چکروں (epochs) کے بعد، ہر کلائنٹ $i$ ماڈل کے مقامی ویٹس کا ایک نیا سیٹ ($W_t^i$) تیار کرتا ہے۔

4. مقامی اپ ڈیٹس کو اپ لوڈ کرنا

نجی تربیتی ڈیٹا بھیجنے کے بجائے، کلائنٹس صرف اپنے نئے مقامی ماڈل کے ویٹس (یا فرق $\Delta W_t^i = W_t^i - W_t$) مرکزی سرور کو واپس بھیجتے ہیں۔ یہ اپ ڈیٹس عام طور پر سیکیور کرپٹوگرافک پروٹوکولز کا استعمال کرتے ہوئے بھیجے جاتے ہیں۔

5. عالمی مجموعہ (Aggregation)

مرکزی سرور تمام شریک کلائنٹس سے اپ ڈیٹس جمع کرتا ہے۔ یہ ان کا اوسط نکالتا ہے (عام طور پر ہر کلائنٹ کے پاس موجود مقامی ڈیٹا کی مقدار سے ضرب دے کر) تاکہ ایک نیا عالمی ماڈل ($W_{t+1}$) تیار کیا جا سکے۔ اس کے لیے سب سے عام الگورتھم فیڈریٹڈ اوسط (Federated Averaging - FedAvg) ہے:

$$W_{t+1} = \sum_{i=1}^{K} \frac{n_i}{N} W_t^i$$

جہاں:

  • $K$ شریک کلائنٹس کی تعداد ہے۔
  • $n_i$ کلائنٹ $i$ پر ڈیٹا کے نمونوں کی تعداد ہے۔
  • $N$ تمام شریک کلائنٹس کے ڈیٹا نمونوں کی کل تعداد ہے ($N = \sum n_i$)۔

یہ چکر کئی راؤنڈز تک دہرایا جاتا ہے یہاں تک کہ عالمی ماڈل مطلوبہ درستگی حاصل کر لے۔


کوڈ کی مثال: ایک سادہ پائتھن سیمولیشن

فیڈریٹڈ لرننگ کو عملی طور پر دیکھنے کے لیے، آئیے NumPy کا استعمال کرتے ہوئے ایک سادہ پائتھن سیمولیشن لکھیں۔

اس منظر نامے میں، ہم لکیری ریگریشن (linear regression) کا استعمال کرتے ہوئے گھروں کی قیمتوں ($y = w \cdot x$) کی پیش گوئی کرنے کے لیے ایک ماڈل کی تربیت کرنا چاہتے ہیں۔ ہمارے پاس ایک مرکزی سرور اور 3 کلائنٹس ہیں، جن میں سے ہر ایک کے پاس گھروں کے سائز ($x$) اور قیمتیں ($y$) نجی ہیں۔

import numpy as np

# 1. کلائنٹ کا نجی ڈیٹا سیٹ کریں (سرور کے ساتھ شیئر نہیں کیا جا سکتا)
# ہر کلائنٹ کے پاس مقامی نمونوں (n_i) کی تعداد مختلف ہے
clients_data = {
    "Client_1": {"x": np.array([1.0, 1.5, 2.0]), "y": np.array([110.0, 160.0, 210.0])}, # حقیقی تعلق: y = 100x + 10
    "Client_2": {"x": np.array([0.8, 1.2]),       "y": np.array([90.0, 130.0])},       # حقیقی تعلق: y = 100x + 10
    "Client_3": {"x": np.array([2.5, 3.0, 3.5]), "y": np.array([260.0, 310.0, 360.0])}  # حقیقی تعلق: y = 100x + 10
}

# تمام کلائنٹس میں کل ڈیٹا پوائنٹس (N)
total_samples = sum(len(data["x"]) for data in clients_data.values())

# 2. سرور کا ابتدائی ویٹ (عالمی ماڈل: W_t)
global_weight = 10.0  # ابتدائی اندازہ (حقیقی قیمت 100.0 سے بہت دور)
learning_rate = 0.05
epochs = 5  # مقامی تربیت کے چکر فی راؤنڈ
communication_rounds = 3

print(f"ابتدائی عالمی ویٹ: {global_weight:.2f}\n")

# فیڈریٹڈ لرننگ لوپ
for round_idx in range(communication_rounds):
    print(f"--- کمیونیکیشن راؤنڈ {round_idx + 1} ---")
    local_weights = []
    client_sample_sizes = []
    
    # مرحلہ 2 اور 3: ماڈل کی تقسیم اور کلائنٹ ڈیوائسز پر مقامی تربیت
    for client_name, data in clients_data.items():
        x = data["x"]
        y = data["y"]
        n_i = len(x)
        
        # کلائنٹ عالمی ویٹ حاصل کرتا ہے
        w_local = global_weight
        
        # کلائنٹ مقامی طور پر کچھ epochs کے لیے تربیت کرتا ہے
        for epoch in range(epochs):
            # پیش گوئی کا حساب لگائیں: y_pred = w * x
            y_pred = w_local * x
            # سادہ لکیری ریگریشن کے لیے گریڈینٹ کا حساب لگائیں
            gradient = -2 * np.mean(x * (y - y_pred))
            # مقامی ویٹ کو اپ ڈیٹ کریں
            w_local -= learning_rate * gradient
            
        print(f"  {client_name} نے مقامی ویٹ کی تربیت کی: {w_local:.2f} (نمونے: {n_i})")
        
        # جمع کرنے کے لیے مقامی ویٹس اور نمونے کے سائز محفوظ کریں
        local_weights.append(w_local)
        client_sample_sizes.append(n_i)
        
    # مرحلہ 4 اور 5: سرور سائیڈ پر فیڈریٹڈ اوسط (FedAvg) کا استعمال کرتے ہوئے مجموعہ
    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"=> سرور نے عالمی ویٹ کا اوسط نکالا: {global_weight:.2f}\n")

print(f"فیڈریٹڈ لرننگ کے بعد حتمی عالمی ماڈل ویٹ: {global_weight:.2f}")

یہ کوڈ فیڈریٹڈ لرننگ کی نمائندگی کیوں کرتا ہے:

  • لغت clients_data الگ تھلگ ڈیٹا بیس کی نمائندگی کرتی ہے۔ سرور کبھی بھی ان تک رسائی حاصل نہیں کرتا۔
  • تربیتی لوپ میں، کلائنٹ سے سرور کو منتقل ہونے والا واحد متغیر w_local ہے۔
  • سرور نمونے کے سائز (client_sample_sizes) کی بنیاد پر ایک وزنی اوسط انجام دیتا ہے، جو FedAvg کے ریاضیاتی فارمولے کو لاگو کرتا ہے۔

مرکزی بمقابلہ فیڈریٹڈ لرننگ

خصوصیت مرکزی مشین لرننگ فیڈریٹڈ لرننگ
ڈیٹا کا مقام مرکزی کلاؤڈ/سرور تقسیم شدہ ایج ڈیوائسز
پرائیویسی خام ڈیٹا کلاؤڈ پر اپ لوڈ کیا جاتا ہے ڈیٹا آلہ پر ہی رہتا ہے
بینڈوتھ زیادہ (خام ڈیٹا سیٹس اپ لوڈ ہوتے ہیں) کم (ماڈل کے ویٹس اپ لوڈ ہوتے ہیں)
ڈیٹا کا تنوع اپ لوڈ کردہ ڈیٹا تک محدود انتہائی زیادہ (حقیقی دنیا کا ایج ڈیٹا)
قوانین کی تعمیل مشکل (GDPR/HIPAA کی رکاوٹیں) فطری تعمیل (ڈیزائن کے لحاظ سے)

سیکیورٹی کے اضافی اقدامات: پرائیویسی اور انکرپشن

اگرچہ فیڈریٹڈ لرننگ مرکزی تربیت کے مقابلے میں زیادہ محفوظ ہے، لیکن سرور کو خام ویٹس بھیجنا اب بھی پرائیویسی کا معمولی خطرہ رکھتا ہے (کیونکہ بعض اوقات ویٹس سے اصل ڈیٹا کو ریورس انجینئر کیا جا سکتا ہے)۔ اس کے حل کے لیے، فیڈریٹڈ لرننگ کو دو اہم سیکیورٹی تکنیکوں کے ساتھ ملا دیا جاتا ہے:

  1. سیکیور ایگریگیشن (SecAgg): ایک کرپٹوگرافک پروٹوکول جو سرور کو کسی بھی انفرادی کلائنٹ کی اپ ڈیٹ دیکھے بغیر تمام مقامی اپ ڈیٹس کے مجموعے کا حساب لگانے کی اجازت دیتا ہے۔ سرور صرف مجموعی نتیجہ دیکھتا ہے۔
  2. ڈفرینشل پرائیویسی (DP): اپ لوڈ کرنے سے پہلے مقامی ویٹس میں ریاضیاتی “شور” (noise) شامل کرنا۔ یہ یقینی بناتا ہے کہ عالمی ماڈل سے کسی خاص صارف کے ڈیٹا کی نشاندہی نہ کی جا سکے۔

حقیقی دنیا کی مثالیں

فیڈریٹڈ لرننگ آج پہلے ہی آپ کے آلات پر خاموشی سے کام کر رہی ہے:

  • Google Gboard: گوگل اگلے لفظ کی پیش گوئی اور سرچ کی تجاویز کو بہتر بنانے کے لیے فیڈریٹڈ لرننگ استعمال کرتا ہے۔ آپ کا کی بورڈ آپ کے لکھنے کی عادت کو گوگل سرورز پر بھیجے بغیر سیکھتا ہے۔
  • Apple QuickType: ایپل آئی فونز پر براہ راست آٹو کریکشن اور سری آواز کی شناخت کی تجاویز کو بہتر بنانے کے لیے غیر مرکزی تربیت کا استعمال کرتا ہے۔
  • صحت عامہ (MELLODDY پروجیکٹ): بڑی دوا ساز کمپنیاں نجی کیمیکل ڈیٹا بیس پر ادویات کی دریافت کے ماڈلز کو collaboratively تربیت دینے کے لیے فیڈریٹڈ لرننگ کا استعمال کرتی ہیں بغیر اپنی ملکیتی تحقیق کو حریفوں پر ظاہر کیے۔

خلاصہ

فیڈریٹڈ لرننگ مصنوعی ذہانت کے سسٹمز بنانے کے ہمارے طریقے میں ایک انقلابی تبدیلی کی نمائندگی کرتی ہے۔ یہ ڈیٹا کی ملکیت کا احترام کرتی ہے، مواصلاتی اخراجات کو کم سے کم کرتی ہے، اور انتہائی حساس صنعتوں میں AI کی تربیت کو ممکن بناتی ہے۔ تربیتی عمل کو ایج پر منتقل کر کے، ہم اپنے ذاتی ڈیٹا کو بالکل وہاں رکھ سکتے ہیں جہاں اس کا حق ہے: ہمارے اپنے ہاتھوں میں۔


ڈی سینٹرلائزڈ ٹیکنالوجی کے بارے میں غزنکس بلاگ پر مزید معلومات حاصل کریں →