ما عملا اضافه کردن در زنان در ML سمپوزیوم اکتبر 19 ثبت نام:

آموزش فدراسیون

بررسی اجمالی

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

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

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

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

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

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

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

مدل ها

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

سریال سازی

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

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

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

تجمع

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

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

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

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

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

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

    • TFF فراخوانی forward_pass روش خود را Model چند بار، به ترتیب دسته بیش از پس از آن از داده های مشتری، که اجازه می دهد تا شما را به روز رسانی متغیرهایی مصالح مختلف به عنوان یک عارضه جانبی است.

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

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

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

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

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

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

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

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

این سازنده + رابط پایه ابرداده توسط رابط نشان tff.learning.Model ، به شرح زیر:

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

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

علاوه بر این، رابط انتزاعی tff.learning.Model در معرض اموال federated_output_computation که، همراه با report_local_outputs اموال قبلا ذکر شد، اجازه می دهد تا شما را به کنترل روند جمع آوری آمار خلاصه.

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

مبدل های Keras

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

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

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

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

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

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

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

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

اجرا

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

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

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

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

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

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

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

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

حالت مدل سازی

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

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

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

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

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

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

انتخاب مشتری

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

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

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

trainer = tff.learning.build_federated_averaging_process(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

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

به منظور تسهیل این کار، در هنگام استفاده از 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 رابط برای استفاده در شبیه سازی، و آن را با 2 مجموعه داده های کشت برای حمایت از طبقه بندی تصویر و متن آموزش. ما می خواهیم شما را تشویق کنیم تا مجموعه داده های شخصی خود را در پلت فرم مشارکت دهید.