یادگیری فدرال

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

بررسی اجمالی

این سند رابط‌هایی را معرفی می‌کند که وظایف یادگیری فدرال را تسهیل می‌کند، مانند آموزش فدرال یا ارزیابی با مدل‌های یادگیری ماشین موجود پیاده‌سازی شده در TensorFlow. در طراحی این رابط‌ها، هدف اولیه ما این بود که امکان آزمایش یادگیری فدرال را بدون نیاز به دانش نحوه عملکرد آن در زیر هود فراهم کنیم و الگوریتم‌های یادگیری فدرال پیاده‌سازی شده را بر روی انواع مدل‌ها و داده‌های موجود ارزیابی کنیم. ما شما را تشویق می کنیم که دوباره به پلتفرم کمک کنید. TFF با در نظر گرفتن توسعه پذیری و ترکیب پذیری طراحی شده است و ما از مشارکت ها استقبال می کنیم. ما هیجان زده هستیم که ببینیم چه چیزی به ذهن شما می رسد!

رابط های ارائه شده توسط این لایه از سه بخش کلیدی زیر تشکیل شده است:

  • مدل ها کلاس ها و توابع کمکی که به شما امکان می دهد مدل های موجود خود را برای استفاده با TFF بپیچید. بسته بندی یک مدل می تواند به سادگی فراخوانی یک تابع بسته بندی منفرد باشد (مثلا tff.learning.from_keras_model )، یا تعریف یک زیر کلاس از رابط tff.learning.Model برای سفارشی سازی کامل.

  • سازندگان محاسبات فدرال توابع کمکی که محاسبات فدرال را برای آموزش یا ارزیابی با استفاده از مدل‌های موجود شما می‌سازند.

  • مجموعه داده ها مجموعه های کنسرو شده ای از داده ها که می توانید برای استفاده در شبیه سازی سناریوهای یادگیری فدرال در پایتون دانلود کنید و به آنها دسترسی پیدا کنید. اگرچه یادگیری فدرال برای استفاده با داده های غیرمتمرکز طراحی شده است که نمی توان آنها را به سادگی در یک مکان متمرکز دانلود کرد، در مراحل تحقیق و توسعه اغلب انجام آزمایش های اولیه با استفاده از داده هایی که می توانند به صورت محلی دانلود و دستکاری شوند، راحت است، به ویژه برای توسعه دهندگانی که ممکن است جدید به رویکرد

این رابط ها عمدتاً در فضای نام tff.learning تعریف می شوند، به جز مجموعه داده های تحقیق و سایر قابلیت های مرتبط با شبیه سازی که در tff.simulation گروه بندی شده اند. این لایه با استفاده از رابط های سطح پایین ارائه شده توسط هسته مرکزی (FC) پیاده سازی می شود که یک محیط زمان اجرا نیز فراهم می کند.

قبل از ادامه، توصیه می‌کنیم ابتدا آموزش‌های طبقه‌بندی تصویر و تولید متن را مرور کنید، زیرا آنها بیشتر مفاهیمی را که در اینجا توضیح داده شده‌اند با استفاده از مثال‌های عینی معرفی می‌کنند. اگر علاقه مند به کسب اطلاعات بیشتر در مورد نحوه عملکرد TFF هستید، ممکن است بخواهید آموزش الگوریتم های سفارشی را به عنوان مقدمه ای بر رابط های سطح پایین تر که برای بیان منطق محاسبات فدرال استفاده می کنیم و برای مطالعه پیاده سازی موجود از رابط tff.learning .

مدل ها

مفروضات معماری

سریال سازی

