çŸåšã人工ç¥èœã¯æãè°è«ãããŠãããããã¯ã®1ã€ã§ãããããžã¿ã«ããžãã¹å€é©ã®äž»èŠãªãšã³ãžã³ã§ãã Microsoftã®AIæŠç¥ã«ã¯ãéçºè
åãã®AIã®æ°äž»åãã€ãŸã ç¥çåé¡ã解決ããããã®äœ¿ãããããã¬ãŒã ã¯ãŒã¯ãšãµãŒãã¹ãæäŸããŸãã ãã®èšäºã§ã¯ã.NETéçºè
ãããââãžã§ã¯ãã§AIã®æ©èœã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããŸããã¯ã©ãŠãã§åäœããæ¢è£œã®èªç¥ãµãŒãã¹ããã.NETèšèªã§ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãã¬ãŒãã³ã°ãRaspberry Piãªã©ã®ã³ã³ãã¯ããªããã€ã¹ã§ã®è€éãªãã¥ãŒã©ã«ãããã¯ãŒã¯ã®å®è¡ãŸã§ã
èšäºã®ãããã¿ã€ãã¯ã DotNext 2017ã¢ã¹ã¯ã¯äŒè°ã§ã®Dmitry Soshnikovã«ããã¬ããŒãã§ããã Dmitryã¯ããã€ã¯ããœããã®ãã¯ãããžãšãã³ãžã§ãªã¹ãã§ãããåå¿è
ã®éçºè
ã®éã§ææ°ã®ãœãããŠã§ã¢éçºãã¯ãããžãæšé²ããŠããŸãã ã¢ãã®ã€ã³ã¿ãŒãããã®åéããŠãããŒãµã«Windowsã¢ããªã±ãŒã·ã§ã³ã®éçºã颿°åããã°ã©ãã³ã°ã®åéãããã³.NETãã©ãããã©ãŒã ïŒFïŒãRoslynïŒãå°éãšããŠããŸãã 圌ã¯å人çã«ãã·ã¢ã§æ°åã®ããã«ãœã³ã宿œããå€ãã®åŠçã®ã¹ã¿ãŒãã¢ãããããŸããŸãªåéã§ãããžã§ã¯ããéå§ããã®ãå©ããŸããã åææãå士ã¯ãã¢ã¹ã¯ã¯ç©çåŠæè¡ç ç©¶æãšãã·ã¢äººå·¥ç¥èœåäŒã®ã¡ã³ããŒã§ããã¢ã¹ã¯ã¯èªç©ºç ç©¶æã§ãå€ã«UNIO-RåäŸãã£ã³ãã®ã³ã³ãã¥ãŒã¿ãŒæè¡åŠç§ã®æå°è
ãšããŠææ¥ãè¡ã£ãŠããŸãã
泚æãã©ãã£ãã¯ïŒ ãã®æçš¿ã«ã¯ãèšå€§ãªæ°ã®åçããããŸãã720p圢åŒã®ãããªã®ã¹ã©ã€ããšã¹ã¯ãªãŒã³ã·ã§ããã§ãã
ãã®èšäºã§ã¯ã人工ç¥èœã«ã€ããŠèª¬æããŸãã ãªãä»åœŒã«ã€ããŠè©±ãã®ãæµè¡ãªã®ã§ããïŒ ãªããªããããã¯äžçãéåžžã«æ¥éã«å€åãããäžé£ã®ãã¯ãããžãŒã ããã§ãã
äžçã®å€åã®äŸã¯ããã¯ããã«ãã§ãã ãããŠã¢ã¡ãªã«ã§ã¯ãMcAutoããããŸãã æ³šæãåãåãç·æ§ãããã«åº§ã£ãŠããŸãã ãããŠããã§ã«çŽ20幎åã«ã¢ã¡ãªã«ã§ã¯ãããã«äººã¯å¿
èŠãªããšæ±ºããããŸããã圌ãã€ã³ãã«åº§ã£ãŠãããªãã¬ãŒã¿ãŒãšäº€æããå¿
èŠããããŸã-ããã¯ãã£ãšå®ããªããŸãã 圌ã¯èšªåè
ãšé»è©±ã§è©±ããããããã¹ãŠã³ã³ãã¥ãŒã¿ãŒã«å
¥ããŸããæ³šæã¯æºåãããã¢ã¡ãªã«äººã«æ¯æãå¿
èŠã¯ãããŸããã çªã«åº§ã£ãŠããã¢ã¡ãªã«äººã¯éåžžã«é«äŸ¡ã§ãã ãã®æ±ºå®ã«ãããäŸ¡æ Œãäžããããšãã§ããŸããããã³ããŒã¬ãŒãå®ããªãã人ã
ã®å¥åº·ãäœäžããŸããããã¹ãŠãé 調ã§ãã ãã®æ¹åã®æåŸã®äžæ©ã¯ãããã«äººã¯ãŸã£ããå¿
èŠãªãããšã«æ°ã¥ãããšãã«è¡ãããŸããã ãããååŸããŠãé³å£°èªèã¢ã«ãŽãªãºã ã«çœ®ãæããããšãã§ããŸãã ãã®ãããªãããžã§ã¯ãã¯1幎以äžåã«ãç±³åœãã€ã¯ããœããã®ååã«ãã£ãŠäœæãããŸããã
ã€ã³ã¿ãŒãããã«ã¯ããã¯ããã«ãã®çªã«ãã人ãèããŠããããšãçè§£ãããã®äººã®èŠãã¿ã®å
šäœã®æ·±ããæããããšãã§ãããããªããããŸãã 圌ã¯äœãèãããŸãããéšé³ããããè»ãéãéããŠããã圌ã¯ãããèªèããããåŸãŸããã 人éã¯ç²ããã®ã§ãAIã¯äººéãããããŸã察åŠã§ããŸãã

泚æãåºãå Žåããªãã¬ãŒã¿ãŒãšã®äŒè©±ã¯éåžžã«å
·äœçãªãããã¯ã§è¡ããã誰ããã®ãããªãŠã£ã³ããŠã§äººçã®æå³ã«ã€ããŠè©±ãããšã¯ãããŸããã ã¡ãã¥ãŒãæç¢ºãªãšããèšèãæç¢ºãªãšããã³ã³ãã¥ãŒã¿ã¯äººãããããèªèããŸãã 2016幎ãMicrosoftã¯ã人éãããåªããé³å£°èªèã¢ã«ãŽãªãºã ãæçµçã«äœæãããšãã声æãçºè¡šããŸããã ãã¹ããããæ¬åœã«åªããŠããããšã確èªãããŸããã
2015幎ãã³ã³ãã¥ãŒã¿ãŒã¯ç¹å®ã®ç»åïŒäº€éæšèïŒãèªèãå§ããŸããã åŸæ¥ã1000æã®åçã®äžãããã³ã³ãã¥ãŒã¿ã¯äººãããéè·¯æšèãèŠã€ãããããªã£ãŠããŸãã ãªãã§ïŒ ãããããããã¯äžå€®ã®ã©ããã§äººãæ©ãŸããŸãããã³ã³ãã¥ãŒã¿ã§ã¯æ©ã¿ãŸããã ããããçµæã¯çµæã§ããã³ã³ãã¥ãŒã¿ãŒã¯ç§ãã¡ããããã®ãããªã¿ã¹ã¯ã«ããŸã察åŠããŸãã
AIã§ã®Microsoftã®æ¥çžŸã®ãªã¹ãã¯æ¬¡ã®ãšããã§ã;ãããã¯å°è±¡çã§ãã

