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

هسته فدراسیون

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

برای آشنایی ملایم با Federated Core ، لطفاً آموزشهای زیر را بخوانید ، زیرا آنها برخی از مفاهیم اساسی را با مثال معرفی کرده و گام به گام ساخت یک الگوریتم میانگین متوسط ​​یکپارچه شده را نشان می دهند.

ما همچنین شما را تشویق به خود را آشنا با آموزش فدرال و آموزش مرتبط در طبقه بندی تصویر و متن ، به عنوان استفاده از API فدرال هسته (FC API) برای یادگیری فدرال برای برخی از گزینه های ما در ساخته شده ارائه زمینه های مهم طراحی این لایه

بررسی اجمالی

اهداف ، موارد استفاده ، و محدوده

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

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

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

هدف از FC، در یک nusthell، این است که قادر نمایندگی مشابه جمع و جور، در یک سطح، شبه مانند مشابه از انتزاع، از منطق برنامه ای است که شبه نیست، بلکه، که اجرایی در انواع محیط های هدف.

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

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

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

در نتیجه، در حالی که چارچوب توزیع برای اهداف عمومی ممکن است عملیات مانند ارسال پیشنهاد و دریافت به عنوان بلوک های ساختمان، FC فراهم می کند بلوک مانند tff.federated_sum ، tff.federated_reduce یا tff.federated_broadcast که ساده در محفظهای قرار دادن پروتکل های توزیع شده است.

زبان

رابط پایتون

TFF با استفاده از زبان داخلی به محاسبات را فدرال، نحو است که توسط نمایندگی serializable در تعریف computation.proto . هرچند کاربران FC API نیازی به تعامل مستقیم با این زبان ندارند. در عوض، ما ارائه API پایتون (به tff فضای نام) که کاری ادامه داده اند آن را AROUNDS به عنوان یک راه برای تعریف محاسبات.

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

در اینجا فقط یک مثال وجود دارد ؛ نمونه های بیشتر را می توان در یافت الگوریتم های سفارشی آموزش.

@tff.federated_computation(tff.type_at_clients(tf.float32))
def get_average_temperature(sensor_readings):
  return tff.federated_mean(sensor_readings)

خوانندگان با TensorFlow غیر مشتاق آشنا خواهد این مشابه رویکرد به نوشتن کد پایتون که با استفاده از توابع مانند tf.add یا tf.reduce_sum در یک بخش از کد پایتون است که تعریف یک نمودار TensorFlow. البته کد فنی در پایتون بیان می شود، هدف آن است که برای ساخت یک نمایندگی serializable یک tf.Graph زیر، و آن را در نمودار، نه کد پایتون، است که به صورت داخلی توسط زمان اجرا TensorFlow اجرا است. به همین ترتیب، می توان از فکر می کنم tff.federated_mean به عنوان قرار دادن یک عملیات فدرال به یک محاسبه فدرال ارائه شده توسط get_average_temperature .

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

این نیاز به یک زبان و یک سیستم نوع دارد که مفهوم توزیع را در بر بگیرد.

نوع سیستم

Federated Core انواع زیر را ارائه می دهد. در توصیف این انواع ، ما به سازنده های نوع اشاره می کنیم و همچنین یک علامت فشرده را معرفی می کنیم ، زیرا این یک راه مفید یا توصیف انواع محاسبات و عملگرها است.

