Memory Capacities and Values

変数値及びメモリ容量の検討
当初の計画として、MS-DOSにて、簡単なモデルを作成し、それから実用レベルを狙って、Windowsへの移植を考えている.とりあえず、メモリの配分について、メモリモデルをSMALLモデルで実現する為の、計画をする.

  • ニューロン数
    目的のボードのマス目の数(8×8=64)から、ニューロンの数は64個とした.正転,逆転を気にする場合,もう一個のニューロンを追加して、正転,逆転を覚えさせるのだが、この計画では、正転逆転を許容(石の色が違う場合は、逆で考える)する為、追加は必要無しと判断した.CHAR型で問題無いと判断したので,
    合計は64バイト
    neuro[0]〜neuro[63]で示すが、共用体でneu[8][8]を宣言し、アクセスの高速化を計る.(Nov.25/2000)

  • シナプス数
    今回は、相互結合型ネットワークを考えているので、シナプスは、63+62+61+・・・1=((63+1)*63)/2=2016であるが、都合上、64×64=4096個を用意する.(配列のデータが参照しやすいからである)但し、データ型は、floatとして、4バイト使用するので、
    合計で16384バイト
    syn[0][1]は、neuro[0]とneuro[1]を繋ぐシナプスとする.(Nov.25/2000)

    →少々方向修正,ウエイトは、特に実数で表現する必要は無いと考えた.出力結果も、シグモイド関数を少々変更すれば問題無さそうなので、float型を止め,INT型にする事にした.これによって、使用するメモリは、
    合計で、8192バイトになる.(Dec.20/2000)

  • 裏ニューロン
    表紙にも書いたが、これは、厳密にはニューラルネットでは無い.作者自身の強引にまとめ上げようとしている思考ルーチンなので、計算結果を「反応値(重み)」として格納する、裏ニューロンを用意する事にした.これは、ニューロンと同数用意するので、64個とする.サイズはLONG型(シナプスINT型の為、総和を考えて)とし、
    合計256バイトになる.(Dec.20/2000)

  • 裏シナプス
    学習と覚醒について考えていた時点で、シナプスについては、学習中のものと、実際に対戦中に使用するもの(前回までの学習結果)の2通りが必要である.幸い,シナプスの検討時点で、偶然にも(本当に偶然)裏シナプスが出来て居たので、そちらを利用する.下表の様に、配列の参照先が、a<bの場合(緑色部分)は、対戦中に使用するシナプス,逆にa>bの場合はsyn[b][a]の学習中のシナプスとして使用する.(Dec.21/2000)

    syn[a][b]の使い分け,
    b\a0123....6263
    0--0-10-20-3 .... 0-620-63
    11-0--1-21-3 ....1-621-63
    22-02-1--2-3 ....2-622-63
    3
    .
    .
    .
    3-0
    ...
    3-1
    ...
    3-2
    ...
    --
    ....
    ....
    3-623-63
    6262-062-162-262-3 ....--62-63
    6363-063-163-263-3 ....63-62--


  • シナプスの採り得る値について,
    シナプスは、INT型で−32768〜32767の値を採る.境界が判断しにくいので、区切りの良いところで、−32000〜32000とする.また、この範囲を越えた場合は、この範囲に戻すものとする.1回の学習で、最大10程度の変化が有るとして,1回の試行で、30回((64−4)/2)の学習をする事になるので、1回の試行で最大で300値が変化する事になる.即ち、最大に変化しても、107回試行まではオーバーフローする事は無い.試作段階では、このままで問題無いと思われる.(Dec.20/2000)
    ただ、試行してみないと分からないが、32000(−32000)を簡単に越える様な状況が多ければ、エネルギーが高くなりすぎる事と、32000位で、値の拮抗が見られるので、越えた時点で、別のシナプスの値を下げる等のパラメータ操作は必要かも知れない(Dec.21/2000)

  • 学習時の変化量検討
    学習に於いて、重さ(w)の変化量は、前述,シナプス数でも検討に含まれた様に1〜10とする(0は採らない)即ち関係が密であれば1〜10,粗であれば、−1〜−10の値を、ランダム数で与える.(ランダムで、0〜9までの数値を出し、1足した値を足す/引くすれば良い)(Dec.21/2000)

  • 敷居値
    初期状態では、ニューロンは全く反応を示さないので、ランダムで打石位置を決定するが、学習を重ねると、序々に反応が強くなる筈である.ここで、どの程度の反応を示したら、ランダムでは無くて、ニューロンの反応値を優先するかという敷居値が必要になってくる.即ち、人間の判断で考えれば、どっちにしようかな〜?と迷って、「こっちだ」と決定する判断基準である.早ければ、3回位の試行で効果を表す数値として、100〜300(自分が、黒の場合は、−100〜−300)程度の値を設定したい.とりあえず、この辺りの値をランダムで決める形で試験する.(Dec.21/2000)


Since Nov.25/2000 last update Dec.21/2000,

Return