ブログ(Github Pages)でグラフ描画(Flotr2

     ジュンク堂書店でオライリーのカレンダーを入手するために「JavaScriptによるデータビジュアライゼーション入門」という本を買ってしまいました。前回まで三目並べプログラムの学習効果の記事を書いていましたが、10万回対戦(学習)後の最終結果だけではなく、推移をグラフ化してみたいと思っていながらも面倒なのでやってなかったのですが、本を買ったことでやる気が出たので、awkやemacsのキーボードマクロを駆使してグラフ用データを編集してみました。今回はとりあえず買った本の内容は置いといて、グラフ化した学習効果の結果について書きます。

    小石の数を減らしたことの影響

     前回までのテストで小石の初期値や補充数を少なくすることが一番効果的だということがわかったので、まずは小石の初期値と補充分を10個にしていた「従来の強化学習」と、「10個から1個に修正した」分と、全てのテストを通して一番学習効果が高かった線形関数(\(y = \frac{1}{総手数} x\))を使った「終盤の手ほど重要視」するパターンの3つのグラフを比較してみます。
     横軸の1目盛りが千回分の対戦で、縦軸に下から勝ち(青)・負け(黄緑)・引分(赤)の数を積み上げてグラフにしています。

    • 対乱数プログラムにおける学習効率の比較
    最終成績
    No. 学習方法  対乱数プログラム  
    1 従来の強化学習 65,266勝22,986敗11,748分
    2 小石の初期値と補充分を10から1に修正 74,470勝15,664敗9,866分
    3 終盤の手ほど重要視(線形関数) 76,304勝13,126敗10,570分
    推移グラフ

     このグラフを見ると弱い対戦相手(乱数プログラム)を使っていくら学習を続けても、ある回数(3、4万回)に達すると限界に達してそれ以上続けても学習効果が望めなくなる(強くならない)ことが推測できます。これは人間が将棋や囲碁を学習する際にも当てはまりそうです。また、3つのグラフを比較すると学習し始めた頃は学習の仕方によって伸び方が違ってくるということも見て取れますが、これも人間と同じだと言えそうです。


    • 対最強プログラムにおける学習効率の比較
    最終成績
    No. 学習方法  最強プログラム  
    1 従来の強化学習 0勝9,678敗90,322分
    2 小石の初期値と補充分を10から1に修正 0勝3,891敗96,109分
    3 終盤の手ほど重要視(線形関数) 0勝2,038敗97,962分
    推移グラフ

     人間の実力と並んでいるであろうと考えられる「引き分け率9割7分」に達するのは、学習方法1が約44,000回後、学習方法2が約17,000回後、学習方法3が約9,000回後です。小石の総数を減らすことと終盤を重要視する方法を組み入れることで、学習効果が向上することがグラフからはっきりと見てとれます。


    グラフの傾きを変えることによる影響

     前々回の記事でいろいろな方程式を使って結果を比較しましたが、途中経過がなかったので違いがよく分かりませんでした。対最強プログラムに対する引き分け数だけを取り出してみて同一グラフ上に学習度合いの推移を描画し比較してみました。

     前々回の記事の方程式1(青、\(y = \frac{1}{総手数} x\))と方程式2(黄緑、\(y = 0.029 \times 1.882^x\))が、わずかですが他の2つの方程式より学習効率がいいということがグラフから分かります。
     でも、グラフが少し見にくいですね。10万回分の対戦データを取らなくても、2万回分程度のデータでグラフを描画すべきだったのでしょうか?でも、そうするともっと対戦を続けた場合どうなるか知りたくなるので、これはこれでいいと思います。こういう時こそ今回導入したグラフライブラリの出番です。
     そこでFlotライブラリを使って、次の記事で拡大表示可能なグラフに変更してみます。