اول ، در اینجا دسته هایی از انواع هستند که از نظر مفهومی مشابه آنهایی هستند که در زبانهای اصلی موجود وجود دارد:

  • انواع تانسور ( tff.TensorType ). درست همانطور که در TensorFlow، این را dtype و shape . تنها تفاوت این است که اشیاء از این نوع به آنها محدود نمی tf.Tensor موارد در پایتون است که نشان دهنده خروجی از عملیات TensorFlow در یک گراف TensorFlow، اما همچنین ممکن است شامل واحد از داده هایی را که می توان تولید، به عنوان مثال، به عنوان یک خروجی یک توزیع پروتکل تجمع بنابراین ، نوع Tensor TFF به سادگی یک نسخه انتزاعی از یک نمایش فیزیکی مشخص از این نوع در Python یا TensorFlow است.

    نماد جمع و جور برای انواع تانسور است dtype یا dtype[shape] . به عنوان مثال، int32 و int32[10] انواع اعداد صحیح و بردار از نوع int هستند، به ترتیب.

  • انواع ترتیبی ( tff.SequenceType ). این معادل انتزاعی TFF از مفهوم بتن TensorFlow از می tf.data.Dataset است. عناصر توالی را می توان به صورت متوالی مصرف کرد و می تواند شامل انواع پیچیده باشد.

    نمایندگی فشرده از انواع دنباله T* ، که در آن T نوع عناصر است. به عنوان مثال int32* نشان دهنده دنباله اعداد صحیح.

  • انواع تاپل نام ( tff.StructType ). این راه TFF را برای ساخت تاپل و فرهنگ لغت مانند سازه هایی که تعداد از پیش تعریف شده از عناصر با انواع خاصی، به نام و یا نامش ذکر نشده. نکته مهم این است که مفهوم چندگانه TFF شامل معادل انتزاعی چندگانه آرگومان پایتون است ، یعنی مجموعه ای از عناصر که برخی از آنها نام برده شده است ، و برخی دیگر موقعیتی هستند.

    نماد جمع و جور برای تاپل به نام <n_1=T_1, ..., n_k=T_k> ، که در آن n_k نام عنصر اختیاری هستند، و T_k انواع عناصر هستند. به عنوان مثال، <int32,int32> نماد جمع و جور برای یک جفت از اعداد صحیح که نامش ذکر نشده است، و <X=float32,Y=float32> نماد جمع و جور برای یک جفت از شناور به نام X و Y که ممکن است یک نقطه در یک هواپیما نشان به تاپل می تواند به عنوان به خوبی به عنوان مخلوط با انواع دیگر تو در تو، به عنوان مثال، <X=float32,Y=float32>* می تواند یک نماد جمع و جور برای یک دنباله از نقاط.

  • انواع تابع ( tff.FunctionType ). TFF یک چارچوب برنامه نویسی کاربردی، با توابع به عنوان درمان است مقادیر کلاس اول . توابع حداکثر یک آرگومان و دقیقاً یک نتیجه دارند.

    نماد جمع و جور برای توابع است (T -> U) ، که در آن T نوع استدلال است، و U نوع نتیجه است، و یا ( -> U) اگر هیچ استدلال وجود دارد (هر چند توابع بدون آرگومان یک منحط مفهومی که بیشتر در سطح پایتون وجود دارد). به عنوان مثال (int32* -> int32) یک نماد برای یک نوع از توابع است که کاهش دنباله اعداد صحیح به مقدار عدد صحیح تک است.

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

  • نوع قرار دادن. این نوع هنوز در API های عمومی غیر از در قالب 2 لیترال در معرض قرار نگرفته tff.SERVER و tff.CLIENTS که شما می توانید به عنوان ثابت از این نوع است. با این حال ، داخلی استفاده می شود و در نسخه های بعدی در API عمومی معرفی می شود. نمایندگی فشرده از این نوع است placement .

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

    هدف اصلی از تعریف مفهوم دادن است به عنوان پایه ای برای تعریف انواع فدرال.

  • انواع فدرال ( tff.FederatedType ). یک مقدار از نوع فدرال است که توسط یک گروه از شرکت کنندگان سیستم تعریف شده توسط یک قرار دادن خاص (مانند میزبانی است tff.SERVER یا tff.CLIENTS ). یک نوع فدرال با ارزش قرار دادن (به این ترتیب، آن است که تعریف نوع وابسته )، نوع ترکیبات عضو (که چه نوع محتوایی هر یک از شرکت کنندگان به صورت محلی میزبانی)، و کمی اضافی all_equal که مشخص میکند که آیا همه شرکت کنندگان به صورت محلی میزبانی همان مورد

    نماد جمع و جور برای نوع فدرال ارزش هایی که شامل آیتم های (ترکیبات عضو) از نوع T ، هر میزبانی شده توسط گروه (قرار دادن) G است T@G یا {T}@G با all_equal بیت یا تنظیم نشده بود.

    مثلا:

    • {int32}@CLIENTS نشان دهنده یک مقدار فدرال است که شامل مجموعه ای از اعداد صحیح بالقوه متمایز، یکی در هر دستگاه مشتری. توجه داشته باشید که ما صحبت در مورد یک ارزش واحد فدرال به عنوان شامل آیتم های متعدد از اطلاعات است که در مکان های مختلف در سراسر شبکه ظاهر می شود. یکی از راه های در مورد آن فکر می کنم به عنوان یک نوع تانسور با "شبکه" بعد، اگر چه این قیاس کامل نیست چون TFF اجازه نمی دسترسی تصادفی به ترکیبات عضو یک ارزش فدرال.

    • {<X=float32,Y=float32>*}@CLIENTS نشان دهنده مجموعه ای پیوسته داده ها، یک ارزش است که متشکل از توالی های متعدد از XY مختصات، یک دنباله در هر دستگاه مشتری.

    • <weights=float32[10,5],bias=float32[5]>@SERVER نشان دهنده یک تاپل به نام از وزن و بایاس تانسورها در سرور. از آنجا که ما آکولاد کاهش یافته ام، این نشان می دهد که all_equal کمی تنظیم شده است، به عنوان مثال، تنها یک تاپل واحد وجود دارد (بدون توجه به تعداد سرور کپی ممکن در یک خوشه میزبانی این مقدار وجود داشته باشد).

