DNET_NeuralNetworkTraining - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒæ·±å±€åŠç¿ïŒdeep learningïŒïŒ
- ããŒã»ãããã³
-
ãã¥ãŒã©ã«ãããã¯ãŒã¯
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒæšè«ïŒ
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒåŠç¿ïŒ
ã»æ·±å±€åŠç¿ã®èª€å·®éäŒææ³
ã»æ·±å±€åŠç¿ã®ãã¯ããã¯
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã«ãããŠã¯ã
ç¹åŸŽéãæ©æ¢°ãéžæãéã¿ãåŠç¿ïŒèªåç²åŸïŒããã
æ©æ¢°åŠç¿ã«ã€ããŠã¯æ©æ¢°åŠç¿ïŒmachine learningïŒãåç §ã
-
æ§é åããŒã¿
- ç¹åŸŽéã衚ããéžæããã
- å Žåã«ãã£ãŠã¯æ¬¡å å§çž®ãããããã
-
éæ§é åããŒã¿
-
ç»å
å ¥åç»åããŒã¿ãããæ¬è³ªçãªããŒã¿ãæœåºã§ããããã«èšèšããã倿åšãæãã- ç»åããŒã¿ã®ç¹åŸŽéã¯éåžžããã¯ãã«ã䜿çšããŠè¡šãããã
- SIFT, SURF, HOGãªã©ã人ãèšèšãã倿åšã«ãã£ãŠç»åããŒã¿ããã¯ãã«åããã
-
-
æ§é åããŒã¿
æ©æ¢°åŠç¿ã®æ§ã ãªã¢ã«ãŽãªãºã ã§åŠç¿ãããã -
éæ§é åããŒã¿
- ç»å
ãã¯ãã«åãããç»åããŒã¿ãæ©æ¢°åŠç¿ã®
SVMãKNNãªã©ã®èå¥åšïŒæ©æ¢°åŠç¿ïŒmachine learningïŒã®è©²åœç¯ãåç §ïŒã§
åŠç¿ãããã
- ç»å
深局åŠç¿ã«ã€ããŠã¯æ·±å±€åŠç¿ïŒdeep learningïŒãåç §ã
åŠç¿ãã§ãŒãºã§ã¯ãä¿¡å·ã¯éæ¹åã«äŒæããã
-
åŠç¿ãšã¯ãéã¿ãã©ã¡ã¿ãèªåç²åŸããããã®ãã®ã
-
å®éã®ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®éã¿ãã©ã¡ã¿ã¯ã
- æ°åãæ°äžã«ãªããããæåã§ã®èšå®ã¯äžå¯èœã
- æŽã«å±€ãæ·±ããæ·±å±€åŠç¿ïŒdeep learningïŒã§ã¯æ°åã«ãç»ãã
-
éã¿ãã©ã¡ã¿ã®èªåç²åŸã®ããã
-
æå€±é¢æ°ãšããææšãå°å
¥ããã
æå€±é¢æ°ã䜿çšããŠå€ãæå°ïŒæå€§ïŒã«ãªããããªéã¿ãã©ã¡ã¿ãæ¢ãã - ãã®ãããªãã©ã¡ã¿ãæ¢ãåºãããã«ã¯ãåŸé
æ³ãšããææ³ãçšããã
åŸé ã¯ãåå Žæã§ïŒæå€±ïŒé¢æ°ã®å€ãæãæžããæ¹åã瀺ãã
-
æå€±é¢æ°ãšããææšãå°å
¥ããã
- MNISTããŒã¿ã»ããã®æ§ãªç»åã®åé¡åŠçãè¡ãã¢ã«ãŽãªãºã ãèãåºãã®ã¯å°é£ã
ããããæ©æ¢°ã«ããŒã¿ãåŠç¿ãããæ©æ¢°åŠç¿ãçšããã°åé¡åŠçãå®çŸå¯èœã
人éãïŒæé»çãªåŠç¿ã«ãã£ãŠãïŒããããå€å¥ããããšã¯ã§ããã
åŸã£ãŠã人éã®è³ããäžéšã¯ããã®ãããªããŒã¿é§åã§åããŠããã®ãããããªãã
- ãã®ããã«ãã¢ã«ãŽãªãºã ãæ»ãåºãã®ã§ã¯ãªããããŒã¿ãæå¹æŽ»çšããŠè§£æ±ºããæ¹æ³ã«ã
ç»åããç¹åŸŽéãæœåºãã
ç¹åŸŽéã®ãã¿ãŒã³ãæ©æ¢°åŠç¿ã®æè¡ã§åŠç¿ãããšããæ¹æ³ãããã
-
æå€±é¢æ°ã¯ãèª€å·®é¢æ°ãšã»ãŒåãããããå æ¬çãªæŠå¿µã
-
äºæ³ããŒã¿ãšæ£è§£ããŒã¿ã®åºåã®éã«ã
ã©ã®ããã誀差ãããã®ããè©äŸ¡ãã颿°ã -
äœæããäºæž¬ã¢ãã«ã®ç²ŸåºŠãè©äŸ¡ããéã«äœ¿ããã
-
å€ïŒèª€å·®ïŒãå°ãããã°å°ããã»ã©æ£ç¢ºãªã¢ãã«ãšèšããã
- ã¢ãã«é¢æ°ãšããŒã¿çŸ€ã®èª€å·®ãšããæèã§ã¯èª€å·®é¢æ°ãšåŒã°ããã
- åŠç¿ã®æèã§ã¯æå€±é¢æ°ãšåŒã°ããèª€å·®é¢æ°ä»¥å€ã«ãäŸãã°
KLæ å ±éïŒæ©æ¢°åŠç¿ïŒmachine learningïŒã®è©²åœç¯ãåç §ïŒãªã©ãå«ãã
-
-
深局åŠç¿ïŒdeep learningïŒã§ã¯äžã€ã®ææšãæãããã«æé©ãªãã©ã¡ã¿ãæ¢çŽ¢ããã
-
ãã®ææšãæå€±é¢æ°ãšåŒã³ããã©ã¡ã¿ã«å¯ŸããŠé£ç¶çã«å€åãã颿°ãçšããã
-
ããã¯åŠç¿æã«ã埮åã«ãã£ãŠ
åŸãã0ã«ãªã£ãŠãã©ã¡ã¿ã®æŽæ°ã§ããªããªãããšãé²ãããã
-
ã»ãšãã©ã®æé©åã¢ã«ãŽãªãºã ã¯ãæ£ç¢ºãªåŸé ãããã»è¡åãåæãšããŠããã
-
åŸé ã®æªæ¡ä»¶
-
éç¹
ã»ããæ¹åããèŠããšæ¥µå°å€ã§ããããå¥ã®æ¹åããèŠããšæ¥µå€§å€ã«ãªãç¹ã
ã»éç¹ã®æ°ã¯ãã©ã¡ã¿ã®æ°ã«å¯ŸããŠææ°é¢æ°çã«å¢å ããã®ã§
ããã£ãŒãã©ãŒãã³ã°ã®å Žåã¯éåžžã«å€ãååšããã -
å¹³å°ïŒã»ãŒæ°Žå¹³ãªé å
ã»åŸé ã0ãšãªããããªå¹³å°é åã§ã¯SGDã§åŠç¿ãé²ãŸãªããªãã
ã»MomentumSGDãªã©ã®æ £æ§ãçšããæé©åã¢ã«ãŽãªãºã ã§è§£æ±ºãå³ãã -
åŽïŒã»ãŒåçŽãªé å
ã»åŸé ãæ¥ãããŠïŒåŸé ççºãèµ·ããïŒããã©ã¡ã¿ãé ãã«å¹ã£é£ã¶ã
ã»åãå€ã®æãç®ãç¹°ãè¿ãè¡ãããå Žåã«çºç
ã»RNNãªã©ã§å€ãçŸããé·æäŸåæ§ãçŸããã®ããã®å°åœ¢ãåå ã
ã»åŸé ã®å€§ããã«äžéãèšããåŸé ã¯ãªããã³ã°ãæå¹ã -
ãã€ãºããã€ã¢ã¹
ã»ãã€ãºããã€ã¢ã¹ãå ãã£ãå ŽåãåŸé ãæ»ããã«ãªããã®ã¶ã®ã¶ãã圢ã«ãªãã
ã»ãããåé¿ããããã«ã¯ãæå€±é¢æ°ãããå¹³åŠãªä»£çæå€±é¢æ°ã§ä»£çšããã
-
-
ããã»è¡åã®æªæ¡ä»¶
-
ããã»è¡å
颿°ã®äºéåå°é¢æ°å šäœãäœãæ£æ¹è¡åã§å¯Ÿç§°è¡å
ã»åºæå€ã®ç¬Šå·ãã¿ãããšã«ããæ¥µå°ç¹ãåžæ§ã®å€å®ãè¡ããã
ã»åºæå€ãå šãŠæ£ã§ããã°ãåžé¢æ°ã«ãªãã®ã§å€§åè§£ãæ±ãŸãããšãä¿èšŒã§ããã -
æªæ¡ä»¶
ããã»è¡åã®ç¹ç°å€ãéåžžã«å€§ãããŸãã¯éåžžã«å°ããå Žåããã®éè¡åãæ±ããããšãå°é£ã«ãªãã
ã»æ¥µç«¯ãªæ¯çã®å€æ°ïŒãã倿°ãä»ã®å€æ°ã«æ¯ã¹ãŠæ°æ¡å€§ãããŸãã¯å°ããå€ãåãå Žå
ã»å±æçãªäžé£ç¶æ§ïŒé¢æ°ã屿çãªäžé£ç¶æ§ãéç·åœ¢æ§ãæã€å Žå
-
-
-
èŠãããã®æé©åãé²ãã¢ã«ãŽãªãºã
- SGD (MomentumSGD, NAG)
- AdaGrad
- Rmsprop
- AdaDelta
- Adam
-
åŸé éäžã®ããã°ã©ã å®è£
- éã¿æŽæ°ã¯åŸé ã®åŒãç®ïŒÎ = Î - åŸé
- ãããããã§ã¯æå€±ãΣãããã®ããµã€ãºã§å²ã£ãŠå¹³åãåãã
- ãã®å€ã«åŠç¿çïŒ0.01ãªã©ã®å€ïŒãæããã
- åå¥ã®ã¢ã«ãŽãªãºã ã®å®è£ ã¯æ°åŒããæ³åã§ããã
ååž°ã®å Žåããã¥ãŒã©ã«ãããã¯ãŒã¯ã®åºåãš
æ£è§£ãšãªãæåž«ããŒã¿ã®åèŠçŽ ã®å·®ã®äºä¹ã®ç·åã®ïŒåã®äžã
- åŒ
2
E = 1/2 Σ (yk-tk)
k
-
説æ
- k:ããŒã¿ã®æ¬¡å æ°
- yk:ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®åºå
- tk:æåž«ããŒã¿
-
äŸ(k=10)
-
yk:ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®åºå
=[0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
Softmax颿°ïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒæšè«ïŒã®è©²åœç¯ãåç §ïŒã®åºå
ïŒå šãŠè¶³ããŠ1.0ã«ãªããïŒ -
tk:æåž«ããŒã¿
=[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
â» æ£è§£ã©ãã«ã1ããœã¬ä»¥å€ã0ãšãããone-hot衚çŸ
-
-
Python
- å®è£
"""This is a test program."""
import numpy as np
def mean_squared_error(yk, tk):
"""æå€±é¢æ°(2ä¹å誀差)"""
return 0.5 * np.sum((yk - tk)**2)
# æåž«ããŒã¿
tk = np.array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0])
# æšå®ããŒã¿1ã®èª€å·®
yk = np.array([0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0])
print(mean_squared_error(yk, tk))
# æšå®ããŒã¿2ã®èª€å·®
yk = np.array([0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0])
print(mean_squared_error(yk, tk))-
åºå
æ£è§£(tk)ã«å¯Ÿå¿ãã確ç(yk)ã-
é«ããã°é«ãã»ã©ãïŒã«è¿ãããŒã¿ã«ãªãã
tkã§ïŒãæ£è§£ã®å Žåãykã§ïŒã®ç¢ºçãäžçªé«ããšããããŒã¿ã®å Žåã®Eã0.0975 -
äœããã°äœãã»ã©ãïŒã«è¿ãããŒã¿ã«ãªãã
tkã§ïŒãæ£è§£ã®å Žåãykã§ïŒã®ç¢ºçãäžçªé«ããšããããŒã¿ã®å Žåã®Eã0.5975
-
-
æå€±é¢æ°(2ä¹å誀差)ã®åºåãå°ããåè ã®ykããããé©åããŠããããšã瀺ããŠããã
å€å€åé¡ã®å Žåãæ£è§£ã©ãã«ã«å¯Ÿå¿ãã yk ã®ãåºã e ã®èªç¶å¯Ÿæ° log e ãèšç®ããã
-
åŒ
- éåžžç
E = - Σ tk log yk
k
- ããããã察å¿ç
1
E = - â Σ Σ tnk log ynk
N n k
-
説æ
- log:logã¯åºãeã®èªç¶å¯Ÿæ° log e
- k:ããŒã¿ã®æ¬¡å æ°
- yk:ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®åºå
- tk:æåž«ããŒã¿
-
äŸ(k=10)
åäž -
Python
- å®è£
"""This is a test program."""
import numpy as np
def cross_entropy_error(yk, tk):
"""æå€±é¢æ°(亀差ãšã³ããããŒèª€å·®)"""
delta = 1e-7 # log(0)ã¯ãã€ãã¹âã«ãªãã®ã埮å°ãªå€ãè¶³ããŠé²æ¢ã
return - np.sum(tk * np.log(yk + delta))
tk = np.array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0])
yk = np.array([0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0])
print(cross_entropy_error(yk, tk))
yk = np.array([0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0])
print(cross_entropy_error(yk, tk))-
åºå
æ£è§£(tk)ã«å¯Ÿå¿ãã確ç(yk)ã-
é«ããã°é«ãã»ã©ãïŒã«è¿ãããŒã¿ã«ãªãã
tkã§ïŒãæ£è§£ã®å Žåãykã§ïŒã®ç¢ºçãäžçªé«ããšããããŒã¿ã®å Žåã®Eã0.510825457099 -
äœããã°äœãã»ã©ã倧ããããŒã¿ã«ãªãã
tkã§ïŒãæ£è§£ã®å Žåãykã§ïŒã®ç¢ºçãäžçªé«ããšããããŒã¿ã®å Žåã®Eã2.30258409299
-
-
ããããã察å¿ç
äžèšãå¹³åã«ããŠããã
return - np.sum(tk * np.log(yk + delta)) / yk.shape[0]- æå€±é¢æ°(亀差ãšã³ããããŒèª€å·®)ã®åºåãå°ããåè ã®ykããããé©åããŠããããšã瀺ããŠããã
ããããã察å¿ç
return np.mean(- y * np.log(p) - (1-y) * np.log(1-p))埮åïŒå埮åïŒã§æ±ããåŸé
ã®ç€ºãæ¹åã¯ã
åå Žæã§é¢æ°ã®å€ãæãæžããæ¹åïŒã§ããå¯èœæ§ãé«ãïŒã
-
åŸé æ³ã§ã¯ãåºå€§ãªãã©ã¡ã¿ç©ºéãããè€éãªæå€±é¢æ°ãã
æå°ïŒæå€§ïŒå€ãåºåãããã©ã¡ã¿ããåŸé ã䜿çšããŠæ¢ãã- åŸé éäžæ³ : ïŒèª€å·®ãªã©ãïŒæå°ã«ãªããã©ã¡ã¿å€ãæ¢ãã
- åŸé äžææ³ : ïŒç¢ºçãªã©ãïŒæå€§ã«ãªããã©ã¡ã¿å€ãæ¢ãã
-
å šãŠã®ããŒã¿ãéžæããæå€±ã®å¹³åå€ã䜿çšããå ŽåããããåŸé éäžæ³(ææ¥éäžæ³)
-
ã©ã³ãã ã«ããŒã¿ãéžæããæå€±ã®å¹³åå€ã䜿çšããå Žåã確ççåŸé éäžæ³ïŒSGDïŒ
ïŒæ·±å±€åŠç¿ã®ãã¯ããã¯ã®è©²åœç¯ãåç §ïŒ- ïŒã€ã®ããŒã¿ãéžæããå Žåããªã³ã©ã€ã³åŠç¿
- ïœåã®ããŒã¿ãéžæããå ŽåããããããåŠç¿
-
泚æç¹
- åŸé ã®æãæ¹åã«æå°ïŒæå€§ïŒå€ãããããšã¯ä¿èšŒãããªãã
- è€éãªé¢æ°ã®å Žåã¯ãåŸé ã®æãæ¹åã«æå°ïŒæå€§ïŒå€ãç¡ãå¯èœæ§ãé«ãã
-
ãã€ã³ã
åŠç¿ãåŠäœã«-
å¹çè¯ãé²ãããã
-
äžæãæé©è§£ã«åæããããã
- 屿æé©è§£ â
- 倧åæé©è§£ â
-
äžæãéç¹ãè±ãããã
-
- åŒ
df(x0, x1) df(x0, x1)
âââââ , âââââ
dx0 dx1
-
説æ
- ãã¹ãŠã®å€æ°ã®å埮åã
ãã¯ãã«ãšããŠãŸãšãããã®ãåŸé ãšåŒã¶ã - f(x0, x1) = x0² + x1² ã®äŸãªããx0=3, x1=4ã®å ŽåãåŸé ã¯ã(6, 8)ãšãªãã
- ãã¹ãŠã®å€æ°ã®å埮åã
-
Python
- å®è£
"""This is a test program."""
import numpy as np
def numerical_gradient(f, x01):
"""å埮å"""
h = 1e-4 # 埮å°ãªå€hãšããŠ1ã®-4ä¹ãçšãã
grad = np.zeros_like(x01) # x01ãšåã圢ç¶ã§èŠçŽ ã0ã
for idx in range(x01.size):
tmp_val = x01[idx]
# 忹差åããäžå¿å·®åã«ããŠèª€å·®æž
# f(x + h)
fxh1 = f(tmp_val + h)
# f(x - h)
fxh2 = f(tmp_val - h)
# (f(x + h) - f(x - h)) / 2 * h
grad[idx] = (fxh1 - fxh2) / (2 * h)
return grad
def function_2(x):
return np.sum(x**2)
print(numerical_gradient(function_2, np.array([3.0, 4.0])))
print(numerical_gradient(function_2, np.array([0.0, 2.0])))
print(numerical_gradient(function_2, np.array([3.0, 0.0])))- åºå
[ 6. 8.]
[ 0. 4.]
[ 6. 0.]
-
åè
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch04/gradient_2d.py- x = -2.0 - 2.5, y = -2.0 - 2.5 ã®ç¯å²ã®0.25å»ã¿ã®ã¡ãã·ã¥ã°ãªãããçæ
- ã¡ãã·ã¥ã°ãªããã¯mè¡nåã®é åãªã®ã§ããããflatten()ã¡ãœããã§ m * n ã«ãã¯ãã«åã
- np.array([X, Y])ã§ x0, x1 ã® 2 è¡ m * n åã®é åã«ããã
- ããã颿°ã§ã¯forã§ 1 è¡ãã€åãåºããm * n åã®ãã¯ãã«ãšããŠåŠçããã
- åå ŽæïŒx0, x1ïŒã§ã®ãåŸé ãplt.quiver䜿çšããŠãã¯ãã«ïŒç¢å°ïŒãšããŠæç»ããã
- åŒ
df(x0, x1)
x0 = x0 - η âââââ
dx0
df(x0, x1)
x1 = x1 - η âââââ
dx1
-
説æ
- äžèšã¯ãäžåã®æŽæ°åŒã§ãåŸé æ³ã§ã¯ããã®ã¹ããããç¹°ãè¿ãã
- ηã¯åŠç¿çã§ãäžåã®åŠç¿ã§ã©ãã ãåŠç¿ãã¹ããïŒïŒã©ãã ããã©ã¡ã¿æŽæ°ãããïŒ
- åŠç¿çã¯ã0.01ã0.001ãªã©åãã£ãŠå€ã決ããã
ããããæ£ããåŠç¿ã§ããŠããã確èªããªãã調æŽããã
-
Python
以äžã®åŒã®æå°å€ãåŸé æ³ã§æ±ããã
2 2
f(x0, x1) = x0 + x1
- å®è£
import numpy as np
def numerical_gradient(f, x01):
"""å埮å"""
h = 1e-4 # 埮å°ãªå€hãšããŠ1ã®-4ä¹ãçšãã
grad = np.zeros_like(x01) # x01ãšåã圢ç¶ã§èŠçŽ ã0ã
# print("x01:" + str(x01));
for idx in range(x01.size):
tmp_val = x01[idx]
# 忹差åããäžå¿å·®åã«ããŠèª€å·®æž
# f(x + h)
fxh1 = f(tmp_val + h)
# f(x - h)
fxh2 = f(tmp_val - h)
# (f(x + h) - f(x - h)) / 2 * h
grad[idx] = (fxh1 - fxh2) / (2 * h)
return grad
def gradient_descent(f, init_x01, lr, step_num):
print("ln : step_num = " + str(lr) + " : " + str(step_num))
x01 = init_x01
for i in range(step_num):
grad = numerical_gradient(f, x01)
x01 -= lr * grad
return x01
def function_2(x):
return np.sum(x**2)
init_x = np.array([-3.0, 4.0])
print(gradient_descent(function_2, init_x, 0.1, 100))
# åŠç¿çã倧ããããã
init_x = np.array([-3.0, 4.0])
print(gradient_descent(function_2, init_x, 10.0, 100))
# åŠç¿çãå°ããããã
init_x = np.array([-3.0, 4.0])
print(gradient_descent(function_2, init_x, 1e-10, 100))- åºå
ln : step_num = 0.1 : 100
[ -6.11110793e-10 8.14814391e-10]
ln : step_num = 10.0 : 100
[ -1.91613251e+13 -1.26893162e+12]
ln : step_num = 1e-10 : 100
[-2.99999994 3.99999992]
ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®åŠç¿ã«ãããåŸé
ã¯ã
éã¿ãã©ã¡ã¿ã«é¢ããæå€±é¢æ°ã®åŸé
ãšãªãã
- åŒ
â w11 w21 w31 â
W = â â
â w12 w22 w32 â
â dL dL dL â
â ââ ââ ââ â
dL â dw11 dw21 dw31 â
ââ = â â
dW â dL dL dL â
â ââ ââ ââ â
â dw12 dw22 dw32 â
-
Python
-
gradient_simplenet.py
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch04/gradient_simplenet.py-
éã¿ãã©ã¡ã¿ãã€ã³ã¹ã¿ã³ã¹å€æ°ã«æã€ã
2 è¡ 3 åã®è¡åã§ãæšæºæ£èŠååžé¢æ°ã«åŸãä¹±æ°ãçæ -
x = å ¥åããŒã¿, t = æ£è§£ã©ãã«
-
predict(x)ã¡ãœãã : dot productïŒãããç©ïŒã¡ãœããã§æšè«ããã
-
loss(x, t)ã¡ãœãã : æå€±é¢æ°ïŒã®å€ãæ±ããïŒ
predict ---> softmax ---> cross_entropy_error- predictïŒæšè«ããïŒ
- softmaxïŒSoftmax颿°
ïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒæšè«ïŒã®è©²åœç¯ãåç §ïŒïŒ - cross_entropy_errorïŒäº€å·®ãšã³ããããŒèª€å·®ïŒ
-
nditerã§å€æ¬¡å é åã«å¯Ÿå¿ããåŸé ã®èšç®ã¡ãœãã : common.gradient.numerical_gradient
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/common/gradient.py#L34
-
-
å®è¡
ãã©ã«ãæ§æãç¶æããç¶æ ã§ch04ã«å®çŸ©ãã以äžã®ãã¡ã€ã«ãå®è¡ãC:\deep-learning-from-scratch-master\ch04>python Untitled-1.py -
simpleNetã䜿ã£ãŠæšè«/åŠç¿
- å®è£
-
import sys, os
sys.path.append(os.pardir) # 芪ãã£ã¬ã¯ããªã®ãã¡ã€ã«ãã€ã³ããŒãããããã®èšå®
import numpy as np
from common.functions import softmax, cross_entropy_error
from common.gradient import numerical_gradient
from gradient_simplenet import simpleNet
print("==================================================")
print("==================================================")
net = simpleNet()
print("W:" + str(net.W))
x = np.array([0.6, 0.9])
p = net.predict(x)
print("p:" + str(p))
t = np.array([0, 0, 1])
l = net.loss(x, t)
print("loss:" + str(l))- åºå
W:[[ 1.92087598 0.63971089 -0.26820797]
[ 0.58411529 -0.04610929 -0.88999594]]
p:[ 1.67822935 0.34232817 -0.96192113]
loss:2.92853604814
-
simpleNetã䜿ã£ãŠåŸé ãæ±ãã
- å®è£
import sys, os
sys.path.append(os.pardir) # 芪ãã£ã¬ã¯ããªã®ãã¡ã€ã«ãã€ã³ããŒãããããã®èšå®
import numpy as np
from common.functions import softmax, cross_entropy_error
from common.gradient import numerical_gradient
from gradient_simplenet import simpleNet
print("==================================================")
print("==================================================")
net = simpleNet()
print("W:" + str(net.W))
x = np.array([0.6, 0.9])
t = np.array([0, 0, 1])
f = lambda w: net.loss(x, t)
dW = numerical_gradient(f, net.W)
print("dW:" + str(dW))- åºå
==================================================
==================================================
W:[[ 1.83160192 0.4900981 -0.94188042]
[-0.24946104 2.91410946 -0.00695892]]
dW:[[ 0.06708443 0.51711391 -0.58419835]
[ 0.10062665 0.77567087 -0.87629752]]
- Wã¯ã
W : [[ w11 = 1.83160192 w21 = 0.4900981 w31 = -0.94188042]
[ w12 = -0.24946104 w22 = 2.91410946 w32 = -0.00695892]]
dL/dW : [[ dL/dw11 = 0.06708443 dL/dw21 = 0.51711391 dL/dw31 = -0.58419835]
[ dL/dw12 = 0.10062665 dL/dw22 = 0.77567087 dL/dw32 = -0.87629752]]
- w11ã h å¢ãããšã0.06708443 h å¢å ããã
- w12ã h å¢ãããšã0.10062665 h å¢å ããã
- w21ã h å¢ãããšã0.51711391 h å¢å ããã
- w22ã h å¢ãããšã0.77567087 h å¢å ããã
- w31ã h å¢ãããšã-0.58419835 h å¢å ãã( = æžå°ãã)ã
- w32ã h å¢ãããšã-0.87629752 h å¢å ãã( = æžå°ãã)ã
- åŸé ããã©ã¹ãªãhããã€ãã¹æ¹åã«ããã€ãã¹ãªããã©ã¹æ¹åã«åããã
-
åçç¹ã¯ã極倧ç¹ã極å°ç¹ãéç¹ã®ããããã«ãªãããã
- éç¹ã¯ãããæ¬¡å ã§ã¯æå°ã ããå¥ã®æ¬¡å ã§ã¯æå€§ïŒæå°ã§ã¯ãªãïŒãªã©ã
- æå°ååé¡ã«ãããŠã極å°ç¹ã¯å±ææå°ç¹ãŸãã¯å€§åçæå°ç¹ã®ããããã
- ïŒæå€§ååé¡ã«ãããŠã極倧ç¹ã¯å±ææå€§ç¹ãŸãã¯å€§åçæå€§ç¹ã®ãããããïŒ
-
åŠç¿çã倧ããèšå®ããé©åãªã¿ã€ãã³ã°ã§å€ãå°ããããŠãããªã©ã®ã¢ã«ãŽãªãºã ãé©çšããã
SGD (MomentumSGD, NAG)ãAdaGradãRmspropãAdaDeltaãAdam
ïŒæ·±å±€åŠç¿ã®ãã¯ããã¯ã®è©²åœç¯ãåç §ïŒ
- å¹³åãåã£ãŠèª€å·®éäŒæããã
- ããããããã©ã³ãã ã«ãµã³ããªã³ã°ãããŠããéãã
ãããããããå¹³åãšããŠç®åºãããæå€±ã®åŸé ãçã®åŸé ã«åŸãã
-
ãããåŠç¿ïŒäžæ¬åŠç¿ïŒ
- å šãŠã®ãµã³ãã«ãäžåºŠã«çšããŠåŸé ãæ±ããææ³
- æ©æ¢°åŠç¿ã®ã¢ã«ãŽãªãºã ã§ã¯åºæ¬çã«ãããåŠç¿ãæ¡çšãããã
- ãã ããæ·±å±€åŠç¿ã§ã¯ãããŒã¿ãå€éãããããçŸå®çã§ãªãã
-
ãªã³ã©ã€ã³åŠç¿ïŒé次åŠç¿ïŒ
- ã²ãšã€ã®ãµã³ãã«ã®ã¿ãçšããŠåŸé ãæ±ããææ³
- ãã€ãºãå€ãå€ã®åœ±é¿ãåãæããè§£ãé©åãªå€ã«åæãé£ãã
-
ãããããåŠç¿
ããŒã¿ã幟ã€ãã®å¡ã«å°åãã«ããŠããã®å¡æ¯ã«åŸé ãæ±ããææ³ã-
åŸé èšç®ã«æå€±é¢æ°ã®å¹³åå€ã䜿çšããŠãåé¡ã¯ãªãã
-
ãããåŠç¿ãšãªã³ã©ã€ã³åŠç¿ã®æè¡·æ¡ã§ãå€ãã®å Žåã«ãããŠçŸå®çãªæ¹æ³ã
- ãããåŠç¿ã»ã©åŠç¿æéãããããã
- ãªã³ã©ã€ã³åŠç¿ã»ã©è§£ã®åæãäžå®å®ã«ãªããªãã
-
| ãããåŠç¿ïŒäžæ¬åŠç¿ïŒ | ãããããåŠç¿ | ãªã³ã©ã€ã³åŠç¿ïŒé次åŠç¿ïŒ | |
|---|---|---|---|
| å¹ç | âïŒåŠçå®äºãŸã§ãé ãïŒ | âïŒäžéïŒ | âïŒåŠçå®äºãŸã§ãæ©ãïŒ |
| å®å®æ§ | âïŒãã€ãºãå€ãå€ã®åœ±é¿ãå°ïŒ | âïŒäžéïŒ | âïŒãã€ãºãå€ãå€ã®åœ±é¿ãå€§ïŒ |
| åŸé éäžæ³ | ãããåŸé éäžæ³(ææ¥éäžæ³) | 確ççåŸé éäžæ³ïŒSGDïŒ | ã |
-
ãããããåŠç¿ã§ã¯ãäžèšã®æå€±é¢æ°ãèšç·ŽçšããŒã¿ã»ããã«å¯ŸããŠé©çšããã
-
ããã§ã¯ãèšç·ŽçšããŒã¿ã»ããã«å¯Ÿããæå€±é¢æ°ã®ç·åãææšãšããã
-
åŒ
E = -1/N ΣΣ tnk log ynk
n k
-
説æ
-
亀差ãšã³ããããŒèª€å·®ã®åŒã
Nåã®ããŒã¿ãå«ãèšç·ŽçšããŒã¿ã»ããçšã«æ¡åŒµããã - æåŸã«ãNã§å²ã£ãŠæ£èŠåããïŒããŒã¿ïŒåãããã®å¹³åã®æå€±é¢æ°ãæ±ããïŒã
-
亀差ãšã³ããããŒèª€å·®ã®åŒã
-
äŸïŒMNISTããŒã¿ã»ããïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒæšè«ïŒã®è©²åœç¯ãåç §ïŒã䜿çšããïŒ
-
Python
-
å®è£
- one-hot衚çŸã®å Žå
-
"""This is a test program."""
import numpy as np
def mean_squared_error(ynk, tnk):
"""æå€±é¢æ°(亀差ãšã³ããããŒèª€å·®)"""
print("tnk:" + str(tnk))
print("ynk:" + str(ynk))
batch_size = ynk.shape[0]
print("batch_size:" + str(batch_size))
delta = 1e-7 # log(0)ã¯ãã€ãã¹âã«ãªãã®ã埮å°ãªå€ãè¶³ããŠé²æ¢ã
return - 1 / batch_size * (np.sum(tnk * np.log(ynk + delta)))
TNK = np.array([[0, 0, 1, 0, 0, 0, 0, 0, 0, 0], \
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]])
YNK = np.array([[0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0], \
[0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]])
print("mean_squared_error:" + str(mean_squared_error(YNK, TNK)))
YNK = np.array([[0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0], \
[0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]])
print("mean_squared_error:" + str(mean_squared_error(YNK, TNK)))- one-hot衚çŸã§ãªãå Žå
"""This is a test program."""
import numpy as np
def mean_squared_error(ynk, tnk):
"""æå€±é¢æ°(亀差ãšã³ããããŒèª€å·®)"""
print("tnk:" + str(tnk))
print("ynk:" + str(ynk))
batch_size = ynk.shape[0]
print("batch_size:" + str(batch_size))
delta = 1e-7 # log(0)ã¯ãã€ãã¹âã«ãªãã®ã埮å°ãªå€ãè¶³ããŠé²æ¢ã
ynk = ynk + delta
print("arange:" + str(ynk[np.arange(batch_size), tnk]))
return - 1 / batch_size * (np.sum(np.log(ynk[np.arange(batch_size), tnk])))
TNK = np.array([2, 2])
YNK = np.array([[0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0], \
[0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]])
print("mean_squared_error:" + str(mean_squared_error(YNK, TNK)))
YNK = np.array([[0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0], \
[0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]])
print("mean_squared_error:" + str(mean_squared_error(YNK, TNK)))- åºå
åäž
-
ããããµã€ãº
-
ãããããåŸé éäžæ³ã®ãµãã»ããã®ãµã€ãº
-
1,000ä»¶ã®èšç·ŽããŒã¿ã§ããããµã€ãºã200ã«ãããšã
ãµãã»ããã®ãµã€ãºã¯200ä»¶ã§ãããã®åæ°ã¯ïŒåã«ãªãã
-
-
ã€ãã¬ãŒã·ã§ã³æ°
-
åè¿°ã®èšç·ŽããŒã¿äžã®ãããåæ°ãã€ãã¬ãŒã·ã§ã³æ°
-
èšç·ŽããŒã¿ãµã€ãºãããããµã€ãºã§å²ã£ãå€
-
èšç·ŽããŒã¿ãµã€ãºãšããããµã€ãºã決ãŸãã°èªåçã«æ±ºãŸãã
-
-
ãšããã¯æ°
- äžã€ã®èšç·ŽããŒã¿ãäœåç¹°ãè¿ããŠåŠç¿ããããïŒ
- 深局åŠç¿ã§ã¯ãã©ã¡ã¿ãåæãããŸã§åãèšç·ŽããŒã¿ã§ç¹°ãè¿ãåŠç¿ã
- åŠç¿åæ°ïŒãšããã¯æ°ïŒãäžå®ä»¥äžå¢å ããããšãéåŠç¿ãçºç
-
åè
æ©æ¢°åŠç¿ïŒãã£ãŒãã©ãŒãã³ã°ã«ããã
ããããµã€ãºãã€ãã¬ãŒã·ã§ã³æ°ããšããã¯æ°ã®æ±ºãæ¹ - Qiita
https://qiita.com/kenta1984/items/bad75a37d552510e4682
-
é©åãªããããµã€ãºãéžã¶äºããåŠç¿ãäžæãè¡ãããã«å¿ èŠã«ãªãã
-
倧ããããå Žå
- 倧ãŸããªç¹åŸŽãæãããã粟床ã¯äžããã
- ãã©ã¡ã¿ã®æŽæ°ãå°ãªãããèšç®ã³ã¹ãã¯äžããã
-
å°ããããå Žå
- 粟床ã¯äžãããå°ãããããšåŠç¿ãçµäºããªãå¯èœæ§ãããã
- ïŒä»¶æ¯ã«èª€å·®éäŒæåŠçããããèšç®åæ°ïŒã³ã¹ãã¯äžããã
-
ãã®ä»æ³šæç¹
- GPU ãçšããŠèšç®ããéã¯ã2 ã®ã¹ãä¹ã«ããããµã€ãºãèšå®ããã
- ãã€ã¢ã¹ãããããªãããã«ãããããã¯ã©ã³ãã ã«éžã¶ã
-
-
CNNã§ã®åŠç¿äŸ
ããããµã€ãº500ã®ãŸãŸãšããã¯æ°ãå¢ããã°
ããè¯ã粟床ãåºããšèããããã-
ããããµã€ãº5
- ããããåŠç¿ãäžæãã§ããŠããªãã
- 1ã€1ã€ã®ããŒã¿ã«ææã«åå¿ãéããŠåŠç¿ãé£ããã
-
ããããµã€ãº50
- åãã¯é 調ã«åŠç¿ãé²ãã
- éäžããéåŠç¿ãèµ·ããã
-
ããããµã€ãº500
- éåŠç¿ãèµ·ããããšãªãé 調ã«åŠç¿ãé²ããã
- ãã©ã¡ã¿æŽæ°åæ°ãå°ãªããããåŠç¿ã¯éäž
-
â»lossïŒæå€±ïŒãšaccïŒæ£è§£çïŒã®é²æã確èªããã
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ã«ã¯é©å¿å¯èœãªéã¿ãšãã€ã¢ã¹ãããã
- åŠç¿ã«ããããã®éã¿ãšãã€ã¢ã¹ãèšç·ŽããŒã¿ã«é©å¿ããããã«èª¿æŽããã
- ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®åŠç¿ã¯ã以äžã®4ã€ã®ã¹ãããã§è¡ãããã
- èšç·ŽããŒã¿ãããã©ã³ãã ã«ããŒã¿ãéžæããã
- ããã§ã¯ãæå€±é¢æ°ã®å€ãæžããããšãç®çãšããã
- ãããããã®æå€±é¢æ°ãæžããããã«ãåéã¿ãã©ã¡ã¿ã®åŸé ãæ±ããã
- åŸé ã¯ãæå€±é¢æ°ã®å€ãæãæžããæ¹åã瀺ãã
éã¿ãã©ã¡ã¿ãåŸé ã®æ¹åã«åŸ®å°éã ãæŽæ°ããã
ã¹ããã 1, ã¹ããã 2, ã¹ããã 3ãç¹°ãè¿ãã
TwoLayerNetã¯ã©ã¹
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch04/two_layer_net.py
| # | 倿° | 説æ |
|---|---|---|
| 1 | params | ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®éã¿ãã©ã¡ã¿ã®ãã£ã¯ã·ã§ããªå€æ° |
| 1-1 | params['W1'] | 第1å±€ã®éã¿ |
| 1-2 | params['b1'] | 第1å±€ã®ãã€ã¢ã¹ |
| 1-3 | params['W2'] | 第2å±€ã®éã¿ |
| 1-4 | params['b2'] | 第2å±€ã®ãã€ã¢ã¹ |
| 2 | grads | numerical_gradientã§èšç®ãããåŸé ãä¿æãããã£ã¯ã·ã§ããªå€æ° |
| 2-1 | grads['W1'] | 第1å±€ã®éã¿ã®åŸé |
| 2-2 | grads['b1'] | 第1å±€ã®ãã€ã¢ã¹ã®åŸé |
| 2-3 | grads['W2'] | 第2å±€ã®éã¿ã®åŸé |
| 2-4 | grads['b2'] | 第2å±€ã®ãã€ã¢ã¹ã®åŸé |
| # | ã¡ãœãã ã·ã°ãã㣠/ åŒæ° | 説æ |
|---|---|---|
| 1 | __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01): |
ã³ã³ã¹ãã©ã¯ã¿ |
| 1-1 | self | ã€ã³ã¹ã¿ã³ã¹ |
| 1-2 | input_size | å ¥åå±€ã®ãã¥ãŒãã³ã®æ° |
| 1-3 | hidden_size | é ããã¥ãŒãã³ã®æ° |
| 1-4 | output_size | åºåå±€ã®ãã¥ãŒãã³ã®æ° |
| 1-5 | weight_init_std | ã»ã»ã» |
| 2 | predict(self, x): |
æšè«ãè¡ã |
| 2-1 | self | ã€ã³ã¹ã¿ã³ã¹ |
| 2-2 | x | ç»åããŒã¿ |
| 3 | loss(self, x, t): |
æå€±é¢æ°ã®å€ãæ±ãã |
| 3-1 | self | ã€ã³ã¹ã¿ã³ã¹ |
| 3-2 | x | ç»åããŒã¿ |
| 3-3 | t | æ£è§£ã©ãã« |
| 4 | accuracy(self, x, t): |
æšè«ã®ç²ŸåºŠãæ±ãã |
| 4-1 | self | ã€ã³ã¹ã¿ã³ã¹ |
| 4-2 | x | ç»åããŒã¿ |
| 4-3 | t | æ£è§£ã©ãã« |
| 5 | numerical_gradient(self, x, t): |
lossã䜿çšãåéã¿ãã©ã¡ã¿ã®åŸé ãæ±ãã |
| 5-1 | self | ã€ã³ã¹ã¿ã³ã¹ |
| 5-2 | x | ç»åããŒã¿ |
| 5-3 | t | æ£è§£ã©ãã« |
| 6 | gradient(self, x, t): |
numerical_gradientã®é«éç |
| 6-1 | self | ã€ã³ã¹ã¿ã³ã¹ |
| 6-2 | x | ç»åããŒã¿ |
| 6-3 | t | æ£è§£ã©ãã« |
åŸé æ³ã«ããïŒæå€±ïŒé¢æ°ãå°ãªãããŠããã
-
åŒ
è¡åã®ç©ã«ããå®è£ ãšã
ãããåã®åç¯ãåèã«ã以äžã®ããã«ãªãã-
第1å±€ (100åã®ããã)
-
x(1) =
(100, 784 = 28 * 28 pixel)
-
-
éã¿ãã©ã¡ã¿
-
W(1) =
(784, x = 100) -
b(1) =
(1, x = 100)
-
-
é ãå±€ (x = 100)
-
A(1) =
(100, x = 100) -
= x(2) =
(100, x = 100)
-
-
éã¿ãã©ã¡ã¿
-
W(2) =
(x = 100, 10) -
b(2) =
(1, 10)
-
-
第2局
-
A(2) =
(100, 10) # 0-9ã®æ°å
-
-
-
Python
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch04/train_neuralnet.py- å®è£
C:\deep-learning-from-scratch-master\ch04\train_neuralnetã以äžã®ããã«ç·šé
- å®è£
# coding: utf-8
import sys, os
sys.path.append(os.pardir) # 芪ãã£ã¬ã¯ããªã®ãã¡ã€ã«ãã€ã³ããŒãããããã®èšå®
import numpy as np
import matplotlib.pyplot as plt
from dataset.mnist import load_mnist
from two_layer_net import TwoLayerNet
# ããŒã¿ã®èªã¿èŸŒã¿
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)
network = TwoLayerNet(input_size=784, hidden_size=50, output_size=10)
iters_num = 10000 # ç¹°ãè¿ãã®åæ°ãé©å®èšå®ãã
train_size = x_train.shape[0]
batch_size = 100
learning_rate = 0.1
train_loss_list = []
for i in range(iters_num):
print(str(i) + " / " + str(iters_num))
batch_mask = np.random.choice(train_size, batch_size)
x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]
# åŸé
ã®èšç®
#grad = network.numerical_gradient(x_batch, t_batch)
grad = network.gradient(x_batch, t_batch)
# ãã©ã¡ãŒã¿ã®æŽæ°
for key in ('W1', 'b1', 'W2', 'b2'):
network.params[key] -= learning_rate * grad[key]
loss = network.loss(x_batch, t_batch)
train_loss_list.append(loss)
plt.xlabel("Iteration")
plt.ylabel("loss")
plt.plot(range(iters_num), train_loss_list)
plt.show()-
å®è¡
ãã©ã«ãæ§æãç¶æããç¶æ ã§ch04ã«å®çŸ©ããäžèšãã¡ã€ã«ãå®è¡ãC:\deep-learning-from-scratch-master\ch04>python train_neuralnet -
åºå
-
CMD
0 / 10000 ... 9999 / 10000 -
ã°ã©ã
-