هدف TFF پشتیبانی از انواع سناریوهای یادگیری توزیع شده است که در آن کد مدل یادگیری ماشینی که شما می نویسید ممکن است بر روی تعداد زیادی از مشتریان ناهمگن با قابلیت های متنوع اجرا شود. در حالی که در یک انتهای طیف، در برخی از برنامه‌ها، این کلاینت‌ها ممکن است سرورهای پایگاه داده قدرتمندی باشند، بسیاری از کاربردهای مهم پلت فرم ما قصد دارد از آن‌ها پشتیبانی کند که شامل دستگاه‌های تلفن همراه و جاسازی شده با منابع محدود می‌شود. ما نمی توانیم فرض کنیم که این دستگاه ها قادر به میزبانی زمان اجرا پایتون هستند. تنها چیزی که در این مرحله می توانیم فرض کنیم این است که آنها می توانند یک زمان اجرا محلی TensorFlow را میزبانی کنند. بنابراین، یک فرض اساسی معماری که ما در TFF می‌کنیم این است که کد مدل شما باید به‌عنوان یک گراف TensorFlow قابل سریال‌سازی باشد.

همچنان می توانید (و باید) کد TF خود را با پیروی از آخرین بهترین شیوه ها مانند استفاده از حالت مشتاق توسعه دهید. با این حال، کد نهایی باید سریال‌سازی شود (به عنوان مثال، می‌تواند به عنوان یک tf.function برای کد حالت مشتاق بسته شود). این تضمین می‌کند که هر وضعیت پایتون یا جریان کنترلی که در زمان اجرا لازم است را می‌توان سریال‌سازی کرد (احتمالاً با کمک Autograph ).

در حال حاضر، TensorFlow به طور کامل از سریال‌سازی و deserializing حالت مشتاق TensorFlow پشتیبانی نمی‌کند. بنابراین، سریال سازی در TFF در حال حاضر از الگوی TF 1.0 پیروی می کند، که در آن تمام کدها باید در داخل یک tf.Graph شوند که TFF کنترل می کند. این بدان معناست که در حال حاضر TFF نمی تواند یک مدل از قبل ساخته شده را مصرف کند. در عوض، منطق تعریف مدل در یک تابع بدون arg بسته بندی شده است که یک tff.learning.Model را برمی گرداند. سپس این تابع توسط TFF فراخوانی می شود تا اطمینان حاصل شود که تمام اجزای مدل سریالی هستند. علاوه بر این، TFF به عنوان یک محیط با تایپ قوی، به کمی فراداده اضافی مانند مشخصات نوع ورودی مدل شما نیاز دارد.

تجمع

ما قویاً به اکثر کاربران توصیه می‌کنیم که مدل‌هایی را با استفاده از Keras بسازند، بخش Converters for Keras را در زیر ببینید. این بسته‌بندی‌ها جمع‌آوری به‌روزرسانی‌های مدل و همچنین هر معیاری را که برای مدل تعریف شده است به‌طور خودکار مدیریت می‌کنند. با این حال، هنوز هم ممکن است مفید باشد که بفهمیم چگونه تجمیع برای یک tff.learning.Model عمومی مدیریت می شود.

