Path: blob/master/site/ja/federated/federated_learning.md
25115 views
é£ååŠç¿
æŠèŠ
ãã®ããã¥ã¡ã³ãã§ã¯ãTensorFlow ã«å®è£ ãããæ¢åã®æ©æ¢°åŠç¿ã¢ãã«ã䜿çšããé£åãã¬ãŒãã³ã°ãè©äŸ¡ãªã©ã®é£ååŠç¿ã®ã¿ã¹ã¯ã容æã«ããã€ã³ã¿ãŒãã§ãŒã¹ã玹ä»ããŸãããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšèšããäžã®äž»ãªç®æšã¯ãå éšæ©èœã«ã€ããŠã®ç¥èãå¿ èŠãšããã«ãé£ååŠç¿ãå®éšã§ããããã«ããããŸããŸãªæ¢åã®ã¢ãã«ãšããŒã¿ã«å®è£ ãããé£ååŠç¿ã¢ã«ãŽãªãºã ãè©äŸ¡ããããšã§ããããã²ããã®ãã©ãããã©ãŒã ã«è²¢ç®ããŠãã ãããTFF ã¯æ¡åŒµæ§ãšæ§æå¯èœæ§ãèæ ®ããŠèšèšãããŠããã®ã§ãçæ§ããã®è²¢ç®ãæè¿ããŸãïŒ
ãã®ã¬ã€ã€ãŒã«ããæäŸãããã€ã³ã¿ãŒãã§ãŒã¹ã¯ã次㮠3 ã€ã®äž»èŠéšåã§æ§æãããŠããŸãã
ã¢ãã«ãTFF ã§äœ¿çšããããã«æ¢åã®ã¢ãã«ãã©ããã§ããããã«ããã¯ã©ã¹ãšãã«ããŒé¢æ°ãã¢ãã«ã®ã©ããã³ã°ã¯ã1 ã€ã®ã©ããã³ã°é¢æ°ïŒ
tff.learning.from_keras_model
ïŒãåŒã³åºããŠç°¡åã«å®è¡ã§ããŸãããŸãã¯ãå®å šã«ã«ã¹ã¿ãã€ãºã§ããããã«tff.learning.models.VariableModel
ã€ã³ã¿ãŒãã§ãŒã¹ã®ãµãã¯ã©ã¹ãå®çŸ©ããããšãã§ããŸããé£åèšç®ãã«ããŒãæ¢åã®ã¢ãã«ã䜿çšããŠããã¬ãŒãã³ã°ãŸãã¯è©äŸ¡ããããã®é£åèšç®ãæ§ç¯ãããã«ããŒé¢æ°ã
ããŒã¿ã»ãããé£ååŠç¿ã®ã·ããªãªã®ã·ãã¥ã¬ãŒã·ã§ã³ã§äœ¿çšããããã« Python ã§ããŠã³ããŒãããŠã¢ã¯ã»ã¹ã§ããããŒã¿ã®ã³ã¬ã¯ã·ã§ã³ãé£ååŠç¿ã¯ãéäžç®¡çãããå Žæã§ç°¡åã«ããŠã³ããŒãã§ããªã忣ããŒã¿ã䜿çšããããã«èšèšãããŠããŸãããç ç©¶éçºã®æ®µéã§ã¯ãããŠã³ããŒãããŠããŒã«ã«ã§æäœã§ããããŒã¿ã䜿çšããŠåæã®å®éšãè¡ããšãç¹ã«ãã®ã¢ãããŒãã«äžæ £ããªéçºè ã«ãšã£ãŠäŸ¿å©ã§ãã
tff.simulation
ã«ã°ã«ãŒãåãããç ç©¶ããŒã¿ã»ããããã³ãã®ä»ã®ã·ãã¥ã¬ãŒã·ã§ã³é¢é£æ©èœãé€ãããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯äž»ã«tff.learning
åå空éã§å®çŸ©ãããŸãããã®ã¬ã€ã€ãŒã¯ãã©ã³ã¿ã€ã ç°å¢ãæäŸãã Federated Core (FC) ã«ããæäŸãããäžäœã¬ãã«ã®ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠå®è£
ãããŸãã
å
ã«é²ãåã«ããŸãç»ååé¡ãšããã¹ãçæã«é¢ãããã¥ãŒããªã¢ã«ã確èªããããšããå§ãããŸãããããã®ãã¥ãŒããªã¢ã«ã§ã¯ãå
·äœçãªäŸã䜿çšããŠãããã§èª¬æããæŠå¿µã®ã»ãšãã©ã玹ä»ããŠããŸããTFF ã®ããã¿ã«ã€ããŠã®è©³çްã¯ãã«ã¹ã¿ã ã¢ã«ãŽãªãºã ãã¥ãŒããªã¢ã«ãã芧ãã ããããã®ãã¥ãŒããªã¢ã«ã§ã¯é£åã³ã³ãã¥ããŒã·ã§ã®ããžãã¯ã衚çŸããtff.learning
ã€ã³ã¿ãŒãã§ãŒã¹ã®æ¢åã®å®è£
ãç ç©¶ããããã«äœ¿çšããäœã¬ãã«ã®ã€ã³ã¿ãŒãã§ãŒã¹ã«ã€ããŠèª¬æããŸãã
ã¢ãã«
ã¢ãŒããã¯ãã£ã®åæ
ã·ãªã¢ã«å
TFF ã¯ãããŸããŸãªåæ£åŠç¿ã·ããªãªããµããŒãããããšãç®çãšããŠããŸãããã®ã·ããªãªã§ã¯ãèšè¿°ããæ©æ¢°åŠç¿ã¢ãã«ã®ã³ãŒããããŸããŸãªæ©èœãæã€å€æ°ã®ç°çš®ã¯ã©ã€ã¢ã³ãã§å®è¡ã§ããŸããäžéšã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããã®ã¯ã©ã€ã¢ã³ãã¯åŒ·åãªããŒã¿ããŒã¹ãµãŒããŒã§ããå ŽåããããŸããããã©ãããã©ãŒã ããµããŒãããéèŠãªã¢ããªã±ãŒã·ã§ã³ã®å€ãã¯ããªãœãŒã¹ãéãããã¢ãã€ã«ããã€ã¹ãçµã¿èŸŒã¿ããã€ã¹ã§ãããããã®ããã€ã¹ã Python ã©ã³ã¿ã€ã ããã¹ãã§ããããšã¯æ³å®ã§ããŸããããã®æç¹ã§æ³å®ã§ããã®ã¯ãããŒã«ã«ã® TensorFlow ã©ã³ã¿ã€ã ããã¹ãã§ããããšã ãã§ãããããã£ãŠãTFF ã§è¡ãåºæ¬çãªã¢ãŒããã¯ãã£ã®åæã¯ãã¢ãã«ã³ãŒãã TensorFlow ã°ã©ããšããŠã·ãªã¢ã«åå¯èœã§ãªããã°ãªããªããšããããšã§ãã
eager ã¢ãŒãã®äœ¿çšãªã©ãææ°ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠ TF ã³ãŒããéçºããããšãã§ããŸãããæçµçãªã³ãŒãã¯ã·ãªã¢ã«åå¯èœã§ããå¿
èŠããããŸã (eager-modeã³ãŒãã®å Žåã¯tf.function
ãšããŠã©ããã§ããŸã)ãããã«ãããå®è¡æã«å¿
èŠãª Python ã®ç¶æ
ãŸãã¯å¶åŸ¡ãããŒã (Autograph ãªã©ã䜿çšããŠ) ã·ãªã¢ã«åã§ããããã«ãªããŸã ã
çŸåšãTensorFlowã¯ãEager ã¢ãŒãã® TensorFlow ã®ã·ãªã¢ã«åãšéã·ãªã¢ã«åãå®å
šã«ã¯ãµããŒãããŠããŸãããTFF ã§ã®ã·ãªã¢ã«åã¯çŸåšãTF 1.0 ãã¿ãŒã³ã«åŸãããã¹ãŠã®ã³ãŒãã¯ãTFF ãå¶åŸ¡ãã tf.Graph
å
ã«æ§ç¯ããå¿
èŠããããŸããããã¯ãçŸåš TFF ãæ¢ã«æ§ç¯ãããã¢ãã«ãæ¶è²»ã§ããªãããšãæå³ããŸãã 代ããã«ãã¢ãã«å®çŸ©ããžãã¯ã¯ãtff.learning.models.VariableModel
ãè¿ãåŒæ°ãªãã®é¢æ°ã«ããã±ãŒãžåãããŸããæ¬¡ã«ããã®é¢æ°ã TFF ã«ãã£ãŠåŒã³åºãããã¢ãã«ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã確å®ã«ã·ãªã¢ã«åãããŸããããã«ã匷ãåä»ããããç°å¢ã§ãããããTFF ã«ã¯ã¢ãã«ã®å
¥åã¿ã€ãã®ä»æ§ãªã©ã远å ã®ã¡ã¿ããŒã¿ãå°ãå¿
èŠã«ãªããŸãã
éèš
ã»ãšãã©ã®å ŽåãKeras ã䜿çšããŠã¢ãã«ãæ§ç¯ããããšã匷ããå§ãããŸãã以äžã® Keras ã³ã³ããŒã¿ã»ã¯ã·ã§ã³ãåç
§ããŠãã ããããããã®ã©ãããŒã¯ãã¢ãã«ã®æŽæ°ã®éèšãšã¢ãã«ã«å®çŸ©ãããã¡ããªãã¯ãèªåçã«åŠçããŸãã ãã ããäžè¬ç㪠tff.learning.models.VariableModel
ã®éèšãã©ã®ããã«åŠçãããããçè§£ããããšã¯æçšã§ãã
é£ååŠç¿ã«ã¯åžžã«å°ãªããšãããŒã«ã«ãªã³ããã€ã¹éèšãšã¯ãã¹ããã€ã¹ (ãŸãã¯é£å) éèšã® 2 ã€ã®éèšã¬ã€ã€ãŒããããŸãã
ããŒã«ã«éèšããã®ã¬ãã«ã®éèšã¯ãåã ã®ã¯ã©ã€ã¢ã³ããææãããµã³ãã«ã®è€æ°ã®ãããã«ãããéèšãæããŸããããã¯ãã¢ãã«ãããŒã«ã«ã§ãã¬ãŒãã³ã°ãããã«ã€ããŠé 次é²åãç¶ããäž¡æ¹ã®ã¢ãã«ãã©ã¡ãŒã¿ãŒ(倿°)ãããã³ãèšç®ãããçµ±èš (å¹³åæå€±ã粟床ããã®ä»ã®ã¡ããªãã¯ãªã©) ã«é©çšãããŸãããããã®çµ±èšã¯ãåã ã®ã¯ã©ã€ã¢ã³ãã®ããŒã«ã«ããŒã¿ã¹ããªãŒã ãã€ãã¬ãŒããããšãã«ãã¢ãã«ã¯åã³ããŒã«ã«ã§æŽæ°ãããŸãã
ãã®ã¬ãã«ã§ã®éèšã®å®è¡ã¯ã¢ãã«ã³ãŒããåŠçããæšæºã® TensorFlow æ§é ã䜿çšããŠå®è¡ãããŸãã
åŠçã®äžè¬çãªæ§é ã¯æ¬¡ã®ãšããã§ãã
ã¢ãã«ã¯ãŸãã
tf.Variable
ãäœæããŠãããæ°ãåŠçããããµã³ãã«æ°ããããããšãŸãã¯ãµã³ãã«ããšã®æå€±ã®åèšãªã©ã®éèšãä¿æããŸããTFF ã¯ã
Model
ã§forward_pass
ã¡ãœãããè€æ°ååŒã³åºããã¯ã©ã€ã¢ã³ãããŒã¿ã®åŸç¶ã®ãããã§é 次å®è¡ããããã坿¬¡ç广ãšããŠããŸããŸãªéèšãä¿æãã倿°ãæŽæ°ã§ããŸããæåŸã«ãTFFã¯ã¢ãã«ã§
report_local_unfinalized_metrics
ã¡ãœãããåŒã³åºããã¢ãã«ãåéãããã¹ãŠã®èŠçŽçµ±èšãã³ã³ãã€ã«ããŠãã¯ã©ã€ã¢ã³ãã«ãããšã¯ã¹ããŒããããã¡ããªãã¯ãã³ã³ãã¯ãã«ãŸãšããŸããããã¯ãããšãã°ãã¢ãã«ã³ãŒããæå€±ã®ç·èšãåŠçããããµã³ãã«æ°ã§å²ããå¹³åæå€±ããšã¯ã¹ããŒãããå Žåã«äœ¿çšãããŸãã
é£åéèšããã®ã¬ãã«ã®éèšã¯ãã·ã¹ãã å ã®è€æ°ã®ã¯ã©ã€ã¢ã³ã (ããã€ã¹) ã«ãããéèšãæããŸããããã¯ã¯ã©ã€ã¢ã³ãå šäœã§å¹³ååãããã¢ãã«ãã©ã¡ãŒã¿ (倿°) ãšããŒã«ã«éèšã®çµæãšããŠã¢ãã«ããšã¯ã¹ããŒãããã¡ããªãã¯ã«é©çšãããŸãã
ãã®ã¬ãã«ã§éèšãå®è¡ããã®ã¯ TFF ã®è²¬ä»»ã§ãããã ããã¢ãã«äœæè ã¯ãã®ããã»ã¹ãå¶åŸ¡ã§ããŸã (詳现ã¯ä»¥äžãåç §ããŠãã ãã)ã
åŠçã®äžè¬çãªæ§é ã¯æ¬¡ã®ãšããã§ãã
åæã¢ãã«ãšãã¬ãŒãã³ã°ã«å¿ èŠãªãã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯ããµãŒããŒã«ããäžé£ã®ãã¬ãŒãã³ã°ãŸãã¯è©äŸ¡ã«åå ããã¯ã©ã€ã¢ã³ãã®ãµãã»ããã«é åžãããŸãã
åã¯ã©ã€ã¢ã³ãã§ã¯ãç¬ç«ãã€äžŠè¡ããŠã¢ãã«ã³ãŒããããŒã«ã«ããŒã¿ãããã®ã¹ããªãŒã ã§ç¹°ãè¿ãåŒã³åºãããäžèšã®ããã«æ°ããã¢ãã«ãã©ã¡ãŒã¿ãŒã®ã»ãã (ãã¬ãŒãã³ã°æ) ãšæ°ããããŒã«ã«ã¡ããªãã¯ã®ã»ãã (ããŒã«ã«éèš) ãçæãããŸãã
TFFã¯ã忣åéçŽãããã³ã«ãå®è¡ããŠãã·ã¹ãã å šäœã§ã¢ãã«ãã©ã¡ãŒã¿ãšããŒã«ã«ã«ãšã¯ã¹ããŒããããã¡ããªãã¯ãèç©ããã³éçŽããŸãããã®ããžãã¯ã¯ãTFF ç¬èªã®é£åèšç®èšèªïŒTensorFlowã§ã¯ãªãïŒã䜿çšããŠå®£èšçãªæ¹æ³ã§è¡šçŸãããŸããéèšAPIã®è©³çްã«ã€ããŠã¯ãã«ã¹ã¿ã ã¢ã«ãŽãªãºã ã®ãã¥ãŒããªã¢ã«ãã芧ãã ããã
æœè±¡ã€ã³ã¿ãŒãã§ãŒã¹
ãã®åºæ¬ç㪠constructor ãš metadata ã€ã³ã¿ãŒãã§ãŒã¹ã¯ã次ã®ããã«ã€ã³ã¿ãŒãã§ãŒã¹ tff.learning.models.VariableModel
ã§è¡šãããŸãã
ã³ã³ã¹ãã©ã¯ã¿ãŒã
forward_pass
ãããã³report_local_unfinalized_metrics
ã¡ãœããã¯ã察å¿ããã¢ãã«å€æ°ããã©ã¯ãŒããã¹ãããã³ã¬ããŒãããçµ±èšãããããæ§æããå¿ èŠããããŸãããããã®ã¡ãœããã§æ§ç¯ããã TensorFlow ã¯ãäžè¿°ã®ãšãããã·ãªã¢ã«åããå¿ èŠããããŸããinput_spec
ããããã£ãšããã¬ãŒãã³ã°å¯èœãªå€æ°ããã¬ãŒãã³ã°äžå¯èœãªå€æ°ãããã³ããŒã«ã«å€æ°ã®ãµãã»ãããè¿ã 3 ã€ã®ããããã£ã¯ãã¡ã¿ããŒã¿ã衚ããŸããTFF ã¯ãã®æ å ±ã䜿çšããŠãã¢ãã«ã®éšåãé£åæé©åã¢ã«ãŽãªãºã ã«æ¥ç¶ããæ¹æ³ã決å®ããæ§ç¯ãããã·ã¹ãã ã®æ£ç¢ºæ§ãæ€èšŒããã®ã«åœ¹ç«ã€å éšåã·ã°ããã£ãå®çŸ©ããŸã (ã¢ãã«ã䜿çšããããã«èšèšãããŠãããã®ãšäžèŽããªãããŒã¿ã«å¯ŸããŠã¢ãã«ãã€ã³ã¹ã¿ã³ã¹åããªãããã«ãããã)ã
ãŸããæœè±¡ã€ã³ã¿ãŒãã§ãŒã¹ã® tff.learning.models.VariableModel
ã¯ãã¡ããªãã¯ã®æªå®æã®å€ïŒreport_local_unfinalized_metrics()
ãæ»ãïŒãåã£ãŠæçµçãªã¡ããªãã¯å€ãè¿ã metric_finalizers
ããããã£ãå
¬éããŸããmetric_finalizers
ãš report_local_unfinalized_metrics()
ã¡ãœããã¯ãé£åãã¬ãŒãã³ã°ããã»ã¹ãŸãã¯è©äŸ¡ã³ã³ãã¥ããŒã·ã§ã³ãå®çŸ©ããéã«ãã¯ã©ã€ã¢ã³ãéã®ã¡ããªã¯ã¹ã¢ã°ãªã²ãŒã¿ãæ§ç¯ããããã«åæã«äœ¿çšãããŸããããšãã°ãåçŽãª tff.learning.metrics.sum_then_finalize
ã¢ã°ãªã²ãŒã¿ã¯ããŸãã¯ã©ã€ã¢ã³ãããã®æªå®æã®ã¡ããªãã¯å€ãå ç®ããŠç©ºããã¡ã€ãã©ã€ã¶ãŒé¢æ°ããµãŒããŒåŽã§åŒã³åºããŸãã
ç¬èªã®ã«ã¹ã¿ã tff.learning.models.VariableModel
ãå®çŸ©ããæ¹æ³ã®äŸã¯ãç»ååé¡ãã¥ãŒããªã¢ã«ã®åŸåãšãmodel_examples.py
ã®ãã¹ãã§äœ¿çšãããµã³ãã«ã¢ãã«ã«ãããŸãã
Keras çšã³ã³ããŒã¿
TFF ã«å¿
èŠãªã»ãŒãã¹ãŠã®æ
å ±ã¯ãtf.keras
ã€ã³ã¿ãŒãã§ãŒã¹ãåŒã³åºãããšã§ååŸã§ããŸãããããã£ãŠãKeras ã¢ãã«ãããå Žå㯠tff.learning.from_keras_model
ã䜿çšã㊠tff.learning.models.VariableModel
ãæ§ç¯ã§ããŸãã
TFF ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒïŒæ¬¡ã®ãããªåŒæ°ã®ãªãã¢ãã«é¢æ°ïŒãæäŸããããšãæ±ããŠããããšã«æ³šæããŠãã ããã
ã¢ãã«èªäœã«å ããŠãTFF ãã¢ãã«ã®å ¥åã®ã¿ã€ããšåœ¢ç¶ã決å®ããããã«äœ¿çšããããŒã¿ã®ãµã³ãã«ããããæäŸããŸããããã«ãããTFF ãã¯ã©ã€ã¢ã³ãããã€ã¹ã«å®éã«ååšããããŒã¿ã®ã¢ãã«ãé©åã«ã€ã³ã¹ã¿ã³ã¹åã§ããããã«ãªããŸã (ãã®ããŒã¿ã¯ãã·ãªã¢ã«åãã TensorFlow ãæ§ç¯ããŠãããšãã«ã¯äžè¬ã«å©çšã§ããªããšæ³å®ãããŠãããã)ã
Keras ã©ãããŒã®äœ¿çšæ³ã¯ãç»ååé¡ãšããã¹ãçæã®ãã¥ãŒããªã¢ã«ã§èª¬æãããŠããŸãã
é£åèšç®ãã«ããŒ
tff.learning
ããã±ãŒãžã¯ãåŠç¿é¢é£ã®ã¿ã¹ã¯ãå®è¡ããtff.Computation
ã®ããã€ãã®ãã«ããŒãæäŸããŸãããã®ãããªèšç®ã®ã»ããã¯ãä»åŸæ¡åŒµãããããšãäºæ³ãããŠããŸãã
ã¢ãŒããã¯ãã£ã®åæ
å®è¡
é£åèšç®ã®å®è¡ã«ã¯ 2 ã€ã®ç°ãªããã§ãŒãºããããŸãã
ã³ã³ãã€ã«ïŒTFFã¯æåã«é£ååŠç¿ã¢ã«ãŽãªãºã ã忣èšç®å šäœã®æœè±¡ã·ãªã¢ã«å衚çŸã«ã³ã³ãã€ã«ããŸããããã¯TensorFlowã®ã·ãªã¢ã«åãè¡ããããšãã«å®è¡ãããŸãããããå¹ççãªå®è¡ããµããŒãããããã«ä»ã®å€æãè¡ãããå ŽåããããŸããã³ã³ãã€ã©ãŒã«ãã£ãŠçæãããã·ãªã¢ã«åããã衚çŸããé£åèšç®ãšåŒã³ãŸãã
å®è¡: TFF ã¯ããããã®èšç®ãå®è¡ããæ¹æ³ãæäŸããŸããçŸæç¹ã§ã¯ãå®è¡ã¯ããŒã«ã«ã·ãã¥ã¬ãŒã·ã§ã³ã§ã®ã¿ãµããŒããããŠããŸã (äŸ: ã·ãã¥ã¬ãŒãããã忣ããŒã¿ã䜿çšããããŒãããã¯ã§ã®å®è¡)ã
é£åã¢ãã«ã®å¹³ååã䜿çšãããã¬ãŒãã³ã°ã¢ã«ãŽãªãºã ãªã© TFF ã® Federated Learning API ã«ãã£ãŠçæãããé£åèšç®ããŸãã¯ãäž»ã«ä»¥äžã®ãããªããã€ãèŠçŽ ãå«ãé£åè©äŸ¡:
ã¢ãã«ã³ãŒãã®ã·ãªã¢ã«åããã圢åŒãããã³ãã¢ãã«ã®ãã¬ãŒãã³ã°/è©äŸ¡ã«ãŒããå®è¡ããããã«é£ååŠç¿ãã¬ãŒã ã¯ãŒã¯ã«ããæ§ç¯ããã远å ã® TensorFlow ã³ãŒã (ãªããã£ãã€ã¶ã®æ§ç¯ãã¢ãã«ã®æŽæ°ã®é©çšã
tf.data.Dataset
ã®ã€ãã¬ãŒã·ã§ã³ãã¡ããªãã¯ã®èšç®ããµãŒããŒã«ãããéèšãããæŽæ°ã®é©çšãªã©)ãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®éã®éä¿¡ã®å®£èšä»æ§ (éåžžãã¯ã©ã€ã¢ã³ãããã€ã¹å šäœã®ããŸããŸãªåœ¢åŒã®éèšãããã³ãµãŒããŒãããã¹ãŠã®ã¯ã©ã€ã¢ã³ããžã®ãããŒããã£ã¹ã) ãããŠããã®åæ£éä¿¡ã TensorFlow ã³ãŒãã®ã¯ã©ã€ã¢ã³ãããŒã«ã«ãŸãã¯ãµãŒããŒããŒã«ã«ã®å®è¡ãšã©ã®ããã«ã€ã³ã¿ãŒãªãŒãããããã
ãã®ã·ãªã¢ã«åããã圢åŒã§è¡šãããé£åèšç®ã¯ãPython ãšã¯ç°ãªããã©ãããã©ãŒã ã«äŸåããªãå
éšèšèªã§è¡šçŸãããŸãããFederated Learning API ã䜿çšããããããã®è¡šçŸã®è©³çްã«ã€ããŠã®ç¥èã¯å¿
èŠã¯ãããŸãããèšç®ã¯ãPython ã³ãŒãã®ã¿ã€ãtff.Computation
ã®ãªããžã§ã¯ããšããŠè¡šãããã»ãšãã©ã®å Žåãäžéæãª Python callable
ãšããŠæ±ãããšãã§ããŸãã
ãã¥ãŒããªã¢ã«ã§ã¯ããããã®é£åèšç®ãéåžžã® Python 颿°ã®ããã«åŒã³åºããããŒã«ã«ã§å®è¡ããŸãããã ããTFF ã¯å®è¡ç°å¢ã®ã»ãšãã©ã®åŽé¢ã«ãšããããªãæ¹æ³ã§é£åèšç®ã衚çŸããããã«èšèšãããŠããã®ã§ãAndroid
ãå®è¡ããŠããããã€ã¹ã®ã°ã«ãŒãããããŒã¿ã»ã³ã¿ãŒã®ã¯ã©ã¹ã¿ãŒã«ãããã€ã§ããå ŽåããããŸããç¹°ãè¿ããŸãããããã®äž»ãªçµæã¯ãã·ãªã¢ã«åã«é¢ãã匷åãªä»®å®ã§ããç¹ã«ã以äžã§èª¬æãããŠããbuild_...
ã¡ãœããã® 1 ã€ãåŒã³åºããšãèšç®ã¯å®å
šã«ã·ãªã¢ã«åãããŸãã
ç¶æ ã®ã¢ããªã³ã°
TFF ã¯é¢æ°åããã°ã©ãã³ã°ç°å¢ã§ãããé£ååŠç¿ã«é¢é£ããå€ãã®ããã»ã¹ã¯ã¹ããŒããã«ã§ããããšãã°ãé£åã¢ãã«ã®å¹³ååãè€æ°åè¡ããã¬ãŒãã³ã°ã«ãŒãã¯ãã¹ããŒããã«ããã»ã¹ãšããŠåé¡ã§ããŸãããã®ããã»ã¹ã§ã¯ãã©ãŠã³ãããšã«ãšé²åããç¶æ ã«ã¯ããã¬ãŒãã³ã°ãããŠããã¢ãã«ãã©ã¡ãŒã¿ã®ã»ãããšãªããã£ãã€ã¶ã«é¢é£ãã远å ã®ç¶æ (éåéãã¯ãã«ãªã©) ãå«ãŸããŸãã
TFF ã¯é¢æ°çã§ãããããã¹ããŒããã«ããã»ã¹ã¯ããã®æç¹ã®ç¶æ
ãå
¥åãšããŠåãå
¥ããæŽæ°ãããç¶æ
ãåºåãšããŠæäŸããèšç®ãšã㊠TFF ã§ã¢ãã«åãããŸããã¹ããŒããã«ããã»ã¹ãå®å
šã«å®çŸ©ããã«ã¯ãåæç¶æ
ãã©ãããæ¥ãããæå®ããå¿
èŠããããŸã (ããã§ãªããšãããã»ã¹ãããŒãã¹ãã©ããã§ããŸãã)ãããã¯ããã«ããŒã¯ã©ã¹tff.templates.IterativeProcess
ã®å®çŸ©ã§ãã£ããã£ããã2 ã€ã®ããããã£initialize
ãšnext
ã¯ããããããåæåãšã€ãã¬ãŒã·ã§ã³ã«å¯Ÿå¿ããŸãã
å©çšå¯èœãªãã«ããŒ
çŸæç¹ã§ã¯ãTFF ã¯ãé£åãã¬ãŒãã³ã°ãšè©äŸ¡ã®ããã®é£åèšç®ãçæãããã«ããŒé¢æ°ããããæäŸããŠããŸããäžã§ãéèŠãªé¢æ°ã«ã¯ã以äžã® 2 ã€ãå«ãŸããŸãã
tff.learning.algorithms.build_weighted_fed_avg
: å ¥åãšããŠã¢ãã«é¢æ°ãšã¯ã©ã€ã¢ã³ããªããã£ãã€ã¶ãåããã¹ããŒããã«ãªtff.learning.templates.LearningProcess
ïŒtff.templates.IterativeProcess
ããµãã¯ã©ã¹åããïŒãè¿ããŸããè©äŸ¡ã¯ã¹ããŒããã«ã§ã¯ãªãããã
tff.learning.build_federated_evaluation
ã¯ã¢ãã«é¢æ°ãåããã¢ãã«ã®é£åè©äŸ¡ã®ããã®äžã€ã®é£åèšç®ãè¿ããŸãã
ããŒã¿ã»ãã
ã¢ãŒããã¯ãã£ã®åæ
ã¯ã©ã€ã¢ã³ãã®éžæ
å žåçãªé£ååŠç¿ã®ã·ããªãªã§ã¯ãæœåšçã«äœåãã®ã¯ã©ã€ã¢ã³ãããã€ã¹ã®å€§ããªæ¯éå£ãããããã®å ã¢ã¯ãã£ãã§ãã€ã§ããã¬ãŒãã³ã°ã«å©çšã§ããã®ã¯äžéšã®ã¿ã§ãã (ããšãã°ãåŸéå¶ã®ãããã¯ãŒã¯äžã«ãªããã¢ã€ãã«ç¶æ ã§é»æºã«æ¥ç¶ãããŠããã¯ã©ã€ã¢ã³ãã«éå®ãããå ŽåããããŸã)ãäžè¬ã«ããã¬ãŒãã³ã°ãŸãã¯è©äŸ¡ã«åå ã§ããã¯ã©ã€ã¢ã³ãã®ã»ããã¯ãéçºè ã®ç®¡çå€ã§ããããã«ãæ°çŸäžã®ã¯ã©ã€ã¢ã³ãã調æŽããããšã¯éçŸå®çã§ãããããéåžžã®ãã¬ãŒãã³ã°ãŸãã¯è©äŸ¡ã®ã©ãŠã³ãã«ã¯å©çšå¯èœãªã¯ã©ã€ã¢ã³ãã®äžéšã®ã¿ãå«ãŸããŸã (ã©ã³ãã ã«ãµã³ããªã³ã°ãããã¯ã©ã€ã¢ã³ããªã©)ã
ããã®äž»ãªçµæãšããŠãé£åèšç®ã¯ãèšè𿮵éããã¯ã©ã€ã¢ã³ãã®æ£ç¢ºãªã»ããã«é¢é£ãªã衚çŸãããããã«ãªã£ãŠããŸãããã¹ãŠã®åŠçã¯ãå¿åã®ã¯ã©ã€ã¢ã³ãã®æœè±¡çãªã°ã«ãŒãã«å¯ŸããéèšæäœãšããŠè¡šçŸããããã®ã°ã«ãŒãã¯ãã¬ãŒãã³ã°ã®ã©ãŠã³ãããšã«ç°ãªãå ŽåããããŸããå ·äœçãªã¯ã©ã€ã¢ã³ããžã®èšç®ã®å®éã®ãã€ã³ãã£ã³ã°ãããã³ãããããèšç®ã«äŸçµŠããå ·äœçãªããŒã¿ã¯èšç®å€ã§ã¢ãã«åãããŸãã
é£ååŠç¿ã³ãŒãã®çŸå®çãªãããã€ã¡ã³ããã·ãã¥ã¬ãŒãããã«ã¯ãéåžžãæ¬¡ã®ãããªãã¬ãŒãã³ã°ã«ãŒããèšè¿°ããŸãã
ããã容æã«ããããã«ãã·ãã¥ã¬ãŒã·ã§ã³ã§ TFF ã䜿çšããå Žåãé£åããŒã¿ã¯ Pythonlist
ãšããŠåãå
¥ããããåå ããŠããã¯ã©ã€ã¢ã³ãããã€ã¹ããšã« 1 ã€ã®èŠçŽ ã䜿çšããŠããã®ããã€ã¹ã®ããŒã«ã«tf.data.Dataset
ã衚ããŸãã
æœè±¡ã€ã³ã¿ãŒãã§ãŒã¹
ã·ãã¥ã¬ãŒããããé£åããŒã¿ã»ããã®åŠçãæšæºåããããã«ãTFF ã«ã¯æœè±¡çãªã€ã³ã¿ãŒãã§ãŒã¹ tff.simulation.datasets.ClientData
ãæäŸãããŠããŸããããã«ãããã¯ã©ã€ã¢ã³ãã®ã»ãããåæããç¹å®ã®ã¯ã©ã€ã¢ã³ãã®ããŒã¿ãå«ã tf.data.Dataset
ãæ§ç¯ã§ããŸãããããã® tf.data.Dataset
ã¯ãeager ã¢ãŒãã§çæãããé£åèšç®ãžã®å
¥åãšããŠçŽæ¥äŸçµŠããããšãã§ããŸãã
ã¯ã©ã€ã¢ã³ã ID ã«ã¢ã¯ã»ã¹ããæ©èœã¯ãã·ãã¥ã¬ãŒã·ã§ã³ã§äœ¿çšããããã®ã¿ã«ããŒã¿ã»ããã«ããæäŸãããæ©èœã§ãããã¯ã©ã€ã¢ã³ãã®ç¹å®ã®ãµãã»ããããã®ããŒã¿ããã¬ãŒãã³ã°ããæ©èœãå¿
èŠã«ãªãå Žåãããããšã«æ³šæããŠãã ããïŒããšãã°ãããŸããŸãªã¿ã€ãã®ã¯ã©ã€ã¢ã³ãã®æ¥äžã®å¯çšæ§ãã·ãã¥ã¬ãŒãããå Žåãªã©ïŒãã³ã³ãã€ã«ãããèšç®ãšåºã«ãªãã©ã³ã¿ã€ã ã¯ãã¯ã©ã€ã¢ã³ã ID ã®æŠå¿µãäžåå«ã¿ãŸãããããšãã° tff.templates.IterativeProcess.next
ã®åŒã³åºããªã©ã§ãã¯ã©ã€ã¢ã³ãã®ç¹å®ã®ãµãã»ããããã®ããŒã¿ãå
¥åãšããŠéžæããããšãã¯ã©ã€ã¢ã³ã ID ã¯ãã®äžã«è¡šç€ºãããªããªããŸãã
å©çšå¯èœãªããŒã¿ã»ãã
åå空é tff.simulation.datasets
ã¯ãã·ãã¥ã¬ãŒã·ã§ã³ã§äœ¿çšããããã® tff.simulation.datasets.ClientData
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããããŒã¿ã»ããå°çšã§ãç»ååé¡ãšããã¹ãçæã®ãã¥ãŒããªã¢ã«ããµããŒãããããã«ãããŒã¿ã»ãããã·ãŒããããŠããŸãããç¬èªã®ããŒã¿ã»ããããã©ãããã©ãŒã ã«è²¢ç®ããããšããå§ãããŸãã