åŠç¿çµæã䜿çšããŠãåŠç¿ããŒã¿ãšãã¹ãããŒã¿ãæšè«ããã
-
Python
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch04/train_neuralnet.py-
å®è£
C:\deep-learning-from-scratch-master\ch04\train_neuralnetã®ãªãªãžãã«ãå®è¡ -
å®è¡
ãã©ã«ãæ§æãç¶æããç¶æ ã§ch04ã«å®çŸ©ããäžèšãã¡ã€ã«ãå®è¡ãC:\deep-learning-from-scratch-master\ch04>python train_neuralnet -
åºå
1ãããã»ãµã€ã¯ã«æ¯ã«åŠç¿ããéã¿ãã©ã¡ã¿ã䜿çšããæšè«çµæã衚瀺ãããã- CMD
-
train acc, test acc | 0.102183333333, 0.101
train acc, test acc | 0.783416666667, 0.7894
train acc, test acc | 0.874916666667, 0.8791
train acc, test acc | 0.8964, 0.8991
train acc, test acc | 0.907433333333, 0.9092
train acc, test acc | 0.913616666667, 0.9147
train acc, test acc | 0.9184, 0.9185
train acc, test acc | 0.923366666667, 0.9238
train acc, test acc | 0.926316666667, 0.9275
train acc, test acc | 0.9294, 0.9298
train acc, test acc | 0.932666666667, 0.9318
train acc, test acc | 0.9341, 0.9341
train acc, test acc | 0.936816666667, 0.9367
train acc, test acc | 0.940133333333, 0.9382
train acc, test acc | 0.94175, 0.9397
train acc, test acc | 0.943566666667, 0.9417
train acc, test acc | 0.945233333333, 0.9435
- ã°ã©ã

