2013年03月27日

コンピュータ将棋

お久しぶりです、コウスケです。

昨日はサッカー日本代表の試合がありまして、もちろん私も観戦していましたexclamation
ですが、惜しくもW杯出場を決められず残念でしたバッド(下向き矢印)

一方少々ニッチな話題になりますが、先日NHK杯テレビ将棋の
決勝がありましたパンチ
対局者の羽生さんはここまでNHK杯を24連勝・4連覇しており、
5連覇のかかった決勝でした。
残念ながら羽生さんは負けてしまい、ついに連勝がストップしてしまいましたふらふら

この24連勝というのはとんでもない記録で、プロ棋士同士なら
勝率7割であればトップ中のトップレベルとなります。
その場合24連勝ともなると、確率を計算してみると、
0.7^24 = 0.00019
すなわち約0.02%!尋常な確率ではないですね・・
これはきっと何らかの秘訣があるに違いありませんぴかぴか(新しい)

---
そんな時に、「電王戦」と呼ばれる、史上初のプロ棋士対コンピュータとの
将棋対戦イベントが先日行われました。
ニコニコ動画などでも大々的に取り上げられているので、
ご存じの方も少なくないかもしれません。

将棋におけるコンピュータ対人間という歴史は比較的長く、
古くから人工知能の分野で研究されていたのですが、
最近になって既にトップ棋士レベルに迫っているのではexclamation&questionというまでの
レベルになりました。
ハッキリいって腕にそこそこ覚えがある、という程度では
絶対に勝てないレベルにまでなっています。

そんな中、今回の対戦においては・・・
見事、プロ棋士側の勝利となりましたexclamation×2
一部では、人間では既に勝てないレベルになっているのでは・・・との見方も
ありましたが、やはりトップ棋士となると違いますねexclamation

さて、コンピュータ将棋は膨大な数の手を読むことができます。
もちろんスペックにもよるのですが、一秒間に数百万手とか数千万手とか、
とにかく人間には到底不可能な手数です。
もちろん、読む手の深さ(何手先まで読むか?)によって組み合わせ爆発
が起こるので、いかにコンピュータといえども読みの深さには限度があります。
なので、見込みのない手筋をどのように切っていくかなどのアルゴリズム
重要になります。
次に、「読む」といっても何を読むのか、ということですが、
評価関数」という局面の良し悪しを数値化したものを使います。
将棋においては、局面の評価には、駒得の度合い、駒の利き具合、
王の守り具合・・・などなど、さまざな要素(パラメータ)が存在すると
推測されます。
それぞれをどのような要素を設定するのか、どの係数で組み合わせるのか、
一次式で組み合わせるのか二次以上の式なのか・・・など、
この評価関数の設計が肝となってきます。
そのような評価関数の設計はプログラムを組む人間が将棋のルールを
理解した上での裁量になってくるので、
逆に言うとそこがコンピュータの限界、プロ棋士との差なのではないかと思います。

ならば、その評価関数もコンピュータが学習により生成すればいいのではないか
というアイデアが浮かびますが、
既にそのような研究は近年行われており、過去の膨大な棋譜から
評価関数を学習させる手法が
近年主流となりつつあり、それによって強さが大幅にアップしたようですグッド(上向き矢印)

それでも今回の対局ではトップクラスの棋士には及ばなかったということで、
コンピュータに比べ極わずかの手数しか読めないにも関わらずこの結果
というのは、改めて人間の経験による叡智というものはすごいものですね!
と感じました。
冒頭の羽生さんのNHK杯での圧倒的な勝率の秘訣も、持ち時間の
少ないテレビ将棋では
読む手数よりもこの評価関数の良し悪し(専門的には「大局観」といいます)が
圧倒的に優れているからだろう、という確信を得ることが出来ました。

プログラミングにおいても例えば良いコード、悪いコードの判断というのは
長い経験を積んでその人なりの評価関数?が無意識に作られて
評価されるものでしょう。
それに限らず、今後あらゆる作業がコンピュータに置き換わっていったとしても、
その道を極めた人間ならではの叡智は決して色あせないと思います。
プログラミングにおいてもそのような技術を身につけたいものですexclamation

今回の電王戦は全5戦制になっており、今週以降も別カードでの対戦が
一週おきに組まれていますexclamation
興味が出てきた方はぜひご覧になってみてはいかがでしょうか。
それでは。

posted by 管理人 at 16:05 | 日記