ãã€ã¯ããœããã¯ä»ã®å
ãè¡ã£ãŠããŸãã ã¯ã©ãŠãã§ããã°ã©ã ãããFPGAãããã䜿çšããŠãã¥ãŒã©ã«ãããã¯ãŒã¯ãå®è¡ããæ¹æ³ã«é¢ããç ç©¶ãé²è¡äžã§ãã ããã§ã®ãœãªã¥ãŒã·ã§ã³ã®ç¯å²ã¯åºç¯ã§ãã
äŒç€Ÿã®å
šäœçãªæŠç¥ã¯äœã§ããïŒ AIã®åéã§ãã€ã¯ããœããã¯äœãããŠããŸããïŒ
ãŸããåœç¶ã補åã«å°å
¥ããŸãã Power BIãHoloLens-èªèãä»ã§ã¯ãã¡ããã¡ãã«ãªã£ãŠããŸãã ãŸããPowerPointã«ã¯ãAIã䜿çšãããå€ãã®å ŽæããããŸãã ããšãã°ããã¹ã©ã€ãããã¶ã€ã³ããŠãã ããããšãããã¿ã³ããããããã¶ã€ã³ã®ã¢ã€ãã¢ããšåŒã°ããã·ã³ãã«ãªã¹ã©ã€ãã®ãã¶ã€ã³ãæäŸããŸãã ããã¯ãæ©æ¢°åŠç¿ãšAIãã¯ãããžãŒã®é©çšã®çµæã§ãã ãŸãã¯ãPowerPointã«ç»åãæ¿å
¥ãããšãèªç¶èšèªã®çœ²åãçæãããŸã-ããã«æãããŠãããã®ã 次ã«ãWebã®ã©ããã«ãšã¯ã¹ããŒããããšã察å¿ããã¿ã°ãæ£ããä»å ãããŸãã äºçްãªããšã®ããã«æããŸãããçŽ æŽãããããšã§ãã
AIã¯è£œåã«å°å
¥ãããã¯ã©ãŠãã§ããå¹ççã«äœ¿çšããæ¹æ³ã«ã€ããŠç ç©¶ãè¡ãããŠããŸãããããŠãæãéèŠãªã®ã¯éçºè
ã«ãšã£ãŠãAIã¯äœ¿ããããããããã«æ°äž»åãããŠããŸãã

èªç¥ãµãŒãã¹ããããŸãã ãããã¯ãç»ååŠçãªã©ã察åŠããå¿
èŠãããåºæ¬çãªã¿ã¹ã¯ã«åçŽã«äœ¿çšã§ããŸãã ããšãã°ã補åã«æ©èœãå°å
¥ããŠãç»åã«ãã£ãã·ã§ã³ãèªåçã«æ¿å
¥ãããããã«ããŸãã ããã¯é£ãããããŸãã-æ¢è£œã®ã¯ã©ãŠããµãŒãã¹ããããŸããåçãæäŸãããšã圌ã¯è±èªã§èª¬æãè¿ããŸãã æ©æ¢°ç¿»èš³ã補åã«å°å
¥ããå Žåããã¹ãŠãéåžžã«ç°¡åã§ããBingTranslatorãµãŒãã¹ã䜿çšãããšãã»ãŒãã¹ãŠã®èšèªããããããèšèªãžã®ç¿»èš³ãæäŸãããŸãã ãããã®æ©èœã¯èª°ã§ãå©çšã§ããŸãã
æ°äž»åã«ã¯ãèªç¥ãµãŒãã¹ãããããæ©æ¢°åŠç¿-Azure MLããã¥ãŒã©ã«ãããã¯ãŒã¯-Microsoft Cognitive Toolkitã®4ã€ã®äž»èŠãªé åããããŸãã æåŸã®2ã€ã«ã€ããŠèª¬æããŸãããã

æ©æ¢°åŠç¿ã®äž»ãªã¢ã€ãã¢ã¯ãã³ã³ãã¥ãŒã¿ãŒãããŒã¿ã«å¯ŸããŠäœããè¡ãæ¹æ³ãåŠç¿ããããšã§ãã
ããšãã°ãåçãã人éã®ææ
ãèªèããæ¹æ³ãåŠã³ããã§ãã ãããã©ã®ããã«è¡ãããšãã§ããŸããïŒ

ã¢ã«ãŽãªãºã ã®æžãæ¹ãèãããšãããã«è¡ãæ¢ãŸãã«ãªãããšã¯æããã§ãã ããšãã°ãé©ããšææãæ£ç¢ºã«åºå¥ããæ¹æ³ã¯ããããŸãããã©ã¡ãã®å Žåãç®ã¯äžžãã§ãã ãããã¢ã«ãŽãªãºã çã«è¡ãæ¹æ³ã¯æç¢ºã§ã¯ãããŸããã ãããŠãå€ãã®åçãæ®ããªãããããããã©ããããããèªåçã«ãããè¡ãããšãã§ããŸãã ã©ããã£ãŠïŒ ãŸããåçããããã€ãã®åºæ¬çãªå
åãç¹å®ããããšãéèŠã§ããäœããã®æ°å€ã€ã³ãžã±ãŒã¿ã«åãæ¿ããããšãéèŠã§ãã ãªããªãåçã¯å€ãã®è©³çްãäŒŽãæœè±¡çãªãã®ã ããã§ãã ããããããšãã°ãç®ã®äœçœ®ãåã®è§ã®äœçœ®ãèªèãã衚ã§è¡šãããšãã§ããæ°å€çãªãã®ã«é²ãããšãã§ããŸãã ããã«ãããã¯å
¥åãšããŠæ©æ¢°åŠç¿ã«é©çšã§ãããããã¢ã«ãŽãªãºã ã¯ãããã®ãã¿ãŒã³ãèŠã€ããäºæž¬ãè¡ãããšãã§ããã¢ãã«ãæ§ç¯ããŸãã æ¬¡ã«ãé¡ãåãããã®äžã®åãèšå·ã匷調衚瀺ããŠãã¢ãã«ã®å
¥åã«éä¿¡ããŸããã¢ãã«ã¯ãããšãã°ãããã¯80ïŒ
ã幞ãã20ïŒ
ãäœãä»ã®äººã§ãããšäŒããŸãã

çšèªã«ã€ããŠè©±ãå Žåã人工ç¥èœã¯äººéã®ã¿ã¹ã¯ã«å¯ŸåŠããäœããããäžè¬çãªãããã¯ã§ãã æ©æ¢°åŠç¿ã¯AIã®äžéšã§ããã¢ã«ãŽãªãºã ãç§ãã¡ã«ãã£ãŠæžãããŠããªãå ŽåãããŒã¿åŠçã«åºã¥ããŠæžãããŠããŸãã ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãæ©æ¢°åŠç¿ã®1ã€ã®ç¹å®ã®ã±ãŒã¹ã§ãã ãŸãããã¥ãŒã©ã«ãããã¯ãŒã¯ã®å
éšã§ã¯ããã¡ãã·ã§ããã«ãªçšèªã§ããããã£ãŒãã©ãŒãã³ã°ããããã¥ãŒã©ã«ãããã¯ãŒã¯ãæ·±ãå Žåã«åºå¥ãããŸãã äžè¬ã«ãå€ãã®è€éãªã¿ã¹ã¯ã¯ãã®éåžžã«ãæ·±ãåŠç¿ãã®å©ããåããŠæ£ç¢ºã«è§£æ±ºãããããããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯æ®ãã®ã¢ã«ãŽãªãºã ãæ··éãããŠããŸãã

