Path: blob/master/site/ja/federated/openmined2020/openmined_conference_2020.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Before we start
To edit the colab notebook, please go to "File" -> "Save a copy in Drive" and make any edits on your copy.
Before we start, please run the following to make sure that your environment is correctly setup. If you don't see a greeting, please refer to the Installation guide for instructions.
TensorFlow Federated ã§ã®ç»ååé¡
ã·ãã¥ã¬ãŒã·ã§ã³ã§é£ååŠç¿ãå®éšããŠã¿ãŸãããããã®ãã¥ãŒããªã¢ã«ã§ã¯ãå€å
žç㪠MNIST ãã¬ãŒãã³ã°ã®äŸã䜿çšããŠãTFF ã® Federated LearningïŒFLïŒAPI ã¬ã€ã€ãŒãtff.learning
ã玹ä»ããŸãããã㯠TensorFlow ã«å®è£
ããããŠãŒã¶ãŒæå®ã¢ãã«ã«å¯Ÿããé£åãã¬ãŒãã³ã°ãªã©ã®äžè¬çãªã¿ã€ãã®é£ååŠç¿ã¿ã¹ã¯ãå®è¡ããããã«äœ¿çšã§ãããããé«ã¬ãã«ã®äžé£ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã
ãã¥ãŒããªã¢ã«ã®æŠèŠ
å€å žç㪠MNIST ããŒã¿ã»ããã䜿çšããŠç»ååé¡ãå®è¡ããã¢ãã«ããã¬ãŒãã³ã°ããŸãããã¥ãŒã©ã«ãããã¯æ°åãšç»åã®åé¡ãåŠç¿ããŸãããã®ã±ãŒã¹ã§ã¯ãé£ååŠç¿ãã·ãã¥ã¬ãŒã·ã§ã³ããããããã¬ãŒãã³ã°ããŒã¿ã¯ããŸããŸãªããã€ã¹ã«åæ£ãããŠããŸãã
ã»ã¯ã·ã§ã³
TFF ã©ã€ãã©ãªãèªã¿èŸŒã
é£å EMNIST ããŒã¿ã»ããã調ã¹ãŠååŠçãã
ã¢ãã«ãäœæãã
ãã¬ãŒãã³ã°çšã® Federated Averaging ããã»ã¹ãã»ããã¢ãããã
ãã¬ãŒãã³ã°ææšãåæãã
é£åè©äŸ¡èšç®ãã»ããã¢ãããã
è©äŸ¡ææšãåæãã
å ¥åããŒã¿ãæºåãã
ãŸããããŒã¿ããå§ããŸããããé£ååŠç¿ã«ã¯ãé£åããŒã¿ã»ãããã€ãŸãè€æ°ã®ãŠãŒã¶ãŒããã®ããŒã¿ã®ã³ã¬ã¯ã·ã§ã³ãå¿ èŠã§ããé£åããŒã¿ã¯éåžžãé i.i.d. ã§ãããåºæã®äžé£ã®èª²é¡ããããŸãããŠãŒã¶ãŒã¯éåžžã䜿çšãã¿ãŒã³ã«å¿ããŠãããŒã¿ãããŸããŸã«åæ£ããŠããŸãã
å®éšãè¡ããããããããã«ãããã€ãã®ããŒã¿ã»ããã§ TFF ãªããžããªãã·ãŒãããŸããã
以äžã®ããã«ããŠããµã³ãã«ããŒã¿ã»ãããèªã¿èŸŒã¿ãŸãã
load_data()
ã«ãã£ãŠè¿ãããããŒã¿ã»ããã¯ãtff.simulation.datasets.ClientData
ãšããããŠãŒã¶ãŒã®ã»ãããåæããŠãç¹å®ã®ãŠãŒã¶ãŒã®ããŒã¿ã衚çŸãã tf.data.Dataset
ãæ§ç¯ããåå¥ã®èŠçŽ ã®æ§é ãã¯ãšãªããã€ã³ã¿ãŒãã§ãŒã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãã
ããŒã¿ã»ããã詳ããèŠãŠã¿ãŸãããã
é iid ããŒã¿ã調ã¹ã
ããŒã¿ãååŠçãã
ããŒã¿ã¯ãã§ã« tf.data.Dataset
ã§ãããããååŠç㯠Dataset 倿ã䜿çšããŠè¡ããŸãããã®å€æã«ã€ããŠã®è©³çްã¯ããã¡ããåç
§ããŠãã ããã
åäœã確èªããŸãããã
ããã¯ãäžé£ã®ãã¬ãŒãã³ã°ãŸãã¯è©äŸ¡ãžã®å ¥åãšããŠãæå®ãããäžé£ã®ãŠãŒã¶ãŒããããŒã¿ã»ããã®ãªã¹ããäœæããåçŽãªãã«ããŒé¢æ°ã§ãã
ã§ã¯ãã©ã®ããã«ããŠã¯ã©ã€ã¢ã³ããéžæããã°ããã®ã§ããããïŒ
Keras ã§ã¢ãã«ãäœæãã
Keras ã䜿çšããŠããå Žåã¯ããããã Keras ã¢ãã«ãæ§ç¯ããã³ãŒãããã§ã«ãããŸãã以äžã¯ãããã§ã®ããŒãºãæºããã®ã«ååãªåçŽãªã¢ãã«ã®äŸã§ãã
Keras ã«ããéäžåãã¬ãŒãã³ã°
Keras ã¢ãã«ã䜿çšããé£åãã¬ãŒãã³ã°
TFF ã§ã¢ãã«ã䜿çšããã«ã¯ãtff.learning.Model
ã€ã³ã¿ãŒãã§ãŒã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ã©ãããããŠããå¿
èŠããããŸãã
远å ã§ãããã®ä»ã® Keras ææšã¯ãã¡ãã«ãããŸãã
é£åããŒã¿ã§ã¢ãã«ããã¬ãŒãã³ã°ãã
TFF ã§äœ¿çšããããã®ã¢ãã«ã tff.learning.Model
ãšããŠã©ããããã®ã§ã次ã®ããã«ãã«ããŒé¢æ° tff.learning.build_federated_averaging_process
ãåŒã³åºãããšã«ãããTFF ã« Federated Averaging ã¢ã«ãŽãªãºã ãæ§ç¯ãããããšãã§ããŸãã
ããã§ã¯ãTFF ã¯ãé£åèšç®ã®ãã¢ãæ§ç¯ãããããã tff.templates.IterativeProcess
ã«ããã±ãŒãžåããŸããããããã®èšç®ã¯ãinitialize
ãš next
ã®ããããã£ã®ãã¢ãšããŠäœ¿çšã§ããŸãã
å埩ããã»ã¹ã¯éåžžã以äžã®ãããªå¶åŸ¡ã«ãŒãã§è¡ãããŸãã
initialize
èšç®ãåŒã³åºããŠããµãŒããŒã®ç¶æ
ãæ§ç¯ããŸãã
2 ã€ã®é£åèšç®ã® 2 ã€ç®ã® next
ã¯ãFederated Averaging ã® 1 ã€ã®ã©ãŠã³ãã衚ããŸããããã«ã¯ãã¯ã©ã€ã¢ã³ããžã®ãµãŒããŒç¶æ
ïŒã¢ãã«ãã©ã¡ãŒã¿ãå«ãïŒã®ããã·ã¥ãããŒã«ã«ããŒã¿ã®ãªã³ããã€ã¹ãã¬ãŒãã³ã°ãã¢ãã«æŽæ°ã®åéãšå¹³åãããã³ãµãŒããŒã§ã®æ°ããæŽæ°ã¢ãã«ã®äœæãå«ãŸããŸãã
ãã¬ãŒãã³ã°ã 1 ã©ãŠã³ãå®è¡ããŠãçµæãå¯èŠåããŸããäžèšã§ãã§ã«çæãããŠãŒã¶ãŒã®ãµã³ãã«ã®é£åããŒã¿ã䜿çšããŸãã
ããã«æ°ã©ãŠã³ãå®è¡ããŸããåè¿°ã®ããã«ãéåžžããã®æç¹ã§ã¯åã©ãŠã³ãã§ã©ã³ãã ã«éžæãããæ°ããããããã®ãŠãŒã¶ãŒã®ãµã³ãã«ããã·ãã¥ã¬ãŒã·ã§ã³ããŒã¿ã®ãµãã»ãããéžæããŸããããã¯ããŠãŒã¶ãŒãç¶ç¶çã«åºå ¥ãããçŸå®çãªãããã€ã¡ã³ããã·ãã¥ã¬ãŒãããããã§ãããã ãããã®ã€ã³ã¿ã©ã¯ãã£ããªããŒãããã¯ã®ãã¢ã§ã¯ãã·ã¹ãã ãè¿ éã«åæããããã«åããŠãŒã¶ãŒãåå©çšããŸãã
é£åãã¬ãŒãã³ã°ã®åã©ãŠã³ãã®åŸããã¬ãŒãã³ã°ã®æå€±ã¯æžå°ããã¢ãã«ãåæããŠããããšã瀺ããŠããŸãããããã®ãã¬ãŒãã³ã°ã¡ããªãã¯ã«ã¯ããã€ãã®éèŠãªæ³šæäºé ããããŸãããã®ãã¥ãŒããªã¢ã«ã®åŸåã«ããè©äŸ¡ã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
##TensorBoard Next ã§ã¢ãã«ã®ææšã衚瀺ããŸããTensorBoard ã䜿çšããŠããããã®é£åèšç®ããã®ææšãå¯èŠåããŸãã
ãŸããææšãæžã蟌ãããã®ãã£ã¬ã¯ããªãšå¯Ÿå¿ãããµããªãŒã©ã€ã¿ãŒãäœæããŸãã
åããµããªãŒã©ã€ã¿ãŒã䜿çšããŠãé¢é£ããã¹ã«ã©ãŒææšãããããããŸãã
äžã§æå®ããã«ãŒãã®ãã°ãã£ã¬ã¯ããªã§ TensorBoard ãèµ·åããŸããããŒã¿ã®èªã¿èŸŒã¿ã«æ°ç§ãããå ŽåããããŸãã
åãæ¹æ³ã§è©äŸ¡ææšã衚瀺ããã«ã¯ã"logs/scalars/eval" ã®ãããªå¥ã®ãã©ã«ããäœæããŠãTensorBoard ã«æžã蟌ãããšãã§ããŸãã
è©äŸ¡ãã
é£åããŒã¿ã§è©äŸ¡ãå®è¡ããã«ã¯ãtff.learning.build_federated_evaluation
颿°ã䜿ã£ãŠãåŒæ°ã«ã¢ãã«ã³ã³ã¹ãã©ã¯ã¿ãæž¡ãããšã§ããã®ç®çã ãã®ããã«èšèšãããå¥ã®é£åèšç®ãæ§ç¯ã§ããŸãã
次ã«ãé£åããŒã¿ã®ãã¹ããµã³ãã«ãã³ã³ãã€ã«ããŠããã¹ãããŒã¿ã®è©äŸ¡ãè¿ããŸããããããŒã¿ã¯ããŠãŒã¶ãŒã®ç°ãªããµã³ãã«ããååŸãããŸãããå¥ã«ä¿æãããŠããããŒã¿ã»ããããååŸãããŸãã
ãã¥ãŒããªã¢ã«ã¯ä»¥äžã§ããç°ãªããã©ã¡ãŒã¿ïŒããããµã€ãºããŠãŒã¶ãŒæ°ããšããã¯ãåŠç¿çãªã©ïŒã詊ããŠãäžèšã®ã³ãŒãã倿Žããåã©ãŠã³ãã§ãŠãŒã¶ãŒã®ã©ã³ãã ãµã³ãã«ã®ãã¬ãŒãã³ã°ãã·ãã¥ã¬ãŒãããŠã¿ãŠãã ããããŸããä»ã®ãã¥ãŒããªã¢ã«ãåç §ããŠãã ããã
ç¬èªã® FL ã¢ã«ãŽãªãºã ãæ§ç¯ãã
åã®ãã¥ãŒããªã¢ã«ã§ã¯ãã¢ãã«ãšããŒã¿ãã€ãã©ã€ã³ãã»ããã¢ããããŠãtff.learning
API ã䜿ã£ãŠé£åãã¬ãŒãã³ã°ãå®è¡ããæ¹æ³ãåŠç¿ããŸããã
ãã¡ãããFL ãªãµãŒãã«é¢ããŠèšãã°ãããã¯æ°·å±±ã®äžè§ã«éããŸããããã®ãã¥ãŒããªã¢ã«ã§ã¯ãtff.learning
API ã«äŸåããã«é£ååŠç¿ã¢ã«ãŽãªãºã ãå®è£
ããæ¹æ³ã«ã€ããŠèª¬æããŸãããã®ãã¥ãŒããªã¢ã«ã§ã¯ã以äžã®å
容ãéæããããšæããŸãã
ç®æš:
é£ååŠç¿ã¢ã«ãŽãªãºã ã®äžè¬çãªæ§é ãçè§£ããã
TFF ã® Federated Core ã調ã¹ãã
Federated Core ã䜿çšããŠãçŽæ¥ Federated Averaging ãå®è£ ããã
å ¥åããŒã¿ãæºåãã
ãŸããTFF ã«å«ãŸãã EMNIST ããŒã¿ã»ãããèªã¿èŸŒãã§ååŠçããŸããåºæ¬çã«ãæåã®ãã¥ãŒããªã¢ã«ãšåãã³ãŒãã䜿çšããŸãã
ã¢ãã«ãæºåãã
æåã®ãã¥ãŒããªã¢ã«ãšåãã1 ã€ã®é衚瀺ã¬ã€ã€ãŒãšãœããããã¯ã¹ã¬ã€ã€ãŒãå«ãã¢ãã«ã䜿çšããŸãã
ãã® Keras ã¢ãã«ã tff.learning.Model
ãšããŠã©ããããŸãã
FL ã¢ã«ãŽãªãºã ãã«ã¹ã¿ãã€ãºãã
tff.learning
API ã«ã¯ãããŸããŸãªããªãšãŒã·ã§ã³ã® Federated Averaging ãå«ãŸããŸããããã®ãã¬ãŒã ã¯ãŒã¯ã«ããŸãé©åããªãã¢ã«ãŽãªãºã ãã»ãã«ãæ°å€ããããŸããããšãã°ãæ£ååãã¯ãªããããŸãã¯ããè€éãªé£å GAN ãã¬ãŒãã³ã°ãªã©ã®ã¢ã«ãŽãªãºã ã远å ããå ŽåããããããããŸããããŸããé£ååæã«ãèå³ããã€ããšãããã§ãããã
ãããã£ãããé«åºŠãªã¢ã«ãŽãªãºã ã«ã€ããŠã¯ãç¬èªã®ã«ã¹ã¿ã FL ã¢ã«ãŽãªãºã ãäœæããå¿ èŠããããŸãã
éåžžãFL ã¢ã«ãŽãªãºã ã«ã¯ã4 ã€ã®äž»èŠã³ã³ããŒãã³ãããããŸãã
ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®ãããŒããã£ã¹ãã¹ãããã
ããŒã«ã«ã¯ã©ã€ã¢ã³ãã®æŽæ°ã¹ãããã
ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ã¢ããããŒãã¹ãããã
ãµãŒããŒã®æŽæ°ã¹ãããã
TFF ã§ã¯å€§ãŸãã«ãé£åã¢ã«ãŽãªãºã ã IterativeProcess
ãšããŠè¡šçŸããŠããŸããããã¯ãinitialize_fn
ãš next_fn
ãå«ãåãªãã¯ã©ã¹ã§ããinitialize_fn
ã¯ãµãŒããŒã®åæåã«äœ¿çšãããnext_fn
㯠Federated Averaging ã®éä¿¡ã©ãŠã³ãã 1 ã€å®è¡ããŸããããã§äœ¿çšãã FedAvg ã®å埩ããã»ã¹ãã©ã®ãããªãã®ãããã®ã¹ã±ã«ãã³ãèšè¿°ããŠã¿ãŸãããã
ãŸããtff.learning.Model
ãäœæããŠãã®ãã¬ãŒãã³ã°å¯Ÿè±¡éã¿ãè¿ãã ãã®åæå颿°ããããŸãã
ãã®é¢æ°ã¯é©åãªããã§ãããåŸã§ãããããã«ãTFF èšç®ã«ããããã«ãå°ãã®å€æŽãè¡ãå¿ èŠããããŸãã
ãŸããnext_fn
ãã¹ã±ããããŸãã
ãããã® 4 ã€ã®ã³ã³ããŒãã³ããåå¥ã«å®è£ ããããšã«å°å¿µããŸãããŸããçŽç²ãª TensorFlow ã«å®è£ å¯èœãªéšåã«çŠç¹ãåœãŠãããšã«ããŸããã¯ã©ã€ã¢ã³ãã®æŽæ°ã¹ããããšãµãŒããŒã®æŽæ°ã¹ãããã§ãã
TensorFlow ã®ãããã¯
ã¯ã©ã€ã¢ã³ãã®æŽæ°
tff.learning.Model
ã䜿çšããŠãåºæ¬çã« TF ã¢ãã«ãåãã€ãã³ã°ããã®ãšåãæ¹æ³ã§ãã¯ã©ã€ã¢ã³ããã¬ãŒãã³ã°ãå®è¡ããŸããå
·äœçã«èšããšãtf.GradientTape
ã䜿çšããŠããŒã¿ã®ãããã®åŸé
ãèšç®ããŠãããclient_optimizer
ã䜿çšããŠãããã®åŸé
ãé©çšããŸãã
å tff.learning.Model
ã€ã³ã¹ã¿ã³ã¹ã«ã¯ weights
屿§ãããã以äžã® 2 ã€ã®ãµã屿§ããããŸãã
trainable
: ãã¬ãŒãã³ã°å¯Ÿè±¡ã¬ã€ã€ãŒã«å¯Ÿå¿ãããã³ãœã«ã®ãªã¹ããnon_trainable
: ãã¬ãŒãã³ã°å¯Ÿè±¡å€ã¬ã€ã€ãŒã«å¯Ÿå¿ãããã³ãœã«ã®ãªã¹ãã
ããã§ã®ç®çã§ã¯ããã¬ãŒãã³ã°å¯Ÿè±¡éã¿ã®ã¿ã䜿çšããŸãïŒã¢ãã«ã«ã¯ããããããªãããïŒïŒã
ãµãŒããŒã®æŽæ°
ãµãŒããŒã®æŽæ°ã«ã¯ãã»ãšãã©åªåãå¿ èŠãšããŸãããããã© Federated Averaging ãå®è£ ããããšã«ããŸãããããã§ã¯ãã¯ã©ã€ã¢ã³ãã¢ãã«ã®éã¿ã®å¹³åã§ããµãŒããŒã¢ãã«ã®éã¿ãå ¥ãæ¿ããã ãã§ããç¹°ãè¿ããŸããããã¬ãŒãã³ã°å¯Ÿè±¡ã®éã¿ã®ã¿ã«çŠç¹ãåœãŠãŸãã
mean_client_weights
ãè¿ãã°ããã ããªã®ã§ãäžèšã®ã³ãŒãã¹ããããã¯æããã«è¡ãéããŠããŸãããã ããFederated Averaging ã®å®è£
ãããé«åºŠã«ãªãã°ãéåéãé©åæ§ãªã©ã®ããæŽç·Žããããã¯ããã¯ã§ mean_client_weights
ã䜿çšããããšãã§ããŸãã
ãããŸã§ã¯ãçŽç²ãª TensorFlow ã³ãŒãã®ã¿ã§èšè¿°ããŠããŸãããTFF ã§ã¯ãã§ã«äœ¿ãæ £ãã TensorFlow ã³ãŒãã®ã»ãšãã©ã䜿çšã§ããããã«èšèšãããŠããããã§ãããããããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããžãã¯ãã€ãŸãããµãŒããŒãäœãã¯ã©ã€ã¢ã³ãã«ãããŒããã£ã¹ãããã¯ã©ã€ã¢ã³ããäœããµãŒããŒã«ã¢ããããŒãããã®ããæç€ºããããžãã¯ãæå®ããªããã°ãªããŸããã
ãã®äœæ¥ã«ã¯ãTFF.Keras ã®ãFederated Coreããå¿ èŠãšãªããŸãã
Federated Core ã®å°å ¥
Federated CoreïŒFCïŒã¯ãtff.learning
API ã®åºç€ãšããŠæ©èœããäžé£ã®äœã¬ãã«ã€ã³ã¿ãŒãã§ãŒã¹ã§ãããã ãããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯åŠç¿ã«å¶éãããŠããŸãããå®éãFC ã¯åæ£ããŒã¿ã®åæããã®ä»å€ãã®èšç®ã«äœ¿çšãããŠããŸãã
倧ãŸãã«èšããšãFederated Core ã¯ãTensorFlow ã®ã³ãŒããšåæ£éä¿¡æŒç®åïŒåæ£åããããŒããã£ã¹ããªã©ïŒãçµã¿åããããã³ã³ãã¯ãã«è¡šçŸãããããã°ã©ã ãå®çŸããéçºç°å¢ã§ããç ç©¶è ãå»åž«ã«ãã·ã¹ãã ã®å®è£ æ å ±ãèŠæ±ããã«ïŒãã€ã³ãããŒãã€ã³ããããã¯ãŒã¯ã¡ãã»ãŒãžäº€æãæå®ãããªã©ïŒãã·ã¹ãã å ã®åæ£éä¿¡ã«å¯Ÿããæç€ºçãªå¶åŸ¡ãæäŸããããšãç®æšãšããŠããŸãã
1 ã€ã®éèŠãªãã€ã³ãã¯ãTFF ããã©ã€ãã·ãŒä¿è·ã®ããã«èšèšãããŠããããšã§ãããããã£ãŠãããŒã¿ã®æåšå°ã«å¯Ÿããæç€ºçãªå¶åŸ¡ãè¡ãããšãã§ããããããµãŒããŒã®äžå€®ãã±ãŒã·ã§ã³ã§æãŸãããªãããŒã¿ã®èç©ãçºçããªãããã«é²æ¢ã§ããŸãã
é£åããŒã¿
TensorFlow ã®åºæ¬æŠå¿µã® 1 ã€ã§ããããã³ãœã«ãã®æŠå¿µãšåæ§ã«ãTFF ã®éèŠãªæŠå¿µã¯ã忣ã·ã¹ãã ã®ããã€ã¹ã®ã°ã«ãŒãã«ãã¹ããããããŒã¿ã¢ã€ãã ã®ã³ã¬ã¯ã·ã§ã³ãæããé£åããŒã¿ãã§ãïŒã¯ã©ã€ã¢ã³ãããŒã¿ã»ããããµãŒããŒã¢ãã«ã®éã¿ãªã©ïŒãå šããã€ã¹ã«æž¡ãããŒã¿ã¢ã€ãã ã®ã³ã¬ã¯ã·ã§ã³å šäœãåäžã®é£åå€ãšããŠã¢ãã«åããŸãã
ããšãã°ãã»ã³ãµãŒã®æž©åºŠãç€ºãæµ®åå°æ°ç¹ãæã€ãããã¢ã³ãããã€ã¹ãè€æ°ãããšããå Žåãæ¬¡ã®ããã«ããŠãé£åæµ®åå°æ°ç¹ãšããŠè¡šçŸããããšãã§ããŸãã
é£ååã¯ãé£åã¡ã³ããŒã®å T
ïŒäŸ: tf.float32
ïŒãšããã€ã¹ã®ã°ã«ãŒã G
ã§æå®ãããŸããG
ã tff.CLIENTS
ãŸã㯠tff.SERVER
ã§ããã±ãŒã¹ã«çŠç¹ãåœãŠãããšæããŸãããã®ãããªé£ååã¯ã以äžã®ããã« {T}@G
ãšããŠè¡šçŸãããŸãã
ãªãé 眮ã«ãã ããã®ã§ãããããTFF ã®äž»èŠç®æšã¯ãå®éã®åæ£ã·ã¹ãã ã«ãããã€ã§ããã³ãŒããèšè¿°ã§ããããã«ããããšã§ããã€ãŸããããã€ã¹ã®åºŠã®ãµãã»ãããã©ã®ã³ãŒããå®è¡ããããŒã¿ã®ç°ãªãããŒã¹ãã©ãã«ååšããããçç±ã¥ããããšãéèŠãªã®ã§ãã
TFF ã¯ãããŒã¿ãããŒã¿ãé 眮ãããå Žæãããã³ããŒã¿ãã©ã®ããã«å€æãããããšãã 3 ã€ã®ããšã«çŠç¹ãåœãŠãŠããŸããæåã® 2 ã€ã¯é£ååã«å«ãŸããŸãããæåŸã®é ç®ã¯é£åèšç®ã«å«ãŸããŠããŸãã
é£åèšç®
TFF ã¯åŒ·åã«åä»ãããã颿°åããã°ã©ãã³ã°ç°å¢ã§ããã®åºæ¬åäœã¯é£åèšç®ã§ãããããã¯ãé£åå€ãå ¥åãšããŠåãå ¥ããé£åå€ãåºåãšããŠè¿ãããžãã¯ã§ãã
ããšãã°ãã¯ã©ã€ã¢ã³ãã»ã³ãµãŒã®æž©åºŠãå¹³ååãããšããå Žåã以äžã®ããã«ïŒé£åæµ®åå°æ°ç¹ã䜿çšããŠïŒå®çŸ©ããããšãã§ããŸãã
ããã TensorFlow ã® tf.function
ãã³ã¬ãŒã¿ãšã©ã®ããã«ç°ãªãã®ãçåã«æããããããŸãããããã§éèŠãªã®ã¯ãtff.federated_computation
ãçæããã³ãŒãã¯ãTensorFlow ã³ãŒãã§ã Python ã³ãŒãã§ããªããšããããšã§ããã€ãŸããããã¯å
éšãã©ãããã©ãŒã éäŸååã®ã°ã«ãŒèšèªã«ãã忣ã·ã¹ãã ã®ä»æ§ã§ãã
è€éã«èããããããããŸããããTFF èšç®ããååã«å®çŸ©ã¥ããããåã·ã°ããã£ä»ãã®é¢æ°ãšæããããšãã§ããŸãããããã®åã·ã°ããã£ã¯çŽæ¥ã¯ãšãªããããšãã§ããŸãã
ãã® tff.federated_computation
ã¯ãé£åå <float>@CLIENTS
ã®åŒæ°ãåãå
¥ããé£åå <float>@SERVER
ã®åºåãè¿ããŸããé£åèšç®ããµãŒããŒããã¯ã©ã€ã¢ã³ããã¯ã©ã€ã¢ã³ãããã¯ã©ã€ã¢ã³ãããŸãã¯ãµãŒããŒãããµãŒããŒã«ç§»åããããšãã§ããŸãããŸããåã·ã°ããã£ãäžèŽããéããéåžžã®é¢æ°ã®ããã«äœæããããšãã§ããŸãã
éçºãæ¯æŽããããã«ãTFF ã§ã¯ tff.federated_computation
ã Python 颿°ãšããŠåŒã³åºãããšãã§ããŸããããšãã°ã以äžãåŒã³åºãããšãå¯èœã§ãã
é eager èšç®ãš TensorFlow
泚æããŠãããªããã°ãªããªãéèŠãªå¶éäºé
ã 2 ã€ãããŸãã1 ã€ã¯ãPython ã€ã³ã¿ãŒããªã¿ã tff.federated_computation
ãã³ã¬ãŒã¿ã«ééãããšã颿°ã®ãã¬ãŒã¹ãäžåºŠè¡ããã以éã§äœ¿çšã§ããããã«ã·ãªã¢ã«åããããšããå¶éã§ãããã®ãããTFF èšç®ã¯åºæ¬çã«é eager ã§è¡ãããŸãããã®åäœã¯ãTensorFlow ã® tf.function
ãã³ã¬ãŒã¿ã®åäœã«ãã䌌ãŠããŸãã
2 ã€ç®ã¯ãé£åèšç®ã«ã¯é£åæŒç®åïŒtff.federated_mean
ãªã©ïŒãã䜿çšã§ãããTensorFlow æŒç®åãå«ããããšã¯ã§ããªããšããå¶éã§ããTensorFlow ã³ãŒã㯠tff.tf_computation
ã§ãã³ã¬ãŒãããããããã¯ã«éã蟌ããããŠããå¿
èŠããããŸããã»ãšãã©ã®äžè¬ç㪠TensorFlow ã³ãŒãã¯ãæ°åãååŸããŠããã« 0.5
ã远å ãã以äžã®é¢æ°ã®ããã«ãçŽæ¥ãã³ã¬ãŒãããããšãã§ããŸãã
ãããã«ãåã·ã°ããã£ããããŸãããäœçœ®ä»ããããŠããŸãããããšãã°ã以äžãåŒã³åºãããšãã§ããŸãã
ããã§ã¯ãtff.federated_computation
ãš tff.tf_computation
ã®éèŠãªéããããããŸããåè
ã¯æç€ºçãªäœçœ®ã¥ãããããåŸè
ã«ã¯ãããŸããã
é£åèšç®ã§ã¯é
眮ãæå®ããããšã§ãtff.tf_computation
ãããã¯ã䜿çšã§ããŸããã¯ã©ã€ã¢ã³ãã®é£åæµ®åå°æ°ç¹ã®ã¿ã«ååã远å ãã颿°ãäœæããŠã¿ãŸããããããã¯ãé
眮ãä¿æããªããç¹å®ã® tff.tf_computation
ãé©çšãã tff.federated_map
ã䜿ã£ãŠè¡ããŸãã
ãã®é¢æ°ã¯ã»ãŒ add_half
ãšåãã§ãããtff.CLIENTS
ã«é
眮ãããŠããå€ã®ã¿ãåãå
¥ããåãé
眮ã®å€ãè¿ããŸããããã¯åã·ã°ããã£ã§ç¢ºèªã§ããŸãã
èŠçŽ:
TFF ã¯é£åå€ã§æŒç®ããŸãã
åé£åå€ã«ã¯ãåïŒäŸ:
tf.float32
ïŒãšé 眮ïŒäŸ:tff.CLIENTS
ïŒãæã€é£ååããããŸããé£åå€ã¯ãé£åèšç®ã䜿ã£ãŠå€æã§ããŸããã
tff.federated_computation
ãšé£ååã·ã°ããã£ã§ãã³ã¬ãŒããããŠããå¿ èŠããããŸããTensorFlow ã³ãŒãã¯
tff.tf_computation
ãã³ã¬ãŒã¿ãæã€ãããã¯ã«æ ŒçŽãããŠããå¿ èŠããããŸãããã®äžã§ããããã®ãããã¯ãé£åèšç®ã«çµã¿èŸŒãããšãã§ããŸãã
ç¬èªã® FL ã¢ã«ãŽãªãºã ãæ§ç¯ããïŒããŒã 2ïŒ
Federated Core ã«ã€ããŠçè§£ã§ããã®ã§ãç¬èªã®é£ååŠç¿ã¢ã«ãŽãªãºã ãäœæããããšãã§ããããã«ãªããŸãããäžèšã§ã¯ãã¢ã«ãŽãªãºã ã« initialize_fn
ãš next_fn
ãå®çŸ©ããããšãæãåºããŠãã ãããnext_fn
ã¯çŽç²ãª TensorFlow ã³ãŒãã䜿çšããŠå®çŸ©ãã client_update
ãš server_update
ãå©çšããŸãã
ãã ããã¢ã«ãŽãªãºã ãé£åèšç®ã«ããã«ã¯ãnext_fn
ãš initialize_fn
ã tff.federated_computations
ã§ããå¿
èŠããããŸãã
TensorFlow Federated ãããã¯
åæåèšç®ãäœæãã
åæå颿°ã¯éåžžã«åçŽã§ããmodel_fn
ã䜿çšããŠã¢ãã«ãäœæããŸãããã ããtff.tf_computation
ã䜿çšããŠãTensorFlow ã³ãŒããåããŠããå¿
èŠããã£ãããšãæãåºããŸãããã
次ã«ãtff.federated_value
ã䜿çšããŠããããçŽæ¥é£åèšç®ã«æž¡ããŸãã
next_fn
ãäœæãã
ã¯ã©ã€ã¢ã³ããµãŒããŒã®æŽæ°ã³ãŒãã䜿ã£ãŠãå®éã®ã¢ã«ãŽãªãºã ãäœæããããšã«ããŸãããããŸããclient_update
ããã¯ã©ã€ã¢ã³ãããŒã¿ã»ãããšãµãŒããŒã®éã¿ãåãå
¥ããŠãæŽæ°ãããã¯ã©ã€ã¢ã³ãã®éã¿ãã³ãœã«ãåºåãã tff.tf_computation
ã«å€æããŸãã
颿°ãé©åã«ãã³ã¬ãŒãããããã«ã察å¿ããåãå¿ èŠã§ãã幞ãã«ãããµãŒããŒã®éã¿ã®åã¯ãã¢ãã«ããçŽæ¥æœåºããããšãã§ããŸãã
ããŒã¿ã»ããã®åã·ã°ããã£ã確èªããŸãããã28 x 28 ã®ç»åïŒæŽæ°ã®ã©ãã«ä»ãïŒãååŸããŠãå¹³åŠåããããšãæãåºããŠãã ããã
ãŸããäžèšã® server_init
颿°ã䜿çšããŠãã¢ãã«ã®éã¿ã®åãæœåºããããšãã§ããŸãã
åã·ã°ããã£ã調ã¹ããšãã¢ãã«ã®ã¢ãŒããã¯ãã£ã確èªã§ããŸãïŒ
次ã«ãã¯ã©ã€ã¢ã³ãã®æŽæ°çšã® tff.tf_computation
ãäœæããŸãã
ãµãŒããŒæŽæ°ããŒãžã§ã³ã® tff.tf_computation
ã¯ããã§ã«æœåºããåã䜿çšããŠãåãããã«ããŠå®çŸ©ããããšãã§ããŸãã
æåŸã«ããã®ãã¹ãŠããŸãšãã tff.federated_computation
ãäœæããå¿
èŠããããŸãããã®é¢æ°ã¯ããµãŒããŒã®éã¿ã«å¯Ÿå¿ããå€ïŒé
眮ã tff.SERVER
ã®ãã®ïŒãšã¯ã©ã€ã¢ã³ãããŒã¿ã»ããã«å¯Ÿå¿ããå€ïŒé
眮ã tff.CLIENTS
ã®ãã®ïŒã® 2 ã€ã®é£åå€ãåãå
¥ããŸãã
ãããäž¡æ¹ã®åãäžèšã§å®çŸ©ãããŠãããšããã«æ³šæããŠãã ããïŒ`tff.type_at_{server/clients}`` ã䜿çšããŠé©åãªé 眮ãæå®ããããšã ããå¿ èŠã§ãã
FL ã¢ã«ãŽãªãºã ã® 4 ã€ã®èŠçŽ ãèŠããŠããŸããïŒ
ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®ãããŒããã£ã¹ãã¹ãããã
ããŒã«ã«ã¯ã©ã€ã¢ã³ãã®æŽæ°ã¹ãããã
ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ã¢ããããŒãã¹ãããã
ãµãŒããŒã®æŽæ°ã¹ãããã
äžèšã®æ§ç¯ãå®äºããã®ã§ãåããŒãã TFF ã³ãŒãã®åäžã®è¡ãšããŠã³ã³ãã¯ãã«è¡šçŸããããšãã§ããŸããé£ååãªã©ãæå®ããŠæéããããã®ã¯ããã®åçŽããå®çŸããããã§ãïŒ
äž¡æ¹ã®ã¢ã«ãŽãªãºã åæåãšãã¢ã«ãŽãªãºã ã® 1 ã€ã®ã¹ãããã®å®è¡ãè¡ããã® tff.federated_computation
ãçšæã§ããŸããããã®ã¢ã«ãŽãªãºã ãçµäºããããã«ããããã tff.templates.IterativeProcess
ã«æž¡ããŸãã
å埩ããã»ã¹ã® initialize
ãš next
颿°ã®åã·ã°ããã£ãèŠãŠã¿ãŸãããã
ããã¯ãfederated_algorithm.initialize
ãåäžã¬ã€ã€ãŒã¢ãã«ïŒ784 x10 ã®éã¿è¡åãš 10 ãã€ã¢ã¹ãŠãããïŒãè¿ãåŒæ°ãªã颿°ã§ããããšãåæ ããŠããŸãã
ããã§ã¯ãfederated_algorithm.next
ããµãŒããŒã¢ãã«ãšã¯ã©ã€ã¢ã³ãããŒã¿ãåãå
¥ããŠãæŽæ°ããããµãŒããŒã¢ãã«ãè¿ãããšãããããŸãã
ã¢ã«ãŽãªãºã ãè©äŸ¡ãã
æ°ã©ãŠã³ãã»ã©å®è¡ããæå€±ãã©ã®ããã«å€åããããèŠãŠã¿ãŸãããããŸãã2 ã€ç®ã®ãã¥ãŒããªã¢ã«ã§èª¬æãã centralized ã¢ãããŒãã䜿ã£ãŠãè©äŸ¡é¢æ°ãå®çŸ©ããŸãã
ãŸããäžå€®ã®è©äŸ¡ããŒã¿ã»ãããäœæããŠããããã¬ãŒãã³ã°ããŒã¿ã«äœ¿çšããã®ãšåãååŠçãé©çšããŸãã
ããã§ã¯ãèšç®å¹çã®çç±ã§ãæåã® 1000 åã®èŠçŽ ã®ã¿ã take
ããŠããŸãããäžè¬çã«ã¯ãã¹ãããŒã¿ã»ããå
šäœã䜿çšããããšã«æ³šæããŠãã ããã
次ã«ããµãŒããŒã®ç¶æ
ãåãå
¥ãã颿°ãèšè¿°ããKeras ã䜿çšããŠãã¹ãããŒã¿ã»ããã§è©äŸ¡ããŸããtf.Keras
ã®äœ¿çšã«æ
£ããŠããã®ã§ããã°ããããèŠæ
£ããŠãããããããŸããããset_weights
ã®äœ¿çšã«æ³šæããŠãã ããïŒ
ã§ã¯ãã¢ã«ãŽãªãºã ãåæåããŠããã¹ãã»ãããè©äŸ¡ããŠã¿ãŸãããã
æ°ã©ãŠã³ãçšåºŠãã¬ãŒãã³ã°ããäœããå€åãããã©ããã確èªããŸãããã
æå€±é¢æ°ããããã«æžå°ããŠããã®ãããããŸããå°ããªãžã£ã³ãã§ã¯ãããŸããããã¬ãŒãã³ã°ã¯ 10 ã©ãŠã³ãããå®è¡ããŠããããã¯ã©ã€ã¢ã³ãã®ãµãã»ãããå°ããããšã«æ³šæããŠãã ãããçµæãããçè§£ããã«ã¯ãæ°åã©ãŠã³ãã§ãªãã«ããŠããæ°çŸã©ãŠã³ãã¯å®è¡ããå¿ èŠããããããããŸããã
ã¢ã«ãŽãªãºã ã倿Žãã
ãããŸã§ãã©ãçãããšããã§ãæãäŒãããããŸã§éæããããšãèããŠã¿ãŸããããçŽç²ãª TensorFlow ã³ãŒãïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒã®æŽæ°çšïŒãš TFF ã® Federated Core ã®é£åèšç®ãçµã¿åãããããšã§ãFederated Averaging ãçŽæ¥å®è£ ããŸããã
åã«äžèšã®å 容ã倿Žããã ãã§ãããã«æŽç·ŽãããåŠç¿ãå®è¡ããããšãã§ããŸããå ·äœçã«ã¯ãäžèšã®çŽç²ãª TF ã³ãŒããç·šéããããšã§ãã¯ã©ã€ã¢ã³ãããã¬ãŒãã³ã°ãå®è¡ããæ¹æ³ãŸãã¯ãµãŒããŒãã¢ãã«ãæŽæ°ããæ¹æ³ã倿Žããããšãã§ããŸãã
課é¡: client_update
颿°ã«åŸé
ã¯ãªããã远å ããŠãã ããã