本当に学習しているかを検証するために、20分かけて以下のパラメータで、1000世代の間、検証用データで学習させた。答えを教えている形になる。
- プログラムのノード数:4000
- 個体数:50個体
- 学習中に個体評価する回数:15回
- 突然変異率の上限初期値:0.01倍
- 突然変異率の変動量:0.001倍
わずかに輪郭が見えてきている。
ただ、これ以上学習させるのは難しそうだ。
パラメーターを以下のように変更して再学習する。突然変異率が0.001倍近辺で下げ止まっており、突然変異率の変動量が制限となっている。
- プログラムのノード数:4000
- 個体数:50個体
- 学習中に個体評価する回数:15回
- 突然変異率の上限初期値:0.01倍
- 突然変異率の変動量:0.0001
突然変異率を固定にしてみる。突然変異率が下がると、学習が進まなくなる傾向があると見た。
- プログラムのノード数:4000
- 個体数:50個体
- 学習中に個体評価する回数:15回
- 突然変異率:0.01倍
700世代学習させたが、あまりに学習しないので打ち切った。突然変異率は低い方が良いらしい。ノード毎に突然変異の発生を計算しており、ノード数4000もあると突然変異率は相応に低くする必要がありそうだ。
再度突然変異率の変動を可変にして、初期突然変異率を0.01から0.001に変更して再実験。
- プログラムのノード数:4000
- 個体数:50個体
- 学習中に個体評価する回数:15回
- 突然変異率の上限初期値:0.001倍
- 突然変異率の変動量:0.0001倍
突然変異率の低さから多様性が失われてしまい、熱的死を迎えたため打ち切り。
一番良かった初期のパラメータをノードの数と突然変異率の変動量を変更してみる。
ノードの数は増やせば賢くなるだろうという短絡的な考え。
突然変異率は下がっていく過程が大事なのだ。たぶん。突然変異率が高い個体と低い個体が出てくる。
- プログラムのノード数:8000
- 個体数:50個体
- 学習中に個体評価する回数:15回
- 突然変異率の上限初期値:0.1倍
- 突然変異率の変動量:0.0001倍
学習が途中で止まってしまう。突然変異率の変動量が高めになっていた方が、良い意味で突然変異率が下げ止まるようだ。
突然変異率の上限初期値を元に戻す。
突然変異の変動範囲を高い方に寄せて、突然変異が上がりやすくしてみる。
- プログラムのノード数:8000
- 個体数:50個体
- 学習中に個体評価する回数:15回
- 突然変異率の上限初期値:0.01倍
- 突然変異率の変動範囲:0.0007 ~ -0.0003
学習の途上という感じがしなくもない。ノード数が多すぎる。
突然変異率は良さそうな所を行ったり来たりしている。
逆にノードの数を減らしてみる。小規模な問題ならノード数が少ない方が良さそうな予感。多い少ないの基準の分からなさよ。
- プログラムのノード数:2000
- 個体数:50個体
- 学習中に個体評価する回数:15回
- 突然変異率の上限初期値:0.01倍
- 突然変異率の変動範囲:0.0007 ~ -0.0003
2000は減らしすぎということが分かった。
逆に個体数を減らしてみる。その分世代数を2000に増やす。その方が速く学習できる可能性がある。ネットの文献にそう書いてあった。
- プログラムのノード数:4000
- 個体数:20個体
- 学習中に個体評価する回数:15回
- 突然変異率の上限初期値:0.01倍
- 突然変異率の変動範囲:0.0007 ~ -0.0003
いや、うん、学習はしてるんだけど、もっとも良い個体が伸びてこない。うむむ。
そろそろ眠いので今日はここまで