äœå¹Žãåããå幎ã«1åã®ããŒã¹ã§å°éæžãèªãããšããŠãããå°éæžãšèšã£ãŠãã倧åŠ1ïœ2幎ãããã®é£æåºŠã ãã
ä»èªãã§ããã®ã¯ããŒãããäœãDeep Learning âPythonã§åŠã¶ãã£ãŒãã©ãŒãã³ã°ã®çè«ãšå®è£ ãã§ãããæ°ã¥ããããšããšã³ããªãŒã«ããŠããã®ã ããæ°ã¥ãããååã®èšäºãã3ã¶æãçµã£ãŠããŸã£ãŠããã
3ç« ã§ãã¥ãŒã©ã«ãããã¯ãŒã¯ãšããã®ãå°å ¥ãããæ©ã話ãè¡åæŒç®ã§ããããã®ä»ããã€ãã®æºåããããšã次ã¯ãããªããMNISTããŒã¿ã»ããããšããææžãæ°åã®ãã¹ãããŒã¿ãèªèãããã
ãããããšãŠããããã«ããã£ããããã°ã©ã èšèª Python ã§æžãããã³ãŒããGitHub ããããŠã³ããŒãã§ããæŒç®äžã®ããŒã¿ã奜ããªãšããã§ãã³ãã§ããã®ã§ãããã¹ãã«ã¯èŒã£ãŠããªããã¹ãã«ãŒãã³ã远å ããŠéæã§ããŒã¿ããã³ããããããªãããããããäœããã£ãŠããã®ãçè§£ããâŠã€ããã
çè§£ããã£ãŠãã©ãããããšãªã®ããïŒ ãã°ãã°èšãããããšã ãããçè§£ããããšããããšèªäœããæãçè§£ãããããã®ã®äžã€ãªã®ããç¥ããªãã
æ¬åœã«çè§£ããŠãããã©ããã確èªããããã«ãç·Žç¿åé¡ãäœã£ãŠè§£ããŠã¿ããšããã®ã¯ãããè¡ãããææ®µã ãšæããäžæ²æžã§ã¯2ç« ã§ANDã²ãŒããORã²ãŒããNANDã²ãŒããšããè«çåè·¯ãããŒã»ãããã³ïŒãããã¶ã£ã¡ããè¡åæŒç®ã§ããïŒã§å®çŸããŠããããããããªãMNISTããŒã¿ã»ããã«ãã£ã¬ã³ãžãããé£æåºŠãæåŽçµ¶å£ã®ããã«å€åããã
äžéã¯ãªããããïŒïŒ ã£ãŠããšã§ãé£æåºŠã¯ãããšãã«äžãããã7ã»ã°ã¡ã³ãLEDããã¥ãŒã©ã«ãããã¯ãŒã¯ã§èªèãããããªãããšèããã
æãã€ããŠã¿ããã7ã»ã°ã¡ã³ãLEDã§ãããªãè€éãªããšã«ãªãããã ã£ããããã§ããã«é£æåºŠãäžããŠã4ã»ã°ã¡ã³ãLEDãšããã®ãèããããšã«ããã
Â
4ã»ã°ã¡ã³ãLEDãšããã®ã¯ããããããã®ã§ããããããªãã®ããããã©ããç¥ããªããã©ãç§ãèããã®ã ãããããªããã
ååã®éã4ã€ã®LEDããæ§æããããäžçªäžãæäžäœããããæèšåãã«äžäœãããã«å¯Ÿå¿ã«ããŠãããšããã
äžæ²å³ã®äžçªäžãããªãã¡å šéšç¹ç¯ããç¶æ ïŒ1, 1, 1, 1ïŒãã0ããšããã
çãäžã®ïŒ0, 0, 1, 0ïŒãšäžçªäžã®ïŒ1, 0, 0, 0ïŒã¯ãããããã1ããšãããã1ãã«äºéãã®è¡šçŸããããšããã®ããããã°ããœã§ããã
話ãåçŽã«ããããã2ãïœã9ãã¯è¡šçŸäžèœãšãããã7ãã¯ããªããšããªããããªæ°ãããã諊ããã
ããããããã¹ãP84ïœ86ã§ãããšããã®ãæ©æ¢°åŠç¿ãã§ã¯ãªãã人ã®èããã¢ã«ãŽãªãºã ãã§ãèªèãããããšããã®ã ã
ã¹ãã³ãµãŒãªã³ã¯
Â
Â
ãŸãã¯ããã¹ãP60ïœ61ã第1å±€1çªç®ã®ãã¥ãŒãã³ããæ¹é ããŠã¿ããã³ãŒãã¯Pythonã®å¯Ÿè©±ã¢ãŒãã«è²Œãä»ããå¯èœã®ã¯ãã§ããã
import numpy as np
x = np.array([[1, 1, 1, 1],[0, 0, 1, 0],[1, 0, 0, 0]])
W1 = np.array([[0.3, -0.2, 1.1], [0.3, -0.2, -0.2],
  [0.3, 1.1, -0.2], [0.3, -0.2, -0.2]])