همیشه حداقل دو لایه از تجمیع در یادگیری فدرال وجود دارد: تجمیع محلی روی دستگاه و تجمیع بین دستگاهی (یا فدرال):

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

    انجام تجمیع در این سطح به عهده کد مدل شما است و با استفاده از ساختارهای استاندارد TensorFlow انجام می شود.

    ساختار کلی پردازش به شرح زیر است:

    • مدل ابتدا tf.Variable s را برای نگهداری مجموعه‌ها می‌سازد، مانند تعداد دسته‌ها یا تعداد نمونه‌های پردازش‌شده، مجموع تلفات هر دسته یا هر مثال و غیره.

    • TFF چندین بار متد forward_pass را در Model شما فراخوانی می‌کند، به‌طور متوالی بر روی دسته‌های بعدی داده‌های کلاینت، که به شما امکان می‌دهد متغیرهایی را که مجموعه‌های مختلف را به عنوان یک اثر جانبی در خود نگه می‌دارند، به‌روزرسانی کنید.

    • در نهایت، TFF از روش report_local_unfinalized_metrics در مدل شما استفاده می‌کند تا به مدل شما اجازه دهد تمام آمار خلاصه‌ای را که جمع‌آوری کرده در مجموعه فشرده‌ای از معیارها جمع‌آوری کند تا توسط مشتری صادر شود. اینجاست که کد مدل شما ممکن است، به عنوان مثال، مجموع ضررها را بر تعداد نمونه های پردازش شده برای صادرات میانگین ضرر و غیره تقسیم کند.

  • تجمیع فدرال این سطح از تجمیع به تجمع در چندین مشتری (دستگاه) در سیستم اشاره دارد. مجدداً، هم برای پارامترهای مدل (متغیرها)، که در بین مشتریان میانگین می‌شوند، و هم برای معیارهایی که مدل شما در نتیجه تجمیع محلی صادر می‌کند، اعمال می‌شود.

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

    ساختار کلی پردازش به شرح زیر است:

    • مدل اولیه و هر پارامتری که برای آموزش مورد نیاز است، توسط یک سرور بین زیرمجموعه ای از مشتریان توزیع می شود که در یک دوره آموزشی یا ارزیابی شرکت خواهند کرد.

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

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

رابط های انتزاعی

این رابط سازنده اصلی + ابرداده با رابط tff.learning.Model به صورت زیر نمایش داده می شود:

  • متدهای سازنده، forward_pass ، و report_local_unfinalized_metrics باید متغیرهای مدل، پاس رو به جلو و آماری را که می‌خواهید گزارش کنید، ایجاد کنند. همانطور که در بالا توضیح داده شد، TensorFlow ساخته شده توسط این روش ها باید قابل سریال سازی باشد.

  • ویژگی input_spec ، و همچنین 3 خاصیت که زیرمجموعه های متغیرهای آموزش پذیر، غیرقابل آموزش و محلی شما را برمی گرداند نشان دهنده ابرداده است. TFF از این اطلاعات برای تعیین نحوه اتصال بخش‌هایی از مدل خود به الگوریتم‌های بهینه‌سازی فدرال، و تعریف امضاهای نوع داخلی برای کمک به تأیید صحت سیستم ساخته‌شده استفاده می‌کند (به طوری که مدل شما نمی‌تواند روی داده‌هایی که با آنچه مطابقت ندارند نمونه‌سازی شود.» مدل برای مصرف طراحی شده است).

علاوه بر این، رابط انتزاعی tff.learning.Model ویژگی metric_finalizers را نشان می‌دهد که مقادیر نهایی نشده یک متریک را می‌گیرد (بازگردانده شده توسط report_local_unfinalized_metrics() ) و مقادیر متریک نهایی را برمی‌گرداند. metric_finalizers و report_local_unfinalized_metrics() با هم برای ایجاد یک جمع‌کننده معیارهای متقابل مشتری هنگام تعریف فرآیندهای آموزشی فدرال یا محاسبات ارزیابی استفاده می‌شود. به عنوان مثال، یک جمع‌کننده ساده tff.learning.metrics.sum_then_finalize ابتدا مقادیر متریک نهایی نشده مشتریان را جمع می‌کند و سپس توابع نهایی‌کننده را در سرور فراخوانی می‌کند.

می‌توانید نمونه‌هایی از نحوه تعریف tff.learning.Model سفارشی خود را در قسمت دوم آموزش طبقه‌بندی تصاویر ما، و همچنین در مدل‌های نمونه‌ای که برای آزمایش در model_examples.py استفاده می‌کنیم، بیابید.

مبدل کراس

تقریباً تمام اطلاعات مورد نیاز TFF را می توان با فراخوانی رابط های tf.keras به دست آورد، بنابراین اگر یک مدل Keras دارید، می توانید برای ساخت tff.learning.Model به tff.learning.from_keras_model تکیه کنید.