ããŒã«ã«é¢ããŠïŒãã£ãŒãã©ãŒãã³ã°ãè¡ã人ã
ã¯ã©ã®ããã«çããŸããïŒ PythonãšRã®2ã€ã®èšèªããããŸããPythonãããŒã¿ãµã€ãšã³ãã£ã¹ãã«äººæ°ãåããã®ã¯ãªãã§ããïŒ ãã¡ãããC ++ã§æžãããéåžžã«åªããã©ã€ãã©ãªã倿°ãããŸããïŒããã§ãªããã°é
ãã®ã§ïŒãPythonã«ã¯éåžžã«åªããã©ãããŒããããŸãã ãããã£ãŠãPythonãããŸããŸãªã©ã€ãã©ãªã®æ¥çå€ãšããŠäœ¿çšãããšäŸ¿å©ã§ããããšãããããŸããã ãŸããæ©æ¢°åŠç¿çšã®ã©ã€ãã©ãªããã§ã«å€æ°ãããããããããéžæããŠäœ¿çšãéå§ã§ããããã«ãªããŸããã
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã§ãåãã§ãã 誰ããã©ã€ãã©ãªãå®è£
ãå§ãããšããããã¹ãŠã®ããŒã¿ãµã€ãšã³ãã£ã¹ããPythonã§èšè¿°ããŠããããããã¹ãŠã®ã©ã€ãã©ãªãPythonã§äœæããå¿
èŠããããŸããããšèããŸããã ãã®ãããPythonããµããŒãããã©ã€ãã©ãªã倿°ãããŸããã Microsoftã§ããCNTKã©ã€ãã©ãªã®PythonãµããŒããäœæããŸãããã.NETã¯é·ãéãµããŒãããŸããã§ããã
Rèšèªã§ã¯ãããã«è峿·±ãããšããããŸããRã«ã¯ãæ¢æã®å
æ¬çãªRã¢ãŒã«ã€ããããã¯ãŒã¯ããããããããå Žé¢ã§æ¢è£œã®ã©ã€ãã©ãªããããããããŸãã ãã®èšèªãšä»ã®10äžã®ã©ã€ãã©ãªãåŠã¶å¿
èŠããããŸãã
ãããŠãããã«ééããããšããªã人ã¯ã©ãã§ããïŒ

äžæ¹ã§ã¯ãå匷ã«è¡ãããšãã§ããŸãããããããããŸããã ç§ã¯ãã¥ãŒã©ã«ãããã¯ãŒã¯ã䜿çšããå¿
èŠããããããPythonã䜿çšããå Žåãããã»ã©å«æªæãæããããšã¯ãããŸãããããããè¡ãã®ã¯å°é£ã§ãã åä»ããããçŸãã.NETèšèªã®åŸããã¹ãŠãéå§ãããšãã«ãšã©ãŒããã§ãã¯ãããæç¢ºã«ãããåä»ããããŠããªãèšèªã«åãæ¿ããããšã¯ãå¿ççã«éåžžã«å°é£ã§ãã æã®ãªãããã°ã©ãã³ã°ã®ãããªæèŠã
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®æ©æ¢°åŠç¿ãšãã¬ãŒãã³ã°ã®åé¡ã解決ããããã«ã.NETã®äžçã«ã©ããªããŒã«ãããã®ãââèŠãŠã¿ãŸãããã

ãäžè¬çã«ãèªåã§äœããæžãã®ã¯é£ããã§ããïŒããšãã質åããå§ããŸãããã ç°¡åãªå Žåã¯ã©ããªããŸããïŒã

ãããŠããã®ãããªå€å
žçãªã¿ã¹ã¯ãåããŸãããïŒææžãæ°åèªèã ç±³åœçµ±èšå±ã®äžéšã®åŸæ¥å¡ãæžãã50,000ã70000ã®ææžãæ°åã®ã©ããã«æ¢è£œã®ããŒã¿ã»ããããããŸãã ãã®ããŒã¿ã¯å
¬éãããŠããã28 x 28ãã¯ã»ã«ã®ç»åãšããŠè¡šç€ºãããŸãã ãã®äœæ¥ã¯ããã»ã©é£ãããªãããã«æããŸãããäžæ¹ã§ãããŸãã«ãåçŽã§ã¯ãªããäžéšã®ããã¡ãã¯ãŸã£ãããªããã¢ã¹ã¯ã¯ã®ã¢ããŒãã®äŸ¡æ Œãäºæž¬ããŠããŸããã 圌女ã«ã¢ãããŒãããæ¹æ³ã¯ããŸãæç¢ºã§ã¯ãããŸããã ãã®åé¡ãã©ã®ããã«è§£æ±ºããã©ã®ããã«å¹ççãã€é©åã«è§£æ±ºã§ããããèŠãŠã¿ãŸãããã
é ã«æµ®ãã¶æãç°¡åãªè§£æ±ºçã¯äœã§ããïŒ 50,000ã®äŸãããã誰ããæ°åãæžããŠããã®æ°åã¯äœã§ããïŒããšèšããŸãã 50,000åãã¹ãŠãšåçŽã«æ¯èŒããŠãæãé©åãªãã®ãéžæã§ããŸãã æ¯èŒããæ¹æ³ã¯ïŒ ãã¯ã»ã«åäœã®æããã®éããèæ
®ããããšãã§ããŸãã

ãã®ãããªã¢ã«ãŽãªãºã ã¯ãKã1ã§ãããKæè¿åããšåŒã°ããŸããããã°ã©ãã³ã°ãå°é£ãã©ãããèŠãŠã¿ãŸãããã

åæã«ããã¹ãŠã®ããŒã¿ãµã€ãšã³ãã£ã¹ãã䜿çšããåªããããŒã«ã§ããJupyter Notebookã玹ä»ããŸãã ããã¯ãWebäžã®ããã°ã©ã ããã¹ããšmarqdownã§èšè¿°ãããããã¹ããçµã¿åãããããšãã§ããéåžžã«äŸ¿å©ãªããŒã«ã§ãã ãããªæãã§ãã

ããã¹ãã»ã«ããããå®è¡ã§ããã³ãŒãã»ã«ããããŸãã Jupyter Notebookã¯Pythonã®äžçã®ããŒã«ã§ãããããPythonãšRãååã«ãµããŒãããŸãããCïŒãFïŒãPrologãªã©ã®ä»ã®èšèªã®ãµããŒãã远å ã§ããŸãã åæã«ããã€ã¯ããœããã¯æ¬¡ã®ããã«è¿°ã¹ãŠããŸããããããã®JupyterããŒãããã¯ãã¯ã©ãŠãã§äœ¿çšã§ããããã«ããŸããã ãããèªåã§ã€ã³ã¹ããŒã«ããå Žåã¯ãã³ã³ãã¥ãŒã¿ãŒã«PythonãJupyterãã€ã³ã¹ããŒã«ãããã¹ãŠå®è¡ããŠãããã©ãŠã¶ãŒã§éãå¿
èŠããããŸãã ãŸããMicrosoftã¯æ¢è£œã®ããŒãããã¯ãã¯ã©ãŠãã§æäŸããŠããŸããnotebooks.azure.comã«ã¢ã¯ã»ã¹ããŠäœæ¥ãéå§ã§ããŸããMicrosoftã¢ã«ãŠã³ãã§ãã°ã€ã³ããã³ãŒãã䜿çšããŠãããã®ããŒãããã¯ãäœæã§ããŸãã ãã®ã³ãŒãã¯ã¯ã©ãŠãã§ç¡æã§å®è¡ãããŸãããç¹å®ã®å¶éããããŸãã ããšãã°ãã¯ã©ãŠããŸãã¯GitHubããã®ç¹å®ã®å Žæããã®ã¿ããŒã¿ãååŸã§ããŸãã ãããã®MicrosoftããŒãããã¯ã¯ãPythonãRãããã³FïŒããµããŒãããŠããŸãã CïŒ-ããããFïŒãµããŒãã ãªãã§ïŒ FïŒã®æ¹ãè¯ãããã§ããïŒ
å®éãFïŒã«ã¯ããŠããªæ¢è£œã®åªãããµããŒããæ¢ã«ããããã§ãã CïŒã«ã¯ãXamarin WorkbookãšåŒã°ããåæ§ã®ããŒã«ããããŸãã ããã¯å€å°äŒŒãŠãããã³ã³ãã¥ãŒã¿ãŒäžã§ããŒã«ã«ã«æ©èœããŸãããã³ãŒããšããã¹ããçµã¿åãããããšãã§ããŸãã ã³ãŒããããã¹ããšçµã¿åããããšããã¹ãŠãäžåºŠã«æç¢ºã«ãªãããã¹ãŠã®æé ã説æããããããéåžžã«äŸ¿å©ã§ãã
ãããã®æ°å€ã®ç»åã¯ãCSVïŒã³ã³ãåºåãå€ïŒã®åœ¢åŒã§è¡šç€ºãããŸãã ããã«ãåè¡ã®æåã®èŠçŽ ã¯æžã蟌ãŸããæ°åãã®ãã®ã§ãããæ®ãã¯784åã®æ°åã®é
åã§ãããããããã察å¿ãããã¯ã»ã«ã®æããã§ãã ãããŠããã®æ°åã®è¡åã¯ãæ°åã®é·ãåã«é
眮ãããŠããŸãã FïŒã§ããããã®å€ãã€ã³ã¿ãŒãããããååŸãããã®ãããªé·ãè¡ãèªã¿åã£ãŠè¿ã颿°ã説æããŸããã

