ニューロコンピュータの基礎
23)1素子ニューロ
100 rem NURO99.6.1
110 dim kyousi(5,5)
120 n = 0 : sasa = 100
130 randomize timer
140 kyousi(0,0) = 0 : kyousi(0,1) = 0 : kyousi(1,0) = 0 : kyousi(1,1) = 1
150 wx = rnd(10)-5
160 wy = rnd(10)-5
170 w1 = rnd(10)-5
180 rem Kihon
190 gosub 730
200 kihonsa = sa
210 wx = wx+0.1
220 gosub 730
230 upsa = sa
240 wx = wx-0.2
250 gosub 730
260 downsa = sa
270 wx = wx+0.1
280 minsa = kihonsa
290 if kihonsa-upsa > 0 then dp = 0.1 : else dp = -0.1
300 wx = wx+dp
310 gosub 730
320 if abs(minsa-sa) < 1.000000E-04 then 300
330 print "min WX=";wx,"WY=";wy,"W1=";w1,"SA=";minsa
340 kihonsa = sa
350 wy = wy+0.1
360 gosub 730
370 upsa = sa
380 wy = wy-0.2
390 gosub 730
400 downsa = sa
410 wy = wy+0.1
420 minsa = kihonsa
430 if kihonsa-upsa > 0 then dp = 0.1 : else dp = -0.1
440 wy = wy+dp
450 gosub 730
460 if abs(minsa-sa) < 1.000000E-04 then 440
470 print "min WX=";wx,"WY=";wy,"W1=";w1,"SA=";minsa
480 kihonsa = sa
490 w1 = w1+0.1
500 gosub 730
510 upsa = sa
520 w1 = w1-0.2
530 gosub 730
540 downsa = sa
550 w1 = w1+0.1
560 minsa = kihonsa
570 if kihonsa-upsa > 0 then dp = 0.1 : else dp = -0.1
580 w1 = w1+dp
590 gosub 730
600 if abs(minsa-sa) < 1.000000E-04 then 580
610 print "min WX=";wx,"WY=";wy,"W1=";w1,"SA=";minsa
620 rem
630 n = n+1 : print "n=";n
640 for x = 0 to 1
650 for y = 0 to 1
660 a = x*wx+y*wy+w1
670 z = 1/(1+exp(-a))
680 print "x=";x,"y=";y,"a=";a,"z=";z,"kyousi=";kyousi(x,y)
690 next y
700 next x
710 if abs(sa-sasa) > 1.000000E-05 then sasa = sa : goto 180
720 end
730 rem SUB SA NO KEISAN
740 sa = 0
750 for x = 0 to 1
760 for y = 0 to 1
770 a = x*wx+y*wy+w1
780 z = 1/(1+exp(-a))
790 rem PRINT "A=";A,"Z=";Z,
800 zz = (kyousi(x,y)-z)^2
810 rem PRINT "ZZ=";ZZ,
820 sa = zz+sa
830 rem PRINT "SA=";SA
840 next y
850 next x
860 return
解説)
ニューロコンピュータの基礎の基礎と言ったものです。プログラムとしては同じようなことを3回くり返して書いたりして非常に良くありません。本人のニューロコンピュータの勉強用に作ったと言うことで勘弁して下さい。このプログラムではxとyのAND回路になるよう教育していますが、kyousi(x,y)という変数の値を変えれば別の回路と同じはたらきをします。wが重み付けの変数です。
これをいくつも並べればニューロコンピュータができます、と言うのは言い過ぎですが、結局ニューロコンピュータと言うのは、ある事例で重み付けの値をきめてやって、その値を別の事例に用いてやることだ、と言うのが分かりました。