توجه داشته باشید که TFF همچنان از شما می خواهد که یک سازنده - یک تابع مدل بدون آرگومان مانند موارد زیر ارائه کنید:

def model_fn():
  keras_model = ...
  return tff.learning.from_keras_model(keras_model, sample_batch, loss=...)

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

استفاده از Wrapper های Keras در طبقه بندی تصاویر و آموزش های تولید متن نشان داده شده است.

سازندگان محاسبات فدرال

بسته tff.learning چندین سازنده برای tff.Computation فراهم می کند که وظایف مربوط به یادگیری را انجام می دهند. ما انتظار داریم مجموعه چنین محاسباتی در آینده گسترش یابد.

مفروضات معماری

اعدام

دو مرحله مجزا در اجرای محاسبات فدرال وجود دارد.

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

  • Execute TFF راه هایی را برای اجرای این محاسبات ارائه می دهد. در حال حاضر، اجرا فقط از طریق یک شبیه سازی محلی (مثلاً در یک نوت بوک با استفاده از داده های غیرمتمرکز شبیه سازی شده) پشتیبانی می شود.

یک محاسبات فدرال ایجاد شده توسط API یادگیری فدرال TFF، مانند یک الگوریتم آموزشی که از میانگین‌گیری مدل فدرال استفاده می‌کند، یا یک ارزیابی فدرال، شامل تعدادی عنصر است که مهمترین آنها عبارتند از:

  • شکل سریالی کد مدل شما و همچنین کد TensorFlow اضافی که توسط چارچوب یادگیری فدرال ساخته شده است تا حلقه آموزش/ارزیابی مدل شما را هدایت کند (مانند ساخت بهینه سازها، اعمال به روز رسانی مدل، تکرار بر روی مجموعه داده های tf.data.Dataset . و معیارهای محاسباتی، و اعمال به روز رسانی انبوه بر روی سرور، به نام چند).

  • مشخصات اعلامی ارتباط بین کلاینت و سرور (معمولاً اشکال مختلف تجمیع در دستگاه های کلاینت، و پخش از سرور به همه مشتریان)، و چگونگی این ارتباط توزیع شده با اجرای کلاینت-محلی یا سرور-محلی درهم می آمیزد. کد TensorFlow

محاسبات فدرال ارائه شده در این فرم سریالی در یک زبان داخلی مستقل از پلتفرم و متمایز از پایتون بیان می‌شوند، اما برای استفاده از API یادگیری فدرال، نیازی نیست که خود را با جزئیات این نمایش درگیر کنید. محاسبات در کد پایتون شما به عنوان اشیایی از نوع tff.Computation ، که در بیشتر موارد می‌توانید آن را به‌عنوان s غیرشفاف Python callable در نظر بگیرید.

در آموزش ها، شما محاسبات فدرال را به گونه ای فراخوانی می کنید که گویی توابع معمولی پایتون هستند تا به صورت محلی اجرا شوند. با این حال، TFF برای بیان محاسبات فدرال به گونه‌ای طراحی شده است که بیشتر جنبه‌های محیط اجرا را نادیده می‌گیرد، به طوری که می‌توانند به طور بالقوه در گروه‌هایی از دستگاه‌های دارای Android یا در خوشه‌های یک مرکز داده قابل اجرا باشند. باز هم، پیامد اصلی این فرضیات قوی در مورد سریال سازی است. به ویژه، هنگامی که یکی از روش های build_... را که در زیر توضیح داده شده است فراخوانی می کنید، محاسبات کاملاً سریالی می شود.

حالت مدل سازی

TFF یک محیط برنامه نویسی کاربردی است، اما بسیاری از فرآیندهای مورد علاقه در یادگیری فدرال حالتی هستند. برای مثال، یک حلقه آموزشی که شامل چندین دور میانگین‌گیری مدل فدرال می‌شود، نمونه‌ای از آن چیزی است که می‌توانیم آن را به عنوان یک فرآیند حالت طبقه‌بندی کنیم. در این فرآیند، حالتی که از دور به دور تغییر می‌کند، شامل مجموعه‌ای از پارامترهای مدل است که در حال آموزش هستند، و احتمالاً حالت اضافی مرتبط با بهینه‌ساز (مثلاً یک بردار حرکت).