ããŠãããã§äœããããããã«ããããé
åã«å
¥ããŠ2ã€ã®éšåã«åããŸãïŒ train_sample
ããã¯ãã¬ãŒãã³ã°ãµã³ãã«ã test_sample
ããã¯æ€èšŒçšã§ãã éåžžã50,000ã®ãã¬ãŒãã³ã°ãšæ°åã®ãã¹ãã宿œããŸãã ãããŠããããã䟿å©ãªåœ¢ã«ããŸãããã¢ã§æç€ºããŸãã ãã¢ã§ã¯ãæ°åãšæ®ãã®ãã¯ã»ã«ã®é
åããããŸãã ãããŠããã®ãããªã«ããã«ããããããããŸãã
次ã«ãã©ã®ããã«ããŠæãè¿ããã®ãèŠã€ããã®ã§ããããïŒ æãè¿ããã®ãèŠã€ããããã«ãè·é¢ã決å®ããå¿
èŠããããŸãã è·é¢ã決å®ããããã«ãè·é¢é¢æ°ã説æããŸãããã®é¢æ°ã¯ãã€ã¡ãŒãžãå«ã2ã€ã®é
åãåãåãããããã®é
åãå埩åŠçããå¹³æ¹ã®å·®ãšåèšãèæ
®ããŸãã ã€ãŸããããã¯ãã«ã«ãè·é¢ã§ãããåã«ã«ãŒããæœåºããŸããã è¿æ¥æ§ã瀺ããŸããé
åãåãå Žåã¯ãŒãã瀺ããå°ãç°ãªãå Žåã¯ããã€ãã®æ°ããããŸãã ãããŠã察å¿ããæ°åãèŠã€ããããã«ããã¹ãŠã®train_data
- train_data
ãååŸãããããã®ã©ããæå°è·é¢ã§ããããæ¢ãã察å¿ããæ°åãååŸããŸãã ã³ãŒãã¯ç°¡åã§ãã ããã«éå§ãããšããã¹ãŠãæ©èœããŸãã

ãã¹ãããŒã¿ãååŸããŸãã ãã®å Žåãäžäœ3ã€ã®ãšã³ããªãååŸããŠèªèããããšããŸãã8ã¯8ã7ã¯7ã2ã¯2ãšããŠèªèãããŸããããã¯è¯ãããšã§ãåžæãåŒã³èµ·ãããŸãã ãã¹ããµã³ãã«å
šäœãããã«èª¿ã¹ããšã94ïŒ
ã®æ£ããèªèãåŸãããŸãã ããã¯ãååãšããŠéåžžã«åªããŠããŸãã
94ïŒ
-ã»ãã®æ°è¡ããæžããŠããŸãããããã以äžã»ãšãã©äœãã§ããŸããã

ãããŠãCïŒã§åãããšããããå Žåã¯ïŒ
誰ããç¥ããªãå Žåã¯è¡šç€ºããŸãã Visual Studioã«ã¯ãCïŒInteractiveãšããåªããããŒã«ããããŸãã ããã¯ã次ã®ããã«CïŒãçŽæ¥å®è¡ã§ããã³ã³ãœãŒã«ã§ããããã¹ããéžæããããŒãæŒããšãã³ã³ãœãŒã«ã§å®è¡ãããŸãã CïŒã§åãããšããããå Žåãã©ã®ããã«ãªããŸããïŒ
#r "SciSharp.dll" using SciSharp; using static System.Console; class Digit { public int[] Image; public int Label; } var fn = @"train.csv"; var f = File.ReadLines(fn); var data = from z in f.Skip(1) let zz = z.Split(',').Select(int.Parse) select new Digit { Label = zz.First(), Image = zz.Skip(1).toArray(); }; var train = data.Take(10000).toArray(); var test = data.Skip(10000).Take(1000).toArray(); Func<int[ ],int[ ],int> dist = (a, b) => a.Zip(b, (x, y) => { return (x - y); } ).Sum(); Func<int[ ], int> classify = (im) => train.MindBy(d => dist(d.Image, im)).Label; int count = 0, correct = 0; foreach (var z in test) { var n = classify(z.Image); WriteLine("{0} => {1}", z.Label, n); if (z.Label == n) correct++; count++; }
以äžã§ãã ãã®åŸãå®è¡ããŠçµæã楜ããããšãã§ããŸãã æ°åã¯ãã£ãããšèªèãããŸããããã¯ãæ°åããšã«50,000ã¬ã³ãŒãïŒãã®å Žåã¯50,000ã¬ã³ãŒãã§ã¯ãªãã10,000ã¬ã³ãŒãïŒã調ã¹ãå¿
èŠãããããã§ãã ãããã£ãŠãå®éã®äœ¿çšã§ã¯ããã®ãããªã¢ã«ãŽãªãºã ã¯ããŸãé©ããŠããŸããã ããã«æžããŸããããããã»ã©æªãã¯ãããŸããããéåžžã«é
ãã§ãã äžè¬ã«ãæ©æ¢°åŠç¿ãé«éã§åäœããã¢ãã«ãæ§ç¯ããããã»ã¹ã®æ¬è³ªãã«ãã»ã«åããã®ã¯çŽ æŽãããããšã§ãããã¹ãŠã®ãœãŒã¹ããŒã¿ãšæ¯èŒãããã³ã«ã§ã¯ãããŸããããããçšåºŠã®èŠåæ§ããããŸãã ãããã£ãŠããã¡ãããä»ã®ã¢ã«ãŽãªãºã ã䜿çšããããšããå§ãããŸãã

ãããã£ãŠãã¹ã ãŒãºã«æ¬¡ã®ãšããœãŒãã«é²ã¿ãŸãã

èªåã§ããã°ã©ã ãäœæããªãããã«ããã«ã¯ãæ¢è£œã®ã©ã€ãã©ãªããããã©ããã確èªããå¿
èŠããããŸãã ããã§ã.NETã«ã¯Accord.NETãšåŒã°ããåªããã©ã€ãã©ãªãããããšãããããŸããã

