prediction(棋譜との指し手一致率)が上がっている限り棋力は上がっていくと言う話をpredictionと棋力との関係に書きました。
ボナメソで学習させるとしてもiterationが50を超えた辺りからpredictionの伸びは非常にゆるやかになっていきます。ついでに言うと、条件によっては、このあと学習させればさせるほど弱くなっていきます。
人はこれを過学習と呼ぶかも知れません。
しかし本当にこれは過学習でしょうか?
ボナメソでは出現しなかった特徴因子の値はゼロに収束するようにしてあります。ところが、iterationをある程度回すと、それぞれの棋譜のそれぞれの局面のPVは固定化してきてしまい、いままで出現していて、きちんと値がついていた特徴因子も出現しなくなるので、これらがすべてゼロに収束していく現象が起きます。
これも広義には過学習なのでしょうけど、predictionはほぼ上がっていないので私はこれを過学習と呼ぶのは少し憚られます。
さて、これを改善する方法ですが、いくつか考えられます。他の上位のソフト開発者に尋ねればおそらくこう言うでしょう。
1) 出現しなかった特徴因子をゼロに引っ張るのがおかしい
2) 棋譜が少なすぎるのがおかしい
3) 探索depthが毎回、固定なのがおかしい
4) 棋譜セットが毎回、固定なのがおかしい
改善すべき場所はいろいろあるかと思いますが、私の個人的な考えでは、4)を改善してもあまり効果がなく(PVは固定化されていることには変わりないので)、3)の改善は2)を改善にしていることになるので確かに効果はあるのですが、例えば、各局面で探索depthを2〜4の間から毎回ランダムに選べば棋譜をおおよそ3倍にした効果に留まり、またdepthが1増えると探索に要する時間が3倍ぐらい必要になりますので、これをやってしまうと1棋譜当たりの探索コストが増大するので感心しません。
本来棋譜を増やすことに対して、1棋譜当たりの探索コストが増大するのはおかしいです。そこで、3)以外の方法で棋譜を増して2)を改善するほうが正攻法だと思います。
1)は、例えば、ペナルティ(0に引っ張る力)を弱くすれば擬似的に1)が改善できるのですが、どこかでやはり上に書いた現象が起きます。かと言ってペナルティ自体を無しにするのは別の問題を引き起こします。(考えてみてください)
これに関して、前回の電王戦の記者会見の控室で他のソフトの開発者に尋ねてみたのでその言葉を書いておきます。
Ponanzaの山本君「(出現しなかった特徴因子をゼロにするのは)他の分野の機械学習で成功していることなので…」
AWAKEの巨瀬さん「評価関数のパラメーターは限りなくsparse(≒必要のないところはゼロになっているの意味)なほうがいいでしょう…」
とのことです。
激指が行っているオンライン学習とか、全ての合法手を考慮せずランダムに選択した16手について学習するとか流行っているように見えないのはやはり効果薄いんでしょうかね。
激指の学習方法でも同じ問題はありまして、PVに出現しなくなったものはペナルティをかけていれば0に行きますね…。
> 全ての合法手を考慮せずランダムに選択した16手について学習する
これ初耳です。どのソフトがやっているのでしょうか?
ちなみにボナメソでは探索したときの値が棋譜の指し手と近い値の指し手のみ使いますね。あまりに点数が違う指し手は性質の違うはずで、異常値であり、学習に使うべきではないとの考え方なのだと思います。私もたぶんそのほうがいいと思うので、ここにランダム性を導入すると収束したときに弱くなる気はしています…が、本記事のような問題が起きるのでこれは何らかの方法で回避しないといけないです。
> これ初耳です。どのソフトがやっているのでしょうか?
これは以下のサイトの受け売りです・・・・
http://d.hatena.ne.jp/mamoruk/comment?date=20100821
細かくは知りません><
http://ci.nii.ac.jp/naid/110007681772
ここの「もう1つの工夫は、学習の速度を向上させるため、個々の局面において、・・・」あたりですね。
ほほー、なるほろ。参考になりました。ありがとうございます。
学習のiterationで毎回同じPVを生成しないので山登り的な手法を使うときに局所解に陥りにくい程度の意味はあるんですかね。うーむ..