B1 = np.array([-1, -1, -1])
A1 = np.dot(x,W1) + B1
äžèšã³ãŒããè¡åã§è¡šçŸãããšããããªåœ¢ã«ãªãã
倿° x ã¯å ¥åã§ãããã¹ãã®äŸã¯2å ¥åã ã3å ¥åã«æ¹é ããã1è¡ç®ãã0ãããªãã¡ãããããã¹ãŠ1ã®ã±ãŒã¹ã«å¯Ÿå¿ããã2è¡ç®ãš3è¡ç®ã¯ããããã1ãããç®ãš3ãããç®ã ãã1ã®ã±ãŒã¹ã«å¯Ÿå¿ããã
W1ã¯ç¬¬1å±€ç®ã®éã¿ãB1ã¯ç¬¬1å±€ç®ã®ãã€ã¢ã¹ã§ãã0.3ãã-0.2ãã1.1ãã-1ããšããæ°å€ã¯ç§ãé©åœã«èããã1åç®ã¯ãããããã¹ãŠ1ã®ãšãã«éãã2åç®ãš3åç®ã¯ç¹å®ã®ããã1ã€ã ãã1ã®ãšãã«éããæ£ã«ãªããããªæ°å€ã®çµã¿åããã§ããã°ãäœã§ãããã®ã ã
ãããïŒãããããããïŒãããããããïŒ
ç¶ããŠP61ïœ62ã®ã第1å±€ç®ã®æŽ»æ§å颿°ãã«é¢ããŠã¯ãããã¹ãã®ã·ã°ã¢ã€ã颿°ã§ã¯ãªããã¹ããã颿°ïŒP47ïŒãæ¡çšããŠã¿ããä»åŸãæ©æ¢°åŠç¿ã«ããã£ã¬ã³ãžããããšæã£ãŠããããã®éã«ã¹ããã颿°ã§ã¯ããŸããããªãããç¥ããªãããä»ã¯åçŽãããããããããåªå ããã
颿°ã®å®çŸ©ã¯ãã©ãã§ãã£ãŠãããã
def step_function(x):
  return np.array(x > 0, dtype=np.int)
