思うだけで学ばない日記 2.0

思うだけで学ばない日記から移転しました☆!よろしくお願いします。

問題提起するわ

問題提起するわ

xxx.....■■........._.■■■■■■■
                                                                                        xxxx■x■xx■
                                                                                        ■■■■


■ ■■■■
xxx.....■■■■■........._.■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■x■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■■■■■■■■■■■■■■■


■ 問題提起
[既存のコンピュータ将棋]
(特徴)
1. 優れたプレイヤー同士の棋譜を学習サンプルとする。
2. 学習サンプルで評価関数を調整する。
3. 2で調整した評価関数をそのまま対戦時の局面評価にも使う。

(問題点)
1. 「優れたプレイヤー同士の棋譜」が必須である割に、「優れたプレイヤー同士の棋譜」とは何であるかがシステムの中で十分には規定されていない。
   このため学習サンプル集めに人間(システムの外の存在)の関与が必要
2. ボナンザメソッドの結果を見てパラメータ数をスケールさせるのも人間(PPT、KKP + KPP、KPPP、KPPT、KKPT...人間がこれらを進化させている。
3. 異なる棋風(最善手(必勝手)が複数ある局面での選択の好み)のn駒間の関係ベースでのグローバルな合算が現実の調整手段で常に最良の結果をもたらすのか、確定的な結論は出ていなさげ


■ 提案する方法
[xxx.....■■■■■........._.■]
(特徴)
1. 全力で戦って負けたケースの棋譜を学習サンプルとする。
2. 学習サンプルから局面の場合分けを学習し、評価関数の調整は場合毎に行う。
3. 対戦時の局面評価には軽量な評価関数を使う(1つの場合の中の形勢だけ説明できれば良い

(既存手法の問題点を解決する手段)
1. 「全力で戦って負けたことを学習サンプルの条件とする」という明確な基準がシステム内にあることから、
   学習サンプル集めが真に全自動化される。(「優れたプレイヤー同士の棋譜」が何であるかについて悩む必要が無い
2. 学習サンプルの数が増えるにつれ局面の場合分けが勝手に細分化することで、パラメータ数のスケール相当の作業も全自動で進行
3. 対戦時の評価関数は1つの場合の中の形勢だけ説明すれば良いので、個々の場合の中で異なる棋風の交絡は起き難い。

なお、学習サンプル集めは特徴1さえ満たせばオンライン学習でもバッチでも可能


■ 局面の自然な場合分け
終盤の局面から場合分けを学ぶ。次の通り、終盤の局面は考えやすい。

1) 終盤の局面は、玉に睨みを利かせている駒(必要な駒)と、そうでない駒(不要な駒)からなる。
   必要な駒の集合をキーにして分類すればまず間違い無い分類になる
    - 必要な駒は取られては困るので高い得点とし、不要な駒は捕られてもかまわないので低い得点とすれば、
      勝利という目的に局面評価を自然に整合させられる。

2) 終盤より前の局面においては駒の要/不要がはっきりせず、うまい分類キーを見出せそうにない。
   これは当方の終盤力が継続的に上昇し、「終盤の局面」の範囲が拡大し続ける ・・・(仮定1)
   という仮定の下で、考えないこととする。


■ 終盤局面内の「必要な駒」の抽出
局面をbag of KPPsとみなしてベイジアンフィルタを適用する。
このときの勝利/敗北の教授信号(局面に対する勝利/敗北のラベル付け)は、
「局面別の勝敗推定」で述べる手段で推定して与える。

■■■■■■■■■.■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■.■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■.■■■■■■■■■

■■■■■■■■■■■■■■■■■■■x■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■.■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■...(.(■■■■■..■■■■■(.,.,.))/.(■■■■■..■■■■■(.,.,.)))■
(■■■■, ■■)■■■■■■■■■■■■■■■■(■■■■, ■■)■■■■■■■■■■■■■■■■■■■■■

■ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

なお、仮に教授信号が当方の敗北ばかり(勝利が0件)で連続した場合に備え、次の仮定をおく。
    当方が全力で戦って負けたのであれば、相手の指し回しから学習すれば(同じ負け方が回避されることにより)強くなれる ・・・(仮定2)
この仮定の下では、相手の指し回しは勝利の学習サンプルとみなせる。


■ 局面の場合分け
局面ごとの勝利/敗北の教授信号が与えられる前提で(その手段は「局面別の勝敗推定」で述べる
    局面(盤面)を適当な固定長ベクトルに変換
すれば、いかような手段でも教授信号に従い局面を分類できる。

分類器はここでは線形分離×決定木を使う。

盤面の適当な固定長ベクトルへの変換については…
前回は
  玉に睨みを利かせている駒を知りたいのだから駒の座標に注目すべきである
  → 任意の座標変換を表現し得るベクトル表現にしよう(座標の差や平均が勝手に特徴になるハズだ
と考えて変に複雑化してた;
(置駒・持駒・上手/下手毎の駒の個数が変動するから、
 盤全体の駒の座標は形勢判断にとって意味のある形ではたいへん固定長ベクトルにし難い

■■■■{■■■■}■{■■}■■■■■xx■■■■■■■■■
■■■■■■■(■■■■, ■■)■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


■ 局面別の勝敗推定
当方が全力で戦って負けたとして、投了付近では
    1. +の評価値の期間が連続
    2. -の評価値の期間が連続
    3. 投了
という経過を辿るはずである。(頓死等、2の期間の長さが0手のケースもある。)

1の期間の当方手番局面は、当方が形勢判断を誤った局面と考えられる。
ただし、相手が優勢だったとする確証は乏しい。
(∵当方の形勢判断能力不足で相手が助かった可能性がある。

2の期間は、当方が全力で戦って評価値を覆せなかったのだから、相手が優勢だったのだとかなり確信を持って言える。
少なくとも仮定2の下では、相手手番を勝利の学習サンプルとみなして問題無い。

よって、2に属する局面の当方手番を「敗北」、相手手番を「勝利」とラベル付けして学習サンプルとする。


■ 評価関数の調整
上記1の期間に属する当方手番局面を分類器で場合分けし、その場合に対応する評価関数の評価値を下げる調整を行う。
(ボナンザメソッド風にパラメータを振って探索し、評価値が下がるポイントを探す


■ その他
Futility purningやnull move purningのしきい値を自動調整するしくみを備えています。
(一定回数ごとにpurnせずに探索し、結果を蓄積→ヒストグラムの上側x %点をしきい値にする。


■ F.A.Q.
Q1. 最適化の行き届いた探索部を有するソフトに勝てますか(・∀・)?
A1. 機械が全自動で行う局面の場合分けのたゆまぬ細分化とpurningしきい値の自動調整によりそのうち勝てる日も来るのではないでしょうか。
  (対戦相手が開発に飽きるまで続ければ。)

Q2. 評価関数はどういうものですか。
A2. 駒の移動の可能性は探索でもって確かめるとして、評価関数では
        駒がそこに居る価値
        駒の攻撃可能性
    だけを評価します。
    具体的には次の通り。
///     - 相手玉への利き
///     - 相手玉の退路への利き  (退路=相手玉の利きの中の空白マス)
///     - 相手玉の守りへの利き  (守り=相手玉の利きの中にいる相手の駒)
///     - 相手玉の突破口への利き(突破口=相手玉の利きの中にいる当方の駒)
///     - 相手玉に近い段への利き
///     - 相手駒への利き
///     - 自駒への利き
///     - 相手からの利きに対する反撃可能性
///     - 相手からの利きに対する当方利きの優越

Q3. 最適化の行き届いた探索部を有するソフトにいつ勝てますか(・∀・)??
A3. わかりません。


以上

問題提起いじょ。