チェスは2005年くらいから、人間がコンピューターに勝つことが難しくなっています。一方の将棋。相手から取った駒を再利用できる、より複雑かつ長時間勝負。将棋においても、コンピューターは着々と勝率を上げてきています。

将棋盤

そんな状況のなか行われているコンピューター対人間の将棋戦、電王戦FINAL。
第1戦は齋藤五段が勝利。
続く第2戦、永瀬六段とSeleneの対局。
永瀬六段の鬼手にSeleneの反則負けという結果になりました。

この鬼手は、コンピューターの典型的な弱点を突いた意味深いものだと私は考えます。

対局前に渡されたSeleneのソフトに対して、永瀬六段は練習対局での勝率は1割。しかし1点だけソフトのバグをたまたま発見します。角が敵陣に入った時に、99.99%誰でも角成りといって、動きの選択肢が増加するように駒を裏返します。あえて「不成り」、つまりそのまま角のままでいる、という選択を、コンピューターソフトが認識できない。というバグに気付きます。

詰将棋ではめったにない、そして実戦ではたった数例しかない「不成り」という選択。

永瀬六段はこのバグに気付くも、それを突破口にしようと考えていたわけではありません。角成りでも不成りでもどちらでもよい局面になったとき、永瀬六段はこのバグを試してみるという決断をしました。

一方のコンピューターソフトは、たとえ稀であってもルール上に存在する「不成り」は
通常対応しています。しかしSeleneは、どこかのバージョンアップ時に抜け落ちてしまったのです。

ソフトウェアの品質は、検査で決まります。
考えられる限りのパターンを試して、期待通りの動きをするかチェックすることで、バグの混入を予防します。そもそも100%の検査ということは不可能です。なにかソフトを変更する度に、膨大な組み合わせテストをするのも非効率です。加えて今回の教訓は、「考えられる限りのパターン」というところにあります。

「考えられる」という表現からわかるとおり、結局は人間が考えた検査項目なのです。コンピューターソフトがどんなに進化しても、検査項目は人間が考えます。これがコンピューターの弱点です。

今回のバグはSeleneの最後のバージョンアップで、「不成り」の検査項目が漏れた。という検査計画における人為的なミスということができます。

自動運転など今後ますます人命にかかわるような重要な判断に、コンピューターが使われることが増えます。そしてコンピューターの裏をかくことで犯罪を計画する人間も現れます。どんなにコンピューターが進化しても、人為的なミスとの戦いは終わることはない。ということを今回の一件は暗示しています。