æ©æ¢°åŠç¿ãè¡ãã«ã¯ããããªãã¯ã¹ãçµ±èšãããã³ããŸããŸãªçµ±èšé¢æ°ãé©åã«åŠçã§ããå¿
èŠããããŸãã ãŸããAccord.NETã«ã¯é¢é£ããèŠçŽ ãå«ãŸããŠããŸãã çµ±èšãæ
åœãããã©ã°ã¡ã³ãããããéºäŒçã¢ã«ãŽãªãºã ããã¥ãŒã©ã«ãããã¯ãŒã¯ãé³ã®åŠçãç»åãæ
åœããã¢ã«ãŽãªãºã ããããŸãã ã°ã©ããäœæã§ãã䟿å©ãªæ©èœããããŸãã ããŒã¿ãµã€ãšã³ãã£ã¹ãã¯ãå€ãã®å ŽåãããŒã¿ãçžäºã«ã©ã®ããã«äŸåããŠãããã確èªããå¿
èŠããããŸãã
ãã®ããã«ããã§ã«ããã°ã©ã ãäœæããŸããWriteLineãæžã蟌ãŸããŠãããããªç©ºçœããããŸãã ããã¯ããã§ã«ååšããŠããã®ãšåãã³ãŒãã§ãã 圌ã¯ãã¹ãŠã®ããŒã¿ãç§ã«èªã¿ããã¹ããšãã¬ãŒãã³ã°ã®ãµã³ãã«ã«åå²ããŸãã ãããŠãAccord.NETã䜿çšããŠããããã®æ°åãç»é¢ã«æç»ããŸãã ãã®ãããªçŸãã颿°ããããŸã-ImageBox.Showã䜿çšãããšãäœããæç»ã§ããŸãã
#r "SciSharp.dll" using SciSharp; using static System.Console; class Digit { public int[] Image; public int Label; } var fn = @"train.csv"; var f = File.ReadLines(fn); var data = from z in f.Skip(1) let zz = z.Split(',').Select(int.Parse) select new Digit { Label = zz.First(), Image = zz.Skip(1).toArray(); }; var train = data.Take(10000).toArray(); var test = data.Skip(10000).Take(1000).toArray(); for (int i = 0; i < 5; i++) { ImageBox.show(train[i].Image.Select(x => x / 256.0).toArray(), 28, 28); }
次ã«ãäœããã®åŠç¿ã¢ã«ãŽãªãºã ããããã«é©çšããŸãã ãŸããåãKNearestNeighborsåé¡åã ã¢ã³ãŒãã§ã¯ã©ã®ããã«èŠããŸããïŒ
var classifier = new KNearestNeighbors(1); classifer.Learn( (from x in train select x.Image.Select(z=>(double)z).toArray()).toArray(), (from x in train select x.Label).toArray());
ãKã1ã®KNearestNeighborsåé¡åšãäœæãããããšåçŽã«èšããŸãã ãšããã§ãKNNã¢ã«ãŽãªãºã ã§ã¯ããã®Kã¯ã©ãããæå³ã§ããïŒ äžè¬çãªå Žåãæãè¿ãçªå·ãååŸããã ãã§ãªããããšãã°ãæãè¿ã5ã€ã®çªå·ãååŸãããã®äžã§æãé »ç¹ã«çºçããçªå·ãæ¢ããŠããŸãã 4ã¯3åã2åã¯1ã®ããã«ãªããŸãããããŠã4ãåããŸãããã®ã¯ã©ã¹ãå¢ãããšãèªèãå°ãè¯ããªããŸãããå¹çã倧å¹
ã«äœäžããŸãã ãããã£ãŠã1ãåãããClassifier.Learnã åŠãã§ãã ãããã ãããŠã圌ã«ããŒã¿ãæž¡ããŸãã ãã®å Žåãç»åãããªãã¯ã¹ãšå¯Ÿå¿ããæ°åã®ãããªãã¯ã¹ãå¥ã
ã«éä¿¡ããå¿
èŠããããããããŒã¿ãã«ããããå¿
èŠããããŸããã ãã®ã¢ã³ãŒãã¯ã2ã€ã®é
åãæž¡ãããããã«é
眮ãããŠããŸãã
次ã«ããããã©ã®ããã«æ©èœããããèŠãããšãã§ããŸãã
foreach (var z in test) { var n = classifer.Decide(z.Image.Select(t=>(double)t)).toArray()); WriteLine("{0} => {1}", z.Label, n); if (z.Label == n) correct++; count++; }
ããã¯ä»¥åèŠããã®ããå°ãéãåäœããããã§ãããããã»ã©å€ãã¯ãããŸããã 5,000æ¡åŸ
ã€ãšãååã«é·ããªããŸãã ãã ããåãã¢ã«ãŽãªãºã ã䜿çšãããããèªèã®ç²ŸåºŠã¯ãŸã£ããå€åããŸããã ããããç§ãã¡ã¯æåã§ãããæžããã®ã§ã¯ãªãã宿ããå®è£
ãåããŸããã
ãªããã®ã¢ãããŒãã¯è¯ãã®ã§ããïŒ ããã§ã代ããã«ä»ã®åé¡åã䜿çšã§ããŸãã ããšãã°ããã®åé¡åãåé€ããããããåé¡åãµããŒããã¯ã¿ãŒãã·ã³ã䜿çšããŸãã ããã¯ãç°ãªãã¯ã©ã¹ã®ã¢ã«ãŽãªãºã ã§ãã
var svm = new MuliclassSupportVectorLearning<Linear>(); var classifier = svm.Lean( (from x in train select x.Image.Select(z=>(double)z).toArray()).toArray(), (from x in train select x.Label).toArray());
圌ãã¯ã©ã®ããã«é
眮ãããŠããŸããïŒ æ©æ¢°åŠç¿ã®èгç¹ã§ã¯ããã®ã¿ã¹ã¯ã¯åé¡åé¡ãšåŒã°ãããªããžã§ã¯ããããã10ã®ã¯ã©ã¹ã®ããããã«å²ãåœãŠãå¿
èŠããããŸãã ãããŠãããã§ã¯ãµããŒããã¯ã¿ãŒãã·ã³ããããã®ã¯ã©ã¹ãåããŸãã ããããç¶æ
空éã§äœããã®ã°ã©ãã£ãã¯åœ¢åŒã§æç€ºãããå Žåãããã¯ããã¹ããããã€ãã®å€æ¬¡å
ãã€ã³ãã®é²ã«ãªããŸãã 784ã®æ¬¡å
ãæã€ç©ºéå
ã®ãã€ã³ããæ³åããŠãã ãããåãã€ã³ãã¯ããããã®æ°åã«å¯Ÿå¿ããŠããŸãã 圌ãã¯äœãšãåé¢ããå¿
èŠããããŸãã ãµããŒããã¯ã¿ãŒãã·ã³ã¢ã«ãŽãªãºã ã®ã¢ã€ãã¢ã¯ããããã®ã¯ã©ã¹ã®èŠçŽ ããå¯èœãªéãé¢ããå¹³é¢ãæ§ç¯ããããšã§ãã ããããçç¥ããããã®ã®åç·ã«é¢ããŠåå²ããã®ãæåã§ãã ã€ãŸããåé¡ã¿ã¹ã¯ã¯ãæé©ã«åé¢ãããå¹³é¢ãæ§ç¯ããã¿ã¹ã¯ã§ãã ãã®å¹³é¢ã«æãè¿ãç¹ããåç·ãèŠãŠããã®è·é¢ãæå°åãããšããµããŒããã¯ã¿ãŒãã·ã³ã¯å¯Ÿå¿ããå¹³é¢ãæç»ããŸãã
2è¡ã ãã眮ãæããŸããã å®éãã¢ã«ãŽãªãºã ã®ååã¯å€æŽãããŠããŸãã
å®è¡ãããšãã¢ã«ãŽãªãºã ã¯ãã°ããåŠç¿ããŸãã ããã§ã®ç¶æ³ã¯ãããæå³ã§ã¯ãç§ãã¡ãèŠããã®ã®å察ã§ãã åã®ã¢ã«ãŽãªãºã ããã¬ãŒãã³ã°ãããŠããªãã£ãããããã«çªå·ãåé¡ããæºåãã§ããŠããããåé¡ããã»ã¹ã§äœæ¥èªäœãè¡ãããããã«éåžžã«é·ãéè¡ã£ãå Žåããã®ã¢ã«ãŽãªãºã ãæåã«ãã¬ãŒãã³ã°ãããŸãã 圌ã¯ãããã®è¶
å¹³é¢ã®ä¿æ°ãéžæããŸãã ãããŠã圌ããããããŠããéãäžå®ã®æéãçµéããŸãã ãããã圌ã¯ããã«èªèãå§ããŸãã éåžžã«é«éãªã®ã§ããããã®éåžžã«1000ãŸãã¯5000ã®ãã¹ãããŒã¿ããã¹ãŠèšç®ãããæ¹æ³ãæ°ç§ã§ç¢ºèªã§ããŸãã ãããŠã粟床ã¯çŽ91.8ïŒ
ã§ãããäœãããšãããããŸãã