-
人éãæåã§èšå®ãããã©ã¡ã¿
-
確ççåŸé éäžæ³ïŒSGDïŒïŒæ·±å±€åŠç¿ã®ãã¯ããã¯ã®è©²åœç¯ãåç §ïŒã®ç¹°ãè¿ãåæ°
iters_num = 10000 -
1åã®ãããããã®ãµã€ãº
batch_size = 100 -
åŠç¿ç
learning_rate = 0.1
-
-
NNã®æ§é ã«çµã¿èŸŒãŸããŠãããã€ããŒãã©ã¡ã¿
-
å±€ã®ãµã€ãº
-
å±€ã®æ·±ã
-
ç§»è¡ã¡ã¢
ããããããããããããªã³ã©ã€ã³åŠç¿ãã®è¡šã¯ãå ã® PukiWiki ã§ æçµè¡ã®åŸãïŒåãæšªçµåïŒ
|>|ïŒãããŠããããã ãããããåŠç¿ã®æ¬ã«å€ã眮ãããªã³ã©ã€ã³åŠç¿ã®æ¬ã ã ãšãããã2å±€NNã®ã¯ã©ã¹ãã®å€æ°ã»ã¡ãœããã®è¡šã¯ãå ã® PukiWiki ã§ ã»ã«ã®æšªçµåãçšããïŒéå±€ã®è¡šã ã£ããããGitHub Wiki ã§ã¯ åäžã®ãããè¡ã«æŽçãããããããŠã
gradsã®åé ç®ã®çªå·ã1-1ã1-4ãããŒãparams[...]ãšãªã£ãŠãããã®ã2-1ã2-4ãgrads[...]ã«æ£ããããæ²ç·ã®åŸé èšç®ãã®ãäžèšã®äŸãã®ãªã³ã¯ã¯ãå ã® PukiWiki ã® ã¢ã³ã«ãæ¬ããŒãžå ã«ååšããªãïŒåé€ãããç¯ãæãïŒããã åç §å ã®åŒ f(x0, x1) = x0² + x1² ãçŽæ¥èšè¿°ããã
ãåŸé éäžæ³ãã®åé ã¯ãå ã® PukiWiki ã§ã¯ ãæå°ïŒæå€§ïŒå€ãåºåããéç¹ïŒsaddle pointïŒããåŸé ã䜿çšããŠæ¢ããã ãšãªã£ãŠããããæ¬ããŒãžèªèº«ããäžæãéç¹ãè±ãããããšè¿°ã¹ãŠããéã éç¹ã¯è±ããã¹ãåçç¹ã§ããããããæå°ïŒæå€§ïŒå€ãåºåãããã©ã¡ã¿ãã«æ£ããã
ãããããµã€ãºãã€ãã¬ãŒã·ã§ã³æ°ããšããã¯æ°ãã® ãèšç·ŽããŒã¿ãµã€ãºãããããµã€ãºã§å²ã£ãå€ã㯠ã€ãã¬ãŒã·ã§ã³æ°ã®èª¬æã§ããããããã®é ãžç§»ããã
Tags: ç§»è¡, 人工ç¥èœ, 深局åŠç¿, ãã¥ãŒã©ã«ãããã¯ãŒã¯, åŠç¿, æå€±é¢æ°, åŸé éäžæ³, ããããã, Python