ããã«ã¡ã¯ååïŒ
ML / DLã®åéã«ãããä»åŸã®ã€ãããŒã·ã§ã³ã«é¢ããææ°ãã¥ãŒã¹ããïŒ
Nishant ShaklaããTensorflowã«ãã
æ©æ¢°åŠç¿ ã-ã¬ã€ã¢ãŠãã®æ¬ã1æã«åºèã§çºå£²äºå®
Delip RaoãBrian McMahanãã
PyTorchã§ã®èªç¶èšèªåŠç ã-å¥çŽã調å°ããã1æã«ç¿»èš³ãéå§ããäºå®ã§ãã
ããã«é¢é£ããŠãç§ãã¡ã¯åã³çã¿ã䌎ããããã¯ãã€ãŸãJavaèšèªã§ã®ML / DLããŒãã®è²§åŒ±ãªç ç©¶ã«æ»ãããã£ãã®ã§ãã ãããã®Javaãœãªã¥ãŒã·ã§ã³ãšã¢ã«ãŽãªãºã ã¯æããã«æªçã§ãããããç§ãã¡ã¯ãã€ãŠGibsonãšPattersonã®DL4Jã®æ¬ãæŸæ£ããããšã決ããŸããã仿¥å
¬éãããHumphrey Sheilã®èšäºã¯ãããããæ£ããããšã瀺åããŠããŸãã Javaèšèªãæ©æ¢°åŠç¿ã§Pythonãšæçµçã«ç«¶åããæ¹æ³ã«é¢ããèè
ã®èããç¥ãããšãã§ããŸãã
æè¿ãç§ã¯äŒæ¥ã«ãããæ©æ¢°åŠç¿ã𿷱局åŠç¿ïŒML / DLïŒã®çŸåšãšæªæ¥
ã«ã€ããŠè¬æŒããŸããã å€§äŒæ¥ã®å Žåãé©çšããããããã¯ãåé¡ã¯ãç ç©¶äŒè°ãããéèŠã§ããããšãã°ãããŒã ãšç§ãMLã䜿ãå§ããæ¹æ³ããMLãéçšäžã®ã·ã¹ãã ã«æé©ã«çµ±åããæ¹æ³ãªã©ã§ãã æ¬¡ã«ãJavaãšæ©æ¢°åŠç¿ã«é¢ããããã«ãã£ã¹ã«ãã·ã§ã³ãéå§ããŸããã
Javaèšèªã¯ãæ©æ¢°åŠç¿ã»ã°ã¡ã³ãã«ã¯å®è³ªçã«ååšããŸããã Javaã§èšè¿°ãããMLãã¬ãŒã ã¯ãŒã¯ã¯ã»ãšãã©ãããŸããïŒ
DL4Jããã
ãŸãããå人çã«ã¯ããã䜿çšãã人ã¯ããŸãã
ãMXNetã¯Scalaã«APIããããŸãããJavaã«ã¯ãããŸããããã®ãã¬ãŒã ã¯ãŒã¯èªäœã¯Javaã§æžãããŠããŸããïŒ ã Tensorflowã«
ã¯äžå®å
šãªJava APIããããŸãããJavaã¯ãšã³ã¿ãŒãã©ã€ãºéçºã«ãããŠå€§ããªã·ã§ã¢ãå ããŠããŸããéå»20幎ã«ããã£ãŠãéèãµãŒãã¹ãé»åååŒããªã³ã©ã€ã³ã¹ãã¢ãéä¿¡-ãªã¹ã-æ°žé ã«ç¶ãããšãã§ããŸãã æ©æ¢°åŠç¿ã§ã¯ããæåã®åçãã¯Javaã§ã¯ãªãPythonã§ãã å人çã«ã¯ãPythonãšJavaã®äž¡æ¹ã§ã®ããã°ã©ãã³ã°ã倧奜ãã§ããã
ãã©ã³ã¯ã°ã¬ã³ã¯è峿·±ã質åãäœæããŠèããããŠãããŸããã
JavaãMLã§Pythonãšç«¶åããå¿
èŠãããã®ã¯ãªãã§ããïŒ çå£ãªMLãµããŒããæãèµ·ããããã¿ã¹ã¯ãåŒãåããŠã¿ãŸãããïŒ
ããã¯éèŠã§ããïŒãã®ãããã¯ãæ£åœåããŸãããã 1998幎以æ¥ãJavaèšèªã¯ãã¬ãã¢ãªãŒã°ã«å«ãŸããŠããŸãããããããªããã°ãäŒæ¥ã«ã¯é²åçã§é©åœçãªã€ãã³ãã¯ãããŸããã§ããã Webãã¯ãããžãšã¢ãã€ã«ãã¯ãããžããã©ãŠã¶ãšãã€ãã£ããœãªã¥ãŒã·ã§ã³ã®æ¯èŒãã¡ãã»ãŒãžã³ã°ã·ã¹ãã ãi18nãšl10nã®ã°ããŒããªãŒãŒã·ã§ã³ãµããŒãããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ããElasticsearch
ãã®ã¬ãã«ã®ç¡æ¡ä»¶ã®ãµããŒãã¯ãJavaã³ãã³ãã§éçºãããéåžžã«å¥å
šãªæåãæäŸããŸãããã§ãããããè¢ããŸãããã³ãŒããæžããã§ãã Javaéçºè
ã®åªããããŒã ãè£è¶³ããã眮ãæãããããããšã®ã§ããªãéæ³ã®ãããªã³ã³ããŒãã³ããAPIã¯ãããŸããã
ãããããã®ååã¯æ©æ¢°åŠç¿ã§ã¯æ©èœããŸããã ããã§ãJavaã³ãã³ãã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸãã
- Pythonã§ã®åãã¬ãŒãã³ã°/åãã¬ãŒãã³ã°ã
- ãµãŒãããŒãã£APIã䜿çšããŠãæ¢åã®ãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã«æ©æ¢°åŠç¿æ©èœã远å ããŸãã
ãããã®ãªãã·ã§ã³ã¯ã©ããçã«ç¡å®³ãšã¯èšããŸããã 1ã€ç®ã¯ãäºåã«å€ãã®æéãšæè³ãå¿
èŠãšããããã«ç¶ç¶çãªãµããŒãã³ã¹ããå¿
èŠã§ãã 2çªç®ã®ãªãã·ã§ã³ã§ã¯ããµãã©ã€ã€ã«äŸåãããªã¹ã¯ããµãã©ã€ã€ã®ãµããŒãã倱ããªã¹ã¯ãããã³ãµãŒãããŒãã£ã®ã³ã³ããŒãã³ãã§äœæ¥ããå¿
èŠãããïŒåæã«ãããã¯ãŒã¯ç§»è¡ã®äŸ¡æ Œãæ¯æãïŒãé倧ãªã»ãã¥ãªãã£èŠä»¶ãååšããå¯èœæ§ãããã·ã¹ãã ã«ç§»è¡ãããªã¹ã¯ããããæ
å ±ãå
±æããå¿
èŠããããŸãçµç¹å€ã®èª°ãã«ãã£ãŠã ç¶æ³ã«ãã£ãŠã¯ãããã¯åãå
¥ããããŸããã
ãã®å Žåã®æãç Žå£çãªãã®ã¯ïŒç§ã®æèŠã§ã¯ïŒ
æåçæªåã®å¯èœæ§ã§ããããŒã ãçè§£ã§ããªãããŸãã¯ç¶æã§ããªãã³ãŒãã倿Žã§ããªããããè²¬ä»»ãææ§ã«ãªããäž»èŠãªäœæ¥ãä»ã®äººã«å§ä»»ããå¿
èŠããããŸãã Javaéçºè
ã®ã¿ã§æ§æãããããŒã ã¯ã次ã®å€§ããªæ³¢ãéããªã¹ã¯ãè² ããŸããããã¯ããšã³ã¿ãŒãã©ã€ãºã³ã³ãã¥ãŒãã£ã³ã°ãã€ãŸãæ©æ¢°åŠç¿ã®æ³¢ã«ããµããŸãã
ãã®ãããæ©æ¢°åŠç¿ã®ç¬¬äžçŽã®ãµããŒããèšèªãšJavaãã©ãããã©ãŒã ã«çŸããããšãéèŠã§ãããæãŸããã§ãã ããããªããšãä»åŸ5ã10幎ã§ãMLãããé©åã«ãµããŒããããä»ã®èšèªã«Javaã眮ãæãããªã¹ã¯ããããŸãã
ãªãMLã§Pythonãããã»ã©æ¯é
çãªã®ã§ããïŒãŸããPythonãæ©æ¢°åŠç¿ãšãã£ãŒãã©ãŒãã³ã°ã®ãªãŒããŒã«ãªã£ãçç±ã«ã€ããŠèª¬æããŸãããã
ç§ã¯ãããå®å
šã«ç¡éªæ°ãªæ©èœã§å§ãŸã£ãã®ã§ã¯ãªãããšçã£ãŠããŸã-ãªã¹ãã¹ã©ã€ã¹ã®ãµããŒã ãã®ãããªãµããŒãã¯æ¡åŒµå¯èœã§ã
__getitem__
ããã³
__setitem__
ã¡ãœãããå®è£
ããPythonã¯ã©ã¹ã¯ããã®æ§æã䜿çšããŠã«ããã§ããŸãã æ¬¡ã®ãªã¹ãã¯ããã®Pythonæ©èœãããã«ã·ã³ãã«ã§èªç¶ãã瀺ããŠããŸãã
a = [1, 2, 3, 4, 5, 6, 7, 8] print(a[1:4])
ãã¡ãããããã ãã§ã¯ãããŸããã Pythonã³ãŒãã¯ããå€ããJavaã³ãŒãã«æ¯ã¹ãŠã¯ããã«ã³ã³ãã¯ãã§ç°¡æœã§ãã äŸå€ã¯ãµããŒããããŠããŸããããã§ãã¯ãããŠããŸãããéçºè
ã¯ãæ¶èåãšããŠé©åãªPythonã¹ã¯ãªãããç°¡åã«èšè¿°ã§ããŸããJavaã®äžç芳ããã¹ãŠãã¯ã©ã¹ãã«drããã«ãä»çµã¿ãã詊ããŠãã ããã Pythonã¯ç°¡åã«åå ã§ããŸãã
ããããç§ã®æèŠã§ã¯ãåªäœæ§ã®æãéèŠãªèŠå ïŒPython 2.7ãšPython 3ã®éã®æ¥ç¶ãç¶æããããã«Pythonã³ãã¥ããã£ãã©ããªåªåãããŠããã®ããç§ã劚ããããšã¯ãããŸããïŒã¯ãæäœã®ããã®ã¯ããã«åªããèšèšãšé«éã®ã©ã€ãã©ãªãäœæã§ããããšã§ãæ°åä»ã-NumPyã Numpyã¯ãN次å
é
åã®ãªããžã§ã¯ãã§ãã
ndarrayãäžå¿ã«æ§ç¯ãããŸãã ç§ã¯ããã¥ã¡ã³ããŒã·ã§ã³ãåŒçšããŸãïŒ
NumPyã®äž»èŠãªãªããžã§ã¯ãã¯åçš®ã®å€æ¬¡å
é
åã§ãã ããã¯ãæ£ã®æŽæ°ã®ã¿ãã«ã«ãã£ãŠã€ã³ããã¯ã¹ãä»ããããããã¹ãŠåãã¿ã€ãã®èŠçŽ ïŒéåžžã¯æ°åïŒã®ããŒãã«ã§ãã NumPyã®ãã¹ãŠã®äœæ¥ã¯ãããŒã¿ãndarrayã«æžã蟌ã¿ããã®åŸã®æäœã«åºã¥ããŠããŸãã NumPyã¯ãããŸããŸãªã€ã³ããã¯ã¹äœæããããŒããã£ã¹ããé床åäžã®ããã®ãã¯ãã«åãªãã·ã§ã³ããµããŒãããŠãããéåžžãéçºè
ã¯å€§ããªæ°å€é
åãç°¡åã«äœæããã³æäœã§ããŸãã
次ã®ãªã¹ãã¯ãndarrayã§ã®ã€ã³ããã¯ã¹äœæãšãããŒããã£ã¹ããå®éã«ç€ºããŠããŸãããããã¯ML / DLã®äž»èŠãªæäœã§ãã
import numpy as np
å€§èŠæš¡ãªå€æ¬¡å
æ°å€é
åã䜿çšããŠãæ©æ¢°åŠç¿ãç¹ã«ãã£ãŒãã©ãŒãã³ã°ã®ããã°ã©ãã³ã°ã®äžå¿ãããŒã¯ããŸãã ãã£ãŒããã¥ãŒã©ã«ãããã¯ãŒã¯ã¯ãæ°å€ã®ã¬ãã«ã§ã¢ãã«åãããããŒããšãšããžã®ã©ãã£ã¹ã§ãã ãããã¯ãŒã¯ããã¬ãŒãã³ã°ãããšãããŸãã¯ããã«åºã¥ããŠåºåãå®è¡ãããšãã®ã©ã³ã¿ã€ã æäœã«ã¯ãé«éã®è¡åä¹ç®ãå¿
èŠã§ãã
NumPyã®ãããã§ã
scipy ã
pandasãããã³ä»ã®å€ãã®NumPyããŒã¹ã®ã©ã€ãã©ãªãªã©
ãããã«å€ãã®ããšãè¡ãããŸããã äž»èŠãªæ·±å±€åŠç¿ã©ã€ãã©ãªïŒGoogleã®
Tensorflow ãFacebookã®
PyTorch ïŒã¯Pythonãçå£ã«éçºããŠããŸãã Tensorflowã«ã¯GoãJavaãããã³JavaScriptçšã®ä»ã®APIããããŸããããããã¯äžå®å
šã§ãããäžå®å®ã§ãããšèŠãªãããŸãã PyTorchã¯ããšããšLuaã§äœæããã2017幎ã«ãã®ççŽãªãããèšèªãã2017幎ã«ã¡ã€ã³ã®ML Pythonãšã³ã·ã¹ãã ã«ç§»è¡ãããšãã«ã人æ°ãæ¥äžæããŸããã
Pythonã®æ¬ é¥Pythonã¯çæ³çãªèšèªã§ã¯ãªããæã人æ°ã®ããã©ã³ã¿ã€ã ã§ããCPythonã§ããããŸããã ã°ããŒãã«ã€ã³ã¿ãŒããªã¿ãŒããã¯ïŒ
GIL ïŒããããããã¹ã±ãŒãªã³ã°ã¯å®¹æã§ã¯ãããŸããã ããã«ãPyTorchãTensorflowãªã©ã®Pythonãã£ãŒãã©ãŒãã³ã°ãã¬ãŒã ã¯ãŒã¯ã¯ãããŒã¡ãœãããäžéæãªå®è£
ã«æž¡ããŸãã ããšãã°ãNVidiaã®
cuDNNã©ã€ãã©ãªã¯ãPyTorch
RNN / LSTMå®è£
ã®ç¯å²ã«å€§ããªåœ±é¿ãäžããŸããã RNNãšLSTMïŒãªã«ã¬ã³ããã¥ãŒã©ã«ãããã¯ãŒã¯ãšé·æçæã¡ã¢ãªïŒã¯ãç¹ã«é£ç¶ããäžé£ã®å¯å€é·ã®åé¡ãšäºæž¬ãå°éãšããŠãããããããžãã¹ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéåžžã«éèŠãªDLããŒã«ãããã§ãã Webäžã®ããã²ãŒã·ã§ã³ïŒã¯ãªãã¯ã¹ããªãŒã ïŒã®è¿œè·¡ãããã¹ããã©ã°ã¡ã³ãã®åæããŠãŒã¶ãŒã€ãã³ããªã©ã
Pythonãžã®å
¬å¹³æ§ã®ããã«ããã®ãããªäžéæåºŠ/å¶éã¯ãCãŸãã¯C ++ã§æžããããã®ãé€ãã»ãšãã©ãã¹ãŠã®ML / DLã®ãã¬ãŒã ã¯ãŒã¯ã«é©çšãããããšã«æ³šæããŠãã ããã ãªãã§ïŒ ãªããªããè¡åä¹ç®ãªã©ã®åºæ¬çãªè² è·ã®é«ãæäœã®çç£æ§ãæå€§éã«é«ããããã«ãéçºè
ã¯å¯èœãªéããéå±ã«è¿ããäžéããããã§ãã
Javaã¯ãã®åéã§äœãç«¶ãå¿
èŠããããŸããïŒJavaãã©ãããã©ãŒã ã«ã¯3ã€ã®äž»èŠãªè¿œå ãå¿
èŠã ãšæããŸãã ããããå®è£
ããããšãæ©æ¢°åŠç¿ã®ããã®å¥å
šã§è±ããªãšã³ã·ã¹ãã ãåºããå§ããŸãã
- èšèªã®ã³ã¢ã«ãã€ãã£ãã€ã³ããã¯ã¹/ã¹ã©ã€ã¹ã®ãµããŒãã远å ããŠã䜿ãããããšè¡šçŸåã§Pythonãšç«¶åã§ããããã«ããŸãã ããããããã®ãããªæ©èœã¯ãæ¢åã®é åºä»ãã³ã¬ã¯ã·ã§ã³ã§ããList <E>ã€ã³ã¿ãŒãã§ã€ã¹ãäžå¿ã«Javaã§æ§ç¯ããå¿
èŠããããŸã ã ãã®ãããªãµããŒãã®ããã«ã¯ãéè² è·ã®å¿
èŠæ§ãèªèããå¿
èŠããããŸã-ãã€ã³ãïŒ2ãæºããå¿
èŠããããŸãã
- ãã³ãœã«å®è£
ãäœæããŸã-ãããã
java.math
ããã±ãŒãžå
ã«ãããŸãããCollections APIã«ãã¢ã¯ã»ã¹ã§ããŸãã ãã®ã¯ã©ã¹ãšã€ã³ã¿ãŒãã§ã€ã¹ã®ã»ããã¯ndarray
ãšåçã«ndarray
ããç¹ã«NumPyã§å©çšå¯èœãª3çš®é¡ã®ã€ã³ããã¯ã¹äœæïŒãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ãåçŽãªã¹ã©ã€ã¹ãããã°ã©ãã³ã°ã«å¿
èŠãªé«åºŠãªã€ã³ããã¯ã¹äœæïŒã®ã€ã³ããã¯ã¹äœæã®è¿œå ãµããŒããæäŸããŸãã - ãããŒããã£ã¹ããæäŸãã-ä»»æã®ïŒãã ãäºææ§ã®ããïŒæ¬¡å
ã®ã¹ã«ã©ãŒãšãã³ãœã«ã
ããã3ã€ã®ã¿ã¹ã¯ãJavaèšèªãšã©ã³ã¿ã€ã ã®ã³ã¢ã§å®è¡ã§ããã°ãNumPyã«çžåœãã
ãNumJavaããäœæããæ¹æ³ãéãããŠããŸããã
Panamaãããžã§ã¯ãã¯ãCPUãGPUãTPUã§å®è¡ãããé«éãªãã³ãœã«æäœãžã®ãã¯ãã«åãããäœã¬ãã«ã¢ã¯ã»ã¹ãæäŸããã®ã«ã圹ç«ã¡ãJava MLããã®çš®ã®æéã«ãªãããšãã§ããŸãã
ãããã®ã¢ããªã³ã¯äºçްãªããšã ãšã¯ãŸã£ããèšããŸãã-ããããããé ãã¯ãããŸããããJavaãã©ãããã©ãŒã å
šäœã«å¯Ÿããæœåšçãªå©ç¹ã¯èšå€§ã§ãã
次ã®ãªã¹ãã¯ãNumPyã®ãããŒããã£ã¹ãããã³ã€ã³ããã¯ã¹äœæã®äŸãã
Tensor
ã¯ã©ã¹ã䜿çšããŠNumJavaã§ã©ã®ããã«èŠãããã瀺ããŠããŸããèšèªããŒã¹ã®ã¹ã©ã€ã¹æ§æãšãæŒç®åã®ãªãŒããŒããŒãã«é¢ããçŸåšã®å¶éããµããŒãããŠããŸãã
ããŒã¹ãã¯ãã£ããšè¡åãä¿ããã¬ãŒãºæ©æ¢°åŠç¿ãããžãã¹ã®äžçãå€é©ããã®ã¯ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãã€ã³ã¿ãŒããããã¢ãã€ã«ãã¯ãããžãŒãªã©ãåœæãšåãã§ãã 圌ã®åšãã«ã¯å€ãã®èªå€§å®£äŒããããŸãããããã€ãã®éåžžã«èª¬åŸåã®ããèšäºãšçµè«ã衚瀺ãããŸãã ããšãã°ã
ãã®èšäºã§ã¯ãã·ã¹ãã ãæ©æ¢°åŠç¿ã䜿çšããŠãããã¯ã°ã©ãŠã³ãã§ããŒã¿ããŒã¹ãµãŒããŒãWebãµãŒããŒãããã³ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®æé©ãªæ§æãåŠç¿ã§ããå°æ¥ã«ã€ããŠèª¬æããŸãã MLãèªåã®ã·ã¹ãã ã«å±éããå¿
èŠãããããŸãããééããªãããã³ããŒã®1ã€ããããè¡ãããšãã§ããŸãã
ãã®èšäºã§ç޹ä»ããå®çšçãªç«å Žã«åºã¥ããŠãæ©æ¢°åŠç¿ãšãã£ãŒãã©ãŒãã³ã°ïŒJREã§äœæ¥ïŒã®ãã¬ãŒã ã¯ãŒã¯ã¯ãWebãé·æã¹ãã¬ãŒãžããŸãã¯XMLè§£æã®æ¢åã®ãã¬ãŒã ã¯ãŒã¯ãããJavaã§æžãããšãã§ããŸãã æå
端ã®ã³ã³ãã¥ãŒã¿ãŒããžã§ã³å®è£
ã®ããã®
ç³ã¿èŸŒã¿ãã¥ãŒã©ã«ãããã¯ãŒã¯ ïŒCNNïŒããµããŒãããJavaãã¬ãŒã ã¯ãŒã¯ãæ³åã§ããŸãããã®ãããªå®è£
ã«ã¯ãèªå埮åãªã©ã®æãé«åºŠãªMLæ©èœãåãããã·ãŒã±ã³ã·ã£ã«ããŒã¿ã»ããïŒããžãã¹ã«ãšã£ãŠéèŠãªãã®ïŒã®ãªã«ã¬ã³ããã¥ãŒã©ã«ãããã¯ãŒã¯LSTMã®å®è£
ãå«ãŸããŸãã æ¬¡ã«ããããã®ãã¬ãŒã ã¯ãŒã¯ã¯ãIDEããã¹ããã¬ãŒã ã¯ãŒã¯ãç¶ç¶ççµ±åãªã©ããã¹ãŠåãããŒã«ã䜿çšããŠãæ¢åã®Javaã·ã¹ãã ãšã·ãŒã ã¬ã¹ã«çµ±åã§ããæ¬¡äžä»£ã®ãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã®å®è£
ãšåŒ·åã«åœ¹ç«ã¡ãŸãã æãéèŠãªããšã¯ã圌ããç§ãã¡ã®äººã
ã«ãã£ãŠæžããããµããŒããããããšã§ãã ããªããJavaãã¡ã³ãªããããªãã¯ãã®èŠèŸŒã¿ã奜ãã§ã¯ãããŸãããïŒ