ã¢ã³ãŒãã®ã¡ãªããã¯äœã§ããïŒ ããŸããŸãªã¢ã«ãŽãªãºã ãããã詊ããŠã¿ãã®ã¯éåžžã«ç°¡åã§ããã³ã³ã¹ãã©ã¯ã¿ãŒã眮ãæããã ãã§ãããã¢ã«ãŽãªãºã ãå¥ã®ã¢ã«ãŽãªãºã ã«çœ®ãæããããšãã§ãããã®åäœåçã¯éåžžã«äŒŒãŠããŸãã æ©æ¢°åŠç¿ã®èª²é¡ã«çŽé¢ããŠããå Žåãããã¯å§ããããã®è¯ã第2ã¹ãããã§ãã æåã®ã¹ãããã¯ãMicrosoftã¯ã©ãŠãã§ã®Azure Machine Learningã§ããããã°ã©ãã³ã°ã¯äžåå¿
èŠãããŸããã ããã§ãããŒã¿ãèŠèŠçã«ç°¡åã«è©Šãããšãã§ããŸãã ãããŠã.NETãç¥ã£ãŠãã人ã®ããã®2çªç®ã®ã¹ãããã¯Accord.NETã§ãã

SciPyãScikit-learnã®ãããªããããçš®é¡ã®ã©ã€ãã©ãªãPythonã§äœ¿çšãããåéã§ã¯ã.NETã®äžçã®é¡äŒŒç©ã¯Accord.NETã§ããããšãçè§£ããŠããŸãã
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã«ç§»ããŸãããã

ãã¥ãŒã©ã«ãããã¯ãŒã¯ãšã¯äœãã«ã€ããŠå°ã話ããŸãããã ããªãããããã«ã€ããŠç¥ãå¿
èŠãããæãéèŠãªããšã¯ãè¿å¹Žãå€ãã®äººããã¥ãŒã©ã«ãããã¯ãŒã¯ãAIäžè¬ã®å矩èªãšèŠãªããŠããããšã§ãã 人ãã人工ç¥èœããšèšããšãããã«é ã®äžã«ãã¥ãŒã©ã«ãããã¯ãŒã¯ãçŸããŸãã Microsoftã®ãã¹ãŠã®èªç¥ãµãŒãã¹ã¯ãã¥ãŒã©ã«ãããã¯ãŒã¯ã«åºã¥ããŠãããéæ³ã®ããã«èŠããŸãã æ³åããŠã¿ãŠãã ãããããªãã圌女ã«åçãæž¡ããšã圌女ã¯è±èªã§äœãæãããŠãããã説æããŸãã ãããã©ã®ããã«è¡ãããšãã§ããŸããïŒ ç§ã®æèŠã§ã¯ãããã¯å¥è·¡ã§ãã

ããããåæã«ãæ°åŠçãªèгç¹ããããã®å¥è·¡ã¯ãéåžžã«å€æ¬¡å
空éå
ã®ç¹å®ã®ç¹çŸ€ãæé©ã«è¿äŒŒãã颿°ãæ§ç¯ããæ¹æ³ã«ãããªãããšãçè§£ããŠããŸãã ã€ãŸãããã®ãããªå¥åŠãªç¶æ³ã倿ããŸããäžæ¹ã§ãæ°åŠã®èгç¹ããã¯ãå¥åŠãªããšã¯äœãèµ·ãããŸããã ãã¹ãŠãéåžžã«æç¢ºã«æããŸãã ãããŠä»æ¹ã§ã¯ãäœããã®çç±ã§ããã¯ãã®ãããªè峿·±ãåé¡ã解決ããŸãã
ç§ã¯æè¿ãå€ãã²ã©ãç ãå§ããŸãããããããŠãç§ã®è³ãããã§ããïŒ ãã¶ã圌ã¯é¢æ°ãè¿äŒŒããŠããã ããããããŸãããïŒã
ãã¹ãŠãéæ³ã®ããã«èŠããŸãã ç»åãããã¹ãã«å€æãããªã©ã®æ·±å»ãªã¿ã¹ã¯ã«ã¯ãéåžžã«å€§ããªã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãå¿
èŠã§ããããšãçè§£ããããšãéåžžã«éèŠã§ãã ããã¯ããããã¯ã©ãŠããŸãã¯åŒ·åãªãããªã«ãŒãã®ããããã§ãããæå·é貚ã¯ãã§ã«ãã¹ãŠã賌å
¥ããŠããããããã§ã«å©çšã§ããªããªã£ãŠããŸãã ãããŠããããæ²ããã§ãã ããããè»ã¯ã¯ã©ãŠãã«æ®ããŸããã

ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ã©ã®ããã«é
眮ãããŠããŸããïŒ ãã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãããæå³ã§ã建ç¯ã«ããã人éã®è³ã«äŒŒãŠããŸãã 人éã®è³ã«ã¯ãäºãã«æ¥ç¶ããããã¥ãŒãã³ããããåŠç¿ããã»ã¹ã«ããããããã®æ¥ç¶ã¯ãäŒå°çãéã¿ãå€åãããŸãã ãããã£ãŠããœãããŠã§ã¢ã®èгç¹ãããç¹å®ã®æ°ã®å
¥åãããããããããäœããã®çš®é¡ã®æ°å€ãæã€å¯èœæ§ãããèšèšãååŸããŸãã æ¬¡ã«ãããã€ãã®äžéå±€ããããŸããããšãã°ãå
¥åãããã®åã®å±€ããä¿¡å·ãååŸããç¹å®ã®éã¿ä¿æ°ã§èŠçŽããŸãã ããã§ç¹å®ã®æ°å€ãååŸããæ¬¡ã®å
¥åã¬ã€ã€ãŒããéèšãããšãçµæãšããŠäœããã®åºåãåŸãããŸãã
ããšãã°ãç«ãç¬ã®åçã®èªèåé¡ã®å Žåã ãšã³ãã©ã³ã¹ã«äœãæåºããŸããïŒ å
¥ãå£ã§åçãæåºããŸãã åå
¥åã¯åçã®å¥ã
ã®ãã¯ã»ã«ã«ãªããç«ãŸãã¯ç¬ã®2ã€ã®åºåããããŸãã ãããŠãäžå€®ã«äžå®æ°ã®ã¬ã€ã€ãŒããããŸãã
ãããŠãäœãããå¿
èŠããããŸããïŒ ãã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ããšã³ããªã®æ£ããåºå£ãæäŸããããã«éã¿ã調æŽããŸãã æåã«ç»åãæå®ããå Žåãåºåã«ä¹±æ°ã衚瀺ãããããšã¯æããã§ãã ããã«ä¿æ°ãã©ã³ãã ã ã£ãå Žåãããã¯ããã€ãã®æ°ãäžããŸãã ãããŠããããããç«ã®ããã«èŠããããã«éã¿ã調æŽããŸãããããšèšããŸãã ãã®ããã«ãããã€ãã®ã¢ã«ãŽãªãºã ã䜿çšããŸãã
ãšã©ãŒã®éäŒæã®ããã®ã¢ã«ãŽãªãºã ããããéã¿ã調æŽã§ããŸãã æ¬¡ã«ã次ã®äŸã瀺ããŸã-éã¿ãå床調æŽããŸãã ãã®ãããéåžžã«å€ãã®äŸã«å¯ŸããŠäœåºŠãäœåºŠãè¡ããŸãã æ°åŠã®èгç¹ãããããã§ã¯éåžžã«åçŽãªããšãèµ·ãããŸãã ãã®å±€ã®ãã®åºåå±€ããã¯ãã«ã§ãããšæ³åããå Žåãå®éã«ã¯ããã®å
¥åãã¯ãã«xã«äœããã®è¡åãä¹ç®ããä»ã®ã·ããã远å ããŠãããã«éç·åœ¢é¢æ°ãé©çšããŸãã å®éãåã¬ã€ã€ãŒã«å¯ŸããŠããã¯ãã«ã«ãããããªãã¯ã¹ä¹ç®ãè¡ããŸãã ãã¹ãŠãéåžžã«ç°¡åã§ãã
ãããããªãéç·åœ¢é¢æ°ã䜿çšããã®ã§ããããïŒ ç¹å®ã®ç¯å²ã®æ°å€ãååŸããããšããããŸãã ããããéåžžã«ãã©ãŒãªè°è«ããããŸãã ããã§ãªãå Žåããã¹ãŠè¡åã®ç©ã®ããã«èŠããè¡åã®ç©ã¯ä»»æã®1ã€ã®è¡åã«çžåœããŸãã å
¥åãã¯ãã«ãååŸããå Žåã1ã€ã®è¡åãä¹ç®ããæ¬¡ã«å¥ã®è¡åãä¹ç®ããŸãã2ã€ã®è¡åãåçŽã«ä¹ç®ãããã®è¡åã®ç©ã§æ°å€ãæå®ããŸãã ãããã£ãŠãéç·åœ¢é¢æ°ã远å ããŠããªããã°ãã¬ã€ã€ãŒã®æ°ã¯åœ±é¿ãåããããã¹ãŠã1ã€ã®ã¬ã€ã€ãŒã®ããã«ãªããŸãã ãããŠãéç·åœ¢æ§ã®è¿œå ã«ãããããã¯é£ç¶ããæ¡åŒµã®ããã«ãªããŸãã ãããŠããããçŽæ°å±éã®å Žåãä»»æã®é¢æ°ãè¿äŒŒã§ããŸãã ãããåœãŠã¯ãŸããªãå Žåã¯ãåžç·åœ¢å€æ§äœã®ã¿ãè¿äŒŒã§ããŸãã ãããã£ãŠãéç·åœ¢é¢æ°ã远å ããããšãéåžžã«éèŠã§ãã ããã«ãéç·åœ¢é¢æ°ãç°ãªããŸãã
以åã¯ããã·ã°ã¢ã€ãããšåŒã°ãããã®ãããªçŸããéç·åœ¢é¢æ°ãäœæããããšãæ
£ç¿ã§ããããçŸåšã§ã¯ç·åœ¢é¢æ°ã®åœ¢ã§éç·åœ¢é¢æ°ãäœæããããšãæµè¡ã«ãªã£ãŠããŠããŸãã ããã¯ååç·åœ¢ã§ãïŒããã¯0ãã倧ããç·åœ¢ã§ããã0ããå°ããç·åœ¢ã¯0ã§ãããªãã§ããïŒ å®è£
ã«å¹æçã ããã§ãã ãã®æŽŸçç©ã¯ç°¡åã§ãããšèããããŸãããããã¯æªã掟çç©ã§ãã ãã ãããã®ãããªæ©èœã¯ãã䜿çšãããŸãã