از آنجایی که TFF عملکردی است، فرآیندهای حالت دار در TFF به عنوان محاسباتی مدل می شوند که حالت فعلی را به عنوان ورودی می پذیرند و سپس حالت به روز شده را به عنوان خروجی ارائه می کنند. برای تعریف کامل یک فرآیند حالت دار، باید مشخص شود که حالت اولیه از کجا می آید (در غیر این صورت نمی توانیم فرآیند را بوت استرپ کنیم). این در تعریف کلاس کمکی tff.templates.IterativeProcess ، با 2 ویژگی initialize و next مربوط به مقداردهی اولیه و تکرار، به تصویر کشیده شده است.

سازندگان موجود

در حال حاضر، TFF توابع سازنده مختلفی را ارائه می کند که محاسبات فدرال را برای آموزش و ارزیابی فدرال ایجاد می کند. دو مثال قابل توجه عبارتند از:

مجموعه داده ها

مفروضات معماری

انتخاب مشتری

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

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

به منظور شبیه سازی استقرار واقعی کد یادگیری فدرال خود، به طور کلی یک حلقه آموزشی به شکل زیر می نویسید:

trainer = tff.learning.algorithms.build_weighted_fed_avg(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

while True:
  data_for_this_round = sample(federated_training_data)
  result = trainer.next(state, data_for_this_round)
  state = result.state

به منظور تسهیل این امر، هنگام استفاده از TFF در شبیه‌سازی، داده‌های فدرال به‌عنوان list پایتون پذیرفته می‌شوند، با یک عنصر برای هر دستگاه مشتری شرکت‌کننده برای نمایش tf.data.Dataset محلی آن دستگاه.

رابط های انتزاعی

به منظور استاندارد کردن برخورد با مجموعه داده های فدرال شبیه سازی شده، TFF یک رابط انتزاعی tff.simulation.datasets.ClientData را ارائه می دهد که به فرد اجازه می دهد مجموعه ای از مشتریان را برشمرد و یک مجموعه tf.data.Dataset که حاوی داده های یک خاص است بسازد. مشتری. آن tf.data.Dataset را می توان مستقیماً به عنوان ورودی به محاسبات فدرال تولید شده در حالت مشتاق تغذیه کرد.

لازم به ذکر است که امکان دسترسی به هویت مشتری یک ویژگی است که فقط توسط مجموعه داده ها برای استفاده در شبیه سازی ها ارائه می شود، جایی که ممکن است به توانایی آموزش داده ها از زیر مجموعه های خاص مشتریان نیاز باشد (به عنوان مثال، برای شبیه سازی در دسترس بودن روزانه انواع مختلف انواع مشتریان). محاسبات کامپایل شده و زمان اجرا اساسی هیچ مفهومی از هویت مشتری را شامل نمی شود. هنگامی که داده‌های زیرمجموعه خاصی از کلاینت‌ها به‌عنوان ورودی انتخاب شدند، به عنوان مثال، در تماس با tff.templates.IterativeProcess.next ، هویت مشتری دیگر در آن ظاهر نمی‌شود.

مجموعه داده های موجود

ما فضای نام tff.simulation.datasets را به مجموعه داده‌هایی اختصاص داده‌ایم که رابط tff.simulation.datasets.ClientData را برای استفاده در شبیه‌سازی‌ها پیاده‌سازی می‌کنند، و آن را با مجموعه‌های داده برای پشتیبانی از طبقه‌بندی تصویر و آموزش‌های تولید متن پیوند داده‌ایم. مایلیم شما را تشویق کنیم که مجموعه داده های خود را در این پلتفرم مشارکت دهید.