颿°ã䜿ãåã«å®çŸ©ãããŠããã°ããã®ã ã
Z1 = step_function(A1)
ããã§ print(A1)ãprint(Z1) ã§A1ãšZ1ããã³ããããšããããªãã¯ãã§ããã
Z1ã3Ã3ã®åäœè¡åã«ãªã£ãŠããŸãã®ãããªããæ°æã¡æªããã€ããäœããã£ãŠããã ãããæããããè«çåè·¯ã䜿ã£ãæ¹ãæ©ããããã¯ãã ããã ãæ¿ç¥ãªã®ã ããå°æ¥ã®ïŒãšèšã£ãŠã5ç« ã ãïŒæ©æ¢°åŠç¿ãèŠãããŠããŒã»ãããã³ã§è«çåè·¯ãå®çŸããŠããããšããã¢ãªã®ã ã
ãããïŒãããããããïŒãããããããïŒ
ç¶ããŠããã¹ãP62ïœ63ã第1å±€ãã第2å±€ãžã®ä¿¡å·ã®äŒéããæ¹é ãããããããããšã¯ãZ1ã®2åç®ãš3åç®ã®ORããšã£ãŠ1åã«ãŸãšãããã ãã§ãããã€ãŸããã©ã£ã¡ãã1ã ã£ããã1ããšããããšã ãã ããã®æäœãã1å±€ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã ãã§ã¯äžå¯èœã ãããå€å±€ã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ãå¿ èŠãšãªãããã ã
é åãã§é¢åãªããšãããŠããæ°ããããããããŠãã£ãŠã¿ãããã©ãããã ãåŸã ã®æ©æ¢°åŠç¿ã®ããã ã
W2 = np.array([[1, 0],[0, 0.5], [0, 0.5]])
B2 = np.array([0, -0.2])
A2 = np.dot(Z1,W2) + B2
Z2 = step_function(A2)
W2ã¯ç¬¬2å±€ç®ã®éã¿ãB2ã¯ç¬¬2å±€ç®ã®ãã€ã¢ã¹ã§ãæ°å€ã¯ããã¹ãP27ïœ28ã§ããŒã»ãããã³ã§ORã²ãŒããå®çŸãããšããšåããã®ãããããšäœ¿ã£ãŠã¿ãã
W2ãšA2ãè¡å衚çŸãããšããããªãã¯ãã§ããã
ãããïŒãããããããïŒãããããããïŒ
æåŸã«åºåå±€ã ããããã¹ãP63ã® identity_function ã§ã¯ãªãä»£å ¥ã䜿ã£ãŠã¿ããçç±ã¯åã«é¢åã ã£ãããã ã
y = Z2
ãããè¡å衚瀺ã
ãã ããã®çµæããç¶ãããã¹ãP63ïœã®ããœããããã¯ã¹é¢æ°ãã«é©å¿ããã®ã¯ããããããªããLEDã®èŒåºŠãã0ããšã1ãã®ããžã¿ã«ã§ãã£ãŠããŸã£ãããã ãããŒã»ã³ããçšããã°é¢çœãããç¥ããªããä»åã®å Žåã¯ãP80ã§åºãŠãã np.argmax(y, axis =0) ãšããã®ã䜿ãã®ãããããããªãããªãã€ãŸãè¡åã®æå€§èŠçŽ ãâ³è¡ç®ã«åºãŠãããšããããâ³ãšããã®ã衚瀺ãããæ°åã ãšããããšã§ã
ãããïŒãããããããïŒãããããããïŒ
æåŸã«ããããªããšããã£ãŠã¿ãã4ã»ã°ã¡ã³ãLEDã®2ã®4ä¹å šéšã®çµã¿åããã«ã€ããŠãäžèšã³ãŒãã詊ããŠã¿ãã®ã ã
x = np.array([[0, 0, 0, 0],[0, 0, 0, 1],[0, 0, 1, 0], [0, 0, 1, 1],
[0, 1, 0, 0],[0, 1, 0, 1], [0, 1, 1, 0],[0, 1, 1, 1],[1, 0, 0, 0],
[1, 0, 0, 1],[1, 0, 1, 0],[1, 0, 1, 1], [1, 1, 0, 0],[1, 1, 0, 1],
[1, 1, 1, 0],[1, 1, 1, 1]])A1 = np.dot(x,W1) + B1
Z1 = step_function(A1)
A2 = np.dot(Z1,W2) + B2
Z2 = step_function(A2)
y = Z2
ããã¹ãP79æµã«è¡åãµã€ãºã衚èšããŠã¿ãã
çµæã® y 㯠16Ã2ã®è¡åãšããŠåŸãããã1 ãçŸããã®ã¯ïŒ0, 0, 1, 0ïŒãïŒ1, 0, 0, 0ïŒãïŒ1, 1, 1, 1ïŒã«å¯Ÿå¿ããè¡ã ãã§ããã以å€ã¯å šéš 0 ã ã£ããããã¯æåŸ ããçµæã§ããã
远èšïŒ
ãã®å³è§£ãå¿ èŠãªã®ã ã£ãã第1å±€ãšç¬¬ïŒå±€ã®ãã£ãŠããããšãè«çåè·¯ã§ç€ºãã

ãŒãããäœãDeep Learning âPythonã§åŠã¶ãã£ãŒãã©ãŒãã³ã°ã®çè«ãšå®è£
- äœè : æè€åº·æ¯
- åºç瀟/ã¡ãŒã«ãŒ: ãªã©ã€ãªãŒãžã£ãã³
- çºå£²æ¥: 2016/09/24
- ã¡ãã£ã¢: åè¡æ¬ïŒãœããã«ããŒïŒ
- ãã®ååãå«ãããã° (11ä»¶) ãèŠã