ãã¥ãŒã©ã«ãããã¯ãŒã¯ãå®è£
ããã«ã¯ã©ãããã°ããã§ããïŒ æåã§ããã°ã©ã ããããšãã§ããŸããããã®ã¿ã¹ã¯ã¯ããã»ã©é£ããã¯ãããŸããããããŸãå¿«é©ã§ã¯ãããŸããã ããã«éèŠãªã®ã¯ãGPUã§ããããã¹ãŠèšç·Žãããã®ã§ãããŸãããã°ãéã®è¡åã®ã°ã©ãã£ãã¯ä¹ç®ãåŠç¿ããå¿
èŠããããŸã-ããã¯ãã¹ãŠé£ãããªããŸãã
ãããã£ãŠãéåžžãæ¢æã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãã Googleã®TensorFlowããããŸããããã¯äž»èŠãªç«¶åã§ããã誰ããäž»ã«äœ¿çšããŠããŸãã ä»ã«ãããã€ããããŸãã

ã¢ã³ãŒãã«ã¯ãã¥ãŒã©ã«ãããã¯ãŒã¯ããããŸãããã®ã¢ã«ãŽãªãºã ã䜿çšããŠå€æŽããã ãã§ãããã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãååŸã§ããŸãã ãã¹ãŠãå°ãç°ãªããŸãã
var nn = new ActivationNetwork(new SigmoidFunction(0.1), 784, 10); var learn = new BackPropagationLearning(nn); nn.Randomize(); WriteLine("StartingLearning"); for (int ep=0; ep<50, ep++) { var err = learn.RunEpoch((from x in train select x.Image.Select(t=>(double)t/256.0).toArray(), (from x in train select x.Label.ToOneHot10(10).ToDoubleArray()).toArray() ) WriteLine($"Epoch={ep}, Error={err}"); } int count=0, correct=0; foreach (var v in test) { var n = nn.Compute(v.Image.Select(t=>(double)t/256.0).toArray()); var z = n.MaxIndex(); WriteLine("{0} => {1}"), z, v.Label); if (z == v.Label) correct++; count++; } WriteLine("Done, {0} of {1} correct ({2}%)", correct, count, (double)count * 100);
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã«ã¯ãã®ãããªåé¡ããããŸãããããè¡ããšãããŸããŸãªãã¬ãŒãã³ã°ãã©ã¡ãŒã¿ãŒããããããåžžã«ããŸãæ©èœãããšã¯éããŸããã ãã®å Žåãããã¯ãŸãã«ãã®ã¢ã¯ãã£ããŒã·ã§ã³é¢æ°ã®å¹
ã§ãã 0ãã1ã«ããã®ã¯ããŸãè¯ããããŸããã-1ãã1ã«ããã»ããè² ã®ãŸãŒã³ã«ããæ¹ãè¯ãã§ãããã ããšãã°ã颿°ãç·åœ¢ã§ã¯ãªããåç·åœ¢ã§ããå Žåãè² ã®ãŸãŒã³ã«ããããšãéèŠã§ãã 埮åŠãªéãããããŸãã ãããŠãæåã®è©Šã¿ã¯åžžã«æåãããšã¯éããŸããã
ãã¬ãŒãã³ã°ã®å段éã§ãæ®ã£ãŠããééããå°å·ããŸãã åºå£ãå¿
èŠãªãã®ã«è¿ã¥ããŸãããåæã«äœããã®ééããäŸç¶ãšããŠååšããåŠç¿ããã»ã¹ã¯åžžã«æžå°ããŸãã ããããæã
ããã¯å¢å ãå§ããŸã-ããã¯ãããããäœããééã£ãŠãããšãã確ããªå
åã§ããããã§ã«ãã¬ãŒãã³ã°ã忢ãã䟡å€ããããŸãã ãŸããåãã¬ãŒãã³ã°ã®åé¡ããããŸãããããã¯ãŒã¯ãåãã¬ãŒãã³ã°ããããšãäºæž¬ãæªåãå§ããŸãã
ããšãã°ãäžèšã®ã³ãŒãã®ãã¹ããå®è¡ãããšã88.3ïŒ
ãåŸãããŸãã ããã¯ããŸãè¯ããããŸããããããã»ã©æªãã¯ãããŸããã
ãããããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ä»¥åãããã¯ããã«åªããŠããããšãããããŸãã
ãããããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯Accordã§æããããšãã§ããŸãããå¿
èŠã§ã¯ãããŸãããããåªããå°çšã®ãã¬ãŒã ã¯ãŒã¯ãããããã§ãã
Microsoft Cognitive ToolkitããªããããçŸããã®ã§ããïŒ GPUãGPUã³ã³ãã¥ãŒã¿ãŒã®ã¯ã©ã¹ã¿ãŒã§äœ¿çšã§ããŸã-ããããã±ãŒã¹ã§ã ããã«ããªãŒãã³ãœãŒã¹ã§ãããè¿
éãã€ç©æ¥µçã«éçºãããŠããŸãã ããšãã°ã9æãŸã§ã.NETã§ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®ãã¬ãŒãã³ã°ã¯èš±å¯ãããŠããŸããã§ããããçŸåšã¯èš±å¯ãããŠããŸãã

