やねうらおさんに反応されてた(汗汗
http://d.hatena.ne.jp/yaneurao/20080525#p1
色々検討されていた様ですが、実は私はそこまで深く考えてないんですよね。
と言うより、パラメータ手打ちの場合と学習する場合とでは根本的に考え方を変える必要があると考えています。
手打ちの場合は、可能な限り特徴の数を絞り込んで*1、比較的少数のパラメータをきちんと設定する。
学習する場合は、有効かどうかはプログラムに判断させれば良いので、必要かどうか迷った特徴も評価関数に組み込んでおく。
普通、自玉と周辺の自駒(守り駒)、自玉と敵駒(敵の攻め駒)との関係を評価する。これは将棋は厚みを削り合うゲーム(→将棋方程式を発見した!(1) http://d.hatena.ne.jp/yaneurao/20080406)なので、それを真っ先に評価するのは当然である。
http://d.hatena.ne.jp/yaneurao/20080525#p1
例えばここなんかは手打ちの人の感覚なんじゃないかと思います。
仮に"自玉周辺"を25近傍として実装しちゃうと、学習中に「2筋離れた位置の自駒について評価したい」とプログラムが判断しても、プログラムが自分自身を実装し直せない限りはどうしようもありません。
なので、私は二駒の相対位置の評価を「盤上全ての二駒に対して」評価させています。
んで、実際ん所どうなのかと言うと、王将とそっぽの駒や、飛車と5筋離れた歩みたいに、互いにほとんど影響の無い二駒のパラメータは、ほぼ0になっています。
という訳で、「有効かどうかはプログラムに判断させ」るのは、ある程度上手く行っている様です。
*1:どの程度絞り込むかは開発者の棋力次第だと思います