یادگیری فدرالی: آموزش هوش مصنوعی بدون اشتراک‌گذاری داده‌های شما

نمودار مفهومی یادگیری فدرالی

در فرآیند سنتی یادگیری ماشین، جمع‌آوری داده‌ها اولین و اغلب پرهزینه‌ترین مرحله است. برای آموزش یک مدل، باید داده‌های خام کاربر — مانند عکس‌ها، پیام‌های متنی، سوابق بهداشتی یا تراکنش‌های مالی — را جمع‌آوری کرده و در یک سرور ابری متمرکز بارگذاری کنید.

اگرچه این رویکرد متمرکز انقلاب هوش مصنوعی را به پیش برده است، اما با چالش‌های بزرگی روبرو است: ۱. نگرانی‌های حریم خصوصی: کاربران به طور فزاینده‌ای از بارگذاری داده‌های خصوصی در سرورهای شخص ثالث خودداری می‌کنند. ۲. قوانین داده: مقرراتی مانند GDPR و HIPAA انتقال و ذخیره‌سازی داده‌های شخصی را به شدت محدود می‌کنند. ۳. هزینه‌های پهنای باند: بارگذاری گیگابایت‌ها داده خام از میلیون‌ها دستگاه لبه (مانند گوشی‌های هوشمند) بسیار ناکارآمد است.

یادگیری فدرالی (Federated Learning - FL) این مشکلات را با واژگون کردن پارادایم سنتی حل می‌کند. به جای آوردن داده‌ها به مدل، مدل را به داده‌ها می‌آورد.


مفهوم اصلی: آموزش غیرمتمرکز

در یادگیری فدرالی، سرور مرکزی یک مدل جهانی را نگهداری می‌کند. به جای جمع‌آوری داده‌های خام برای آموزش این مدل، سرور یک فرآیند آموزش مشترک را در شبکه‌ای از دستگاه‌های لبه (کلاینت‌ها)، مانند گوشی‌های هوشمند، دستگاه‌های خانه هوشمند یا پایگاه‌های داده بیمارستان‌های منطقه‌ای هماهنگ می‌کند.

قانون اساسی یادگیری فدرالی این است:

داده‌های خام هرگز دستگاه محلی را ترک نمی‌کنند. فقط به‌روزرسانی‌های مدل ریاضی به اشتراک گذاشته می‌شوند.


راهنمای گام به گام: نحوه کارکرد

یک چرخه آموزش یادگیری فدرالی معمولی (که به عنوان دور ارتباطی شناخته می‌شود) از پنج مرحله اصلی تشکیل شده است:

sequenceDiagram
    participant Server as سرور مرکزی (مدل جهانی)
    participant ClientA as کلاینت A (داده خصوصی A)
    participant ClientB as کلاینت B (داده خصوصی B)
    
    rect rgb(240, 248, 255)
        Note over Server: مرحله ۱: مقداردهی اولیه مدل جهانی
    end
    Server->>ClientA: مرحله ۲: ارسال وزن‌های جهانی (W_t)
    Server->>ClientB: مرحله ۲: ارسال وزن‌های جهانی (W_t)
    rect rgb(245, 245, 245)
        Note over ClientA: مرحله ۳: آموزش محلی روی داده‌های خصوصی
        Note over ClientB: مرحله ۳: آموزش محلی روی داده‌های خصوصی
    end
    ClientA->>Server: مرحله ۴: ارسال به‌روزرسانی‌های محلی (W_t^A)
    ClientB->>Server: مرحله ۴: ارسال به‌روزرسانی‌های محلی (W_t^B)
    rect rgb(240, 255, 240)
        Note over Server: مرحله ۵: میانگین‌گیری به‌روزرسانی‌ها (FedAvg)<br/>به‌روزرسانی مدل جهانی (W_t+1)
    end

۱. مقداردهی اولیه

سرور مرکزی مدل جهانی را با وزن‌های شروع ($W_0$) مقداردهی اولیه می‌کند. این وزن‌ها می‌توانند تصادفی باشند یا روی یک مجموعه داده عمومی پیش‌آموزش دیده باشند.

۲. توزیع (پخش مدل)

سرور زیرمجموعه‌ای از دستگاه‌های کلاینت در دسترس را انتخاب می‌کند (مثلاً گوشی‌هایی که به شارژر متصل هستند، به وای‌فای متصل هستند و در حالت بیکار قرار دارند) و وزن‌های مدل جهانی فعلی ($W_t$) را برای آن‌ها ارسال می‌کند.

۳. آموزش محلی

هر کلاینت انتخاب شده، مدل جهانی دریافت شده را روی مجموعه داده محلی و خصوصی خود آموزش می‌دهد. این کار با استفاده از الگوریتم‌های بهینه‌سازی استاندارد مانند گرادیان کاهشی تصادفی (SGD) انجام می‌شود. پس از چند دوره (epochs)، هر کلاینت $i$ مجموعه جدیدی از وزن‌های مدل محلی ($W_t^i$) را تولید می‌کند.