æåã¯ã2ã€ã®ãã¬ãŒãã³ã°ã¢ãŒãããããŸããããããã¯ãŒã¯ã¢ãŒããã¯ãã£ãBrainScriptãšåŒã°ããç¹å¥ãªèšèªã§èšè¿°ãããœãŒã¹ããŒã¿ãšãã®ã¹ã¯ãªãããã³ãã³ãã©ã€ã³ã§ãŠãŒãã£ãªãã£ã«éããããã¥ãŒã©ã«ãããã¯ãŒã¯ãæããŠãã ããããšèšãããšãã§ããŸããã ããã¯ãã¹ãŠã³ãã³ãã©ã€ã³ã§è¡ãããã¢ãã«ãã¡ã€ã«ãæžã蟌ãŸããŸãããããã¯ãCïŒãPythonãªã©ã®ãããžã§ã¯ãããååŸããŠäœ¿çšã§ããŸãã
ãããããã®åŸããŸãã§ãã¡ãã·ã§ã³ã®æç€ºã«åŸããã®ããã«ã圌ãã¯åŠç¿ããã»ã¹ãPythonã«ç§»ããŸããã å®éãããã¯ããã»ã©æªãã¯ãããŸããããã¹ãŠãããæè»ã«ãªãããããã¯ãŒã¯ã®ç°ãªãèžè¡çãªã¢ãŒããã¯ãã£ãäœæã§ããæ°ããèšèªã®BrainScriptãåŠã¶å¿
èŠããªãããã§ãã ãããã2017幎9æãŸã§ã¯ãCNTKã䜿çšããäž»ãªã¢ãŒãã¯æ¬¡ã®ãšããã§ãããPythonã§æããŸããã.NETã§äœ¿çšã§ããŸãã
ããããäœããã®ãããžã§ã¯ããè¡ã£ãŠçµæã顧客ã«èŠããããšãã¯åžžã«ããã¥ãŒã©ã«ãããã¯ãŒã¯ããããã§ã©ããããŸãã æ¬¡ã«ãåçãæ®åœ±ãããšããããã¯ãŒã¯ãçµæãçæããŸãã ãããã¯CïŒã§èšè¿°ãããŠããããã¥ãŒã©ã«ãããã¯ãŒã¯èšç®ãç°¡åã«çµ±åã§ãããã¬ãŒãã³ã°ã¯åžžã«Pythonãšã¯ã©ãŠãå
ã®ä»®æ³ãã·ã³ã§è¡ãããŠããŸãã

ã¯ã©ãŠãã詊ããŠã¿ããå Žåã¯ãã¯ã©ãŠãã«Data Science Virtual MachineãšåŒã°ããæ¢è£œã®ãã·ã³ããããŸãã äœæãããšãäž»ã«Pythonã§å¿
èŠãªãœãããŠã§ã¢ããã¹ãŠã€ã³ã¹ããŒã«ãããŠãããã·ã³ãããããŸãã

å°ãç¹°ãè¿ããŸãã以åããã¬ãŒãã³ã°ã®ã¡ã€ã³ã¢ãŒãã¯ããã§ãããBrainScriptãŸãã¯Pythonã䜿çšããŠãã¥ãŒã©ã«ãããã¯ãŒã¯ããã¬ãŒãã³ã°ãããã¡ã€ã«ãååŸããŠãã.NETãã䜿çšããŸãã ãããŠãããã¯ãã¹ãŠC ++ã©ã€ãã©ãªã®äžã§åäœããŸãã ãããšãå¥ã®äž¡æ¹ïŒãã¬ãŒãã³ã°ãšèšç®ã®äž¡æ¹ã
9æã«ããã¬ãŒãã³ã°ããµããŒãããããã«ç¹å¥ãªAPIã远å ãããŸããã ãªããããå¯èœã§ããïŒ ç«¶åä»ç€ŸããŸã ãªãã®ã¯ãªãã§ããïŒ

CNTKã®ä»çµã¿ãèŠããšããã®ãããªã©ã€ãã©ãªã«ã¯äœãå«ãŸããŠããŸããïŒãã³ãœã«ãšåŒã°ãããããã®è¡åãæ±ãã«ã¯ãç¹å®ã®äœã¬ãã«ããããŸããããã¯ãéåžžã«å€æ¬¡å
ã®è¡åãæ±ãããšãå€ãããã§ããé
åã¯3次å
ã4次å
ã倿¬¡å
ãªã®ã§ããã³ãœã«ãããã§ããããããç°ãªãã¹ã©ã€ã¹ãåãããã«ãã³ãœã«ã ããä¹ç®ããå¿
èŠãããå Žåãå€ãããããããè¡ãããšãã§ããç¹å¥ãªã©ã€ãã©ãªãå¿
èŠã§ãã
CNTK , - . , : . , , , , , . - . , : , -, , , - . , transformations, - .
CNTK. â , . , , , . , , , , , . .
CNTK API , . , , : « - , -, - ». Layers API.
CNTK, C++, API Python .NET.
? TensorFlow. TensorFlow C++, , , . Python. , , , . TensorFlow .NET. , TensorFlow C#, .
Keras. TensorFlow, , , Keras , CNTK Layer API. .
Keras , CNTK . Keras, CNTK TensorFlow, - .

, CNTK .
, . ? , float, 256 â , 0 1.
#r "SciSharp.dll" using SciSharp; using static System.Console; class Digit { public float[] Image; public int Label; } var fn = @"train.csv"; var f = File.ReadLines(fn); var data = from z in f.Skip(1) let zz = z.Split(',').Select(int.Parse) select new Digit { Label = zz.First(), Image = zz.Skip(1).Select(x=>x/256f).toArray(); }; var train = data.Take(10000).toArray(); var test = data.Skip(10000).Take(1000).toArray();
, CNTK? .
DeviceDescriptor device = DeviceDescriptor.CPUDevice; int inputDim = 784; int outputDim = 10; var inputShape = new NDShape(1, inputDim); var outputShape = new NDShape(1, outputDim);
-, , CPU. , 784 â 28 28, â 10, 10 . Shape. Shape â . NDShape . .
Variable features = Variable.InputVariable(inputShape, DataType.Float); Variable label = Variable.InputVariable(outputShape, DataType.Float); var W = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, "w"} ); var b = new Parameter(new int[] { outputDim }, DataType.Float, 1, device, "b"} ) var z = CNTKLib.Times(W, features) + b;
? . ? , , . , Variables, . variable, features â , 768, , lable, 10. . . , , , , .
, â W â 10 768. 10, outputDim. . , , â Z, W + b. . ããã ãã§ã
: « , - , , ».
var loss = CNTLib.CrossEntropyWithSoftmax(z, label); var evalError = CNTKLib.ClassificationError(z, label);
, CrossEntropyWithSoftmax, , . .
, . ). Learner, Trainer. Trainer , Learner, 60 : «Trainer.Train».
.

: ? , , , , . Python? åãããã«ã Python - , . Python, C# â .

. ? . ? 1500, - . , . , . 94% .

. , , , ? â ? , .

, « ». ? , . , , . , , . . , , , , . . , , . , 98%.

- .

, . Convolution. 28 28 1 â 28 28 â 14 14 4. 4 , - , , , . , 14 14 4 7 7 8. .

- . , 5 . : « , , , ?» : « , 20 , ». , . , : « ! - !» , , .
, , , , . , , . , , , , 500-1500 , . , , , , , â . , , . , .

C#, , ( Python), â 6 . 3 , 5 5 â 32 32 . . 3 3 .
Python , , 50, 75. , , , . 0,8 , 0,4 , 0,65 . , 3-4 , .
?
:
F# API CNTK:
, , . , . â , . 4, -, 6. , Notebook' Python , . . , Coursera - .
â , , - . CNTK, , , F#. C# , F#. . , . GitHub , . , , , â 2017 C#, , , .

, , . ? .NET , . , Azure Notebooks, C# Interactive, Xamarin Workbooks â , , . , Microsoft â CNTK, C#, , . , 10-15 , .
åºåã®åã ãããããåç¥ã®ããã«ãäŒè°ãè¡ã£ãŠããŸãã .NET â DotNext 2018 Piter . 22-23 2018 -. â YouTube . .NET . èŠããã«ãç§ãã¡ã¯ããªããåŸ
ã£ãŠããŸãã