بلوک های ساختمان

زبان فدرال هسته شکلی از است لامبدا-حساب دیفرانسیل و انتگرال ، با چند عناصر اضافی.

چکیده برنامه نویسی زیر را که در حال حاضر در API عمومی نمایش داده شده است ، ارائه می دهد:

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

    در اینجا یک مثال، محاسبات TF نوع است (int32* -> int) که با استفاده از tf.data.Dataset.reduce اپراتور برای محاسبه مجموع اعداد صحیح:

    @tff.tf_computation(tff.SequenceType(tf.int32))
    def add_up_integers(x):
      return x.reduce(np.int32(0), lambda x, y: x + y)
    
  • Intrinsics یا اپراتورهای فدرال ( tff.federated_... ). این یک کتابخانه از توابع مانند است tff.federated_sum یا tff.federated_broadcast که بخش عمده ای از FC API، بیشتر از که نشان دهنده اپراتورهای ارتباطی برای استفاده با TFF توزیع تشکیل می دهند.

    ما به این اشاره به عنوان intrinsics دلیل، تا حدودی مانند توابع ذاتی ، آنها، مجموعه های درب باز از اپراتورها که توسط TFF درک، و پایین را به کد های سطح پایین تر وارد می شود.

    اکثر این اپراتورها دارای پارامترها و نتایج انواع فدراسیون هستند و اکثر آنها الگوهایی هستند که می توانند برای انواع مختلف داده اعمال شوند.

    به عنوان مثال، tff.federated_broadcast می توان به عنوان یک اپراتور الگو از نوع کاربردی فکر T@SERVER -> T@CLIENTS .

  • عبارات لامبدا ( tff.federated_computation ). یک عبارت لامبدا در TFF معادل یک است lambda و یا def در پایتون؛ این شامل نام پارامتر و یک بدنه (عبارت) است که حاوی ارجاعاتی به این پارامتر است.

    در کد پایتون، این را می توان با تزئین توابع پایتون با ایجاد tff.federated_computation و تعریف استدلال است.

    در اینجا یک مثال از عبارت lambda که قبلاً ذکر کردیم وجود دارد:

    @tff.federated_computation(tff.type_at_clients(tf.float32))
    def get_average_temperature(sensor_readings):
      return tff.federated_mean(sensor_readings)
    
  • لیترال قرار دادن. در حال حاضر، تنها tff.SERVER و tff.CLIENTS به تعریف ساده محاسبات کلاینت سرور اجازه می دهد.

  • فراخوانی تابع ( __call__ ). هر چیزی که دارای یک نوع کاربردی می توان با استفاده از پایتون استاندارد استناد __call__ نحو. فراخوانی یک عبارت است که نوع آن با نوع نتیجه تابع مورد استناد یکسان است.

    مثلا:

    • add_up_integers(x) نشان دهنده یک نیایش محاسبات TensorFlow زودتر در یک استدلال تعریف x . نوع این عبارت است int32 .

    • tff.federated_mean(sensor_readings) نشان دهنده یک نیایش اپراتور متوسط فدرال در sensor_readings . نوع این عبارت است float32@SERVER (با فرض متن از مثال بالا).

  • تشکیل تاپل و انتخاب عناصر آنها. عبارت پایتون از فرم [x, y] ، x[y] یا xy که در بدن از توابع تزئین شده با ظاهر tff.federated_computation .