۴. بارگذاری به‌روزرسانی‌های محلی

کلاینت‌ها به جای ارسال داده‌های آموزشی خصوصی، فقط وزن‌های مدل محلی جدید خود (یا تفاوت $\Delta W_t^i = W_t^i - W_t$) را به سرور مرکزی ارسال می‌کنند. این به‌روزرسانی‌ها معمولاً با استفاده از پروتکل‌های رمزنگاری ایمن می‌شوند.

۵. تجمیع جهانی

سرور مرکزی به‌روزرسانی‌های تمام کلاینت‌های شرکت‌کننده را جمع‌آوری می‌کند. میانگین آن‌ها را محاسبه می‌کند (معمولاً بر اساس حجم داده‌های محلی هر کلاینت وزن‌دهی می‌شود) تا یک مدل جهانی جدید ($W_{t+1}$) تولید کند. رایج‌ترین الگوریتم برای این کار میانگین‌گیری فدرالی (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 بنویسیم.

در این سناریو، ما می‌خواهیم مدلی را برای پیش‌بینی قیمت خانه ($y = w \cdot x$) با استفاده از رگرسیون خطی آموزش دهیم. ما یک سرور مرکزی و ۳ کلاینت داریم که هر کدام متراژ خانه ($x$) و قیمت ($y$) خصوصی خود را دارند.

import numpy as np

# ۱. راه‌اندازی داده‌های خصوصی کلاینت (نمی‌تواند با سرور به اشتراک گذاشته شود)
# هر کلاینت تعداد متفاوتی از نمونه‌های محلی (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())

# ۲. وزن اولیه سرور (مدل جهانی: 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 = []
    
    # مرحله ۲ و ۳: توزیع مدل و آموزش محلی در دستگاه‌های کلاینت
    for client_name, data in clients_data.items():
        x = data["x"]
        y = data["y"]
        n_i = len(x)
        
        # کلاینت وزن جهانی را دریافت می‌کند
        w_local = global_weight
        
        # کلاینت برای چند دوره به صورت محلی آموزش می‌بیند
        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)
        
    # مرحله ۴ و ۵: تجمیع در سمت سرور با استفاده از میانگین‌گیری فدرالی (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. تجمیع امن (Secure Aggregation - SecAgg): یک پروتکل رمزنگاری که به سرور اجازه می‌دهد مجموع همه به‌روزرسانی‌های مدل محلی را بدون دیدن به‌روزرسانی هیچ کلاینت فردی محاسبه کند. سرور فقط نتیجه تجمیع شده را می‌بیند.
  2. حریم خصوصی دیفرانسیل (Differential Privacy - DP): افزودن “نویز” ریاضی به وزن‌های محلی قبل از بارگذاری. این تضمین می‌کند که داده‌های هیچ کاربر فردی توسط مدل جهانی قابل شناسایی یا حفظ نباشد.

نمونه‌های واقعی در دنیای واقعی

یادگیری فدرالی امروزه در حال حاضر به آرامی در دستگاه‌های شما در حال اجرا است:

  • Google Gboard: گوگل از یادگیری فدرالی برای آموزش پیش‌بینی کلمه بعدی و پیشنهادات جستجو استفاده می‌کند. کیبورد شما عادت‌های تایپ شما را بدون ارسال ضربه‌های کلید به سرورهای گوگل یاد می‌گیرد.
  • Apple QuickType: اپل از آموزش غیرمتمرکز برای بهبود تصحیح خودکار و پیشنهادات تشخیص صدای Siri به طور مستقیم در آیفون‌ها استفاده می‌کند.
  • مراقبت‌های بهداشتی (پروژه MELLODDY): شرکت‌های داروسازی پیشرو از یادگیری فدرالی برای آموزش مشترک مدل‌های کشف دارو در پایگاه‌های داده شیمیایی خصوصی بدون افشای تحقیقات اختصاصی خود به رقبا استفاده می‌کنند.

خلاصه

یادگیری فدرالی نشان‌دهنده یک تغییر پارادایم در نحوه ساخت سیستم‌های هوش مصنوعی است. این روش به مالکیت داده‌ها احترام می‌گذارد، هزینه‌های ارتباطی را به حداقل می‌رساند و آموزش هوش مصنوعی را در صنایع بسیار تحت نظارت امکان‌پذیر می‌سازد. با انتقال فرآیند آموزش به لبه، می‌توانیم مدل‌های هوشمندتر و شخصی‌سازی‌شده‌تری بسازیم، در حالی که داده‌های شخصی خود را دقیقاً در همان جایی که تعلق دارند نگه‌داریم: در دستان خودمان.


دیدگاه‌های فناوری غیرمتمرکز بیشتری را در وبلاگ غزنکس کاوش کنید →