2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

tweet

  • tweets

« 2011年12月 | トップページ | 2012年2月 »

2012年1月

学習も人工知能も使ってません

電王戦後2週間は各種新聞・TV・Webメディア等の取材がほぼ毎日のようにありました。対戦前もかなりあったし。当然ながら取材の記者さん達はそれほどコンピュータ将棋に詳しくはないので、できるだけわかりやすく誤解のないよう説明し…たかったんですけどこちらもなかなかこういう説明に慣れていませんで、うまく説明できたかあまり自信ありません。で実際掲載された記事を見ると「何か違くね?」という感想を持つこともままあるのですが、まあこっちの説明がまずかったせいだろうとか思ったり。

そういう数ある「すれ違い」の中でもいちばん際立っているなーと思うのが「(機械)学習」です。ちょっとこのことについて書いてみます。

ボナンザが評価関数で機械学習を導入した、ボンクラーズもそれを取り入れてる、というのはまあかなり有名になりまして、記事でも書かれました。でもそのトーンが、専門家でない一般の人向けの記事で「ソフトが学習して強くなった」みたいに書かれると、読者の思い描くものは実態とは全く異なる、非常に過大評価したものになってしまうケースが多い。これは問題かな、と思うわけです。

たとえば24でbonkrasがずっと対戦していて、時間がたつと「学習して強くなってきたんじゃないか?」なんてことを言われる。いやお前そんなわけないだろう、とこちらとしてはツッコミたくなるんですがw やはり「学習」という言葉を一般の人に対して使ってしまうと、そういう印象を持たれてしまう。なので、一般向けの解説では「(機械)学習」という言葉を使うのは避けて誤解を招かないようにすべきではないか、と最近は感じております。

ボナンザが取り入れた機械学習の手法を俗に「ボナンザ・メソッド」と言うんですが(以下「ボナメソ」と略記)、このボナメソは、結論から言ってしまうと、一般の人が思い描く意味での「学習」とは実は全く関係ありません。

ボナメソとは何か、を一言で言うと、「方程式の解法」です。簡単な例を挙げてみます。中学3年の数学ですが、

   y = x2 - 4x + 2

という「関数」があるとします。で、この関数で y=0 となる x の値を求めたいとする。この x の値を求めるのが「方程式を解く」ことです。

ボナンザ以前のやり方というのは、たとえて言うなら
「えーと、x=0 なら y=2 だな。x=1 なら y=-1 か。じゃあx=0と1の中間のどこかでゼロになるはずだから、んー x=0.5 くらいかな」という感じで適当に目分量でxを決めていた。それをボナメソでは、解を求めるアルゴリズムをきちんと考え、0.585... という正確な値を求める手順を定式化した、ということです。

大学理系の人なら、数値計算でニュートン法というのを覚えているでしょうか。ああいう風に
x(i+1) = x(i) - (y(i)/y'(i))
みたいな計算を繰り返していって正確な x を求めていく。ボナメソもそんな感じです。

大学理系でない人向けに別の例を挙げると、たとえば割り算の答えを求めるのに

   ____8_8._2_…_
7 ) 6 1 8
    _5_6_
       5 8
      _5_6_
         2
           :

のようにして順に計算していって正確な答えを求める。これも一つの「アルゴリズム」です。こんな感じのものだと思えば大体OK。

ボナメソではもちろん関数ももっと複雑だし変数(x)もひとつだけでなくたくさんあるのですが、要は棋譜データの集合に対してある「関数」を定義して、その関数の値を最小にする変数の組が将棋の評価関数になる、というふうに問題を定式化した。「関数を最小にする」というのは、「その関数を微分したものをゼロにする」こととほとんど同じなので、結局方程式を解くことになります。で、その方程式を解く具体的手順を示した。ここで、求める変数というのはたとえば「持ち駒の金の価値(点数)」であったり、「玉飛接近の形のマイナス点」だったりする。ボナメソとはこういうものです。

複雑度こそ違え、要はボナメソというのはニュートン法や割り算の筆算法と同じく、「方程式を数値的に求めるための解法の一種」です。(一般的な意味での)「学習」とか「知能」とか呼ぶべき物ではありません。割り算の筆算を「学習」とは言いませんよね。

もちろん、「学習」でないからと言って、ボナメソの価値をいささかも減じるものではありません。従来「大体 0.5」だったものが、「0.585」にまで精度が上がった。それによってコンピュータ将棋がかなり強くなった、というのは動かしようのない事実です。ただそれを「学習」などと実態にそぐわない言葉で呼ぶのはやめましょう、というだけです。

もうひとつ書いておくと、コンピュータサイエンスの専門の世界では、ボナメソみたいなのものを「機械学習(Machine Learning)」と呼ぶのは専門用語として定着しています。これの良し悪しはともかく、今更言ってもしょうがないというのはあるので、専門家が内容を正確に理解したうえで「(機械)学習」と呼ぶのはまあいいかなとは思います。ですがそれがひとたび専門家集団を離れて、一般向けに「学習」という言葉を使ったとたん大きな誤解を生む、という状況を最近目の当たりにしたので、警鐘の意味で記事を書いてみました。

24ログ抜粋(12年1月)

24のbonkras対戦ログ(12年1月ぶん)の抜粋を下に置きます。

「log24jan2012.zip」をダウンロード

見方の説明:
ファイル名は終局した時刻です。(ファイルの更新日時からとっている)
Jan.1.14.01.txt なら、1月1日14時01分に*終わった*対局です。対戦相手の情報はないので、24の棋譜検索等で照らし合わせる必要があります。

たとえば Jan.1.14.01.txt だとこんな感じですが、

  800176>######## CMD_FWD: mv 0107776
  800255>######## CMD_FWD: mv 0103334
1154187>######## CMD_FWD: mv 0102726
1154251>######## CMD_FWD: mv 0109394
1840479>######## CMD_FWD: mv 0102625
1840544>######## CMD_FWD: mv 6612288
2200915>######## CMD_FWD: mv e407988
2200977>######## CMD_FWD: mv 0403122
4801948>######## CMD_FWD: mv 0506978
---master end  curitd 20 c0 0 leng 2 mv 0402233 0403948 val 0
7403858>######## CMD_FWD: mv 0402233
7403937>######## CMD_FWD: mv 0403948
---master end  curitd 20 c0 0 leng 2 mv 0708222 0000565 val 4
12624252>######## CMD_FWD: mv 0708222
12624327>######## CMD_FWD: mv 0000565
---master end  curitd 20 c0 0 leng 2 mv 0000574 1616543 val 47
17900872>######## CMD_FWD: mv 0000574
17900942>######## CMD_FWD: mv 1616543
---master end  curitd 18 c0 0 leng 2 mv 0504142 5e04361 val 54
######## CMD_RWD
20582823>######## CMD_FWD: mv 6606574
---master end  curitd 18 c0 0 leng 2 mv 6107374 0108786 val -38
23185518>######## CMD_FWD: mv 6107374
23185591>######## CMD_FWD: mv 0108786
:

"master end"の行がボンクラーズの思考結果。mvの後の7桁の数字2つが、自分の指す手と、それに対する相手の予想手を表します。7桁のうちはじめの2桁はとりあえず無視して、3桁めは成りなら1。4-7桁めが駒の動きで、たとえば 0407172 なら7一の駒が7二へ移動します。打ちなら4桁めが0で、5桁めが駒種(0=歩、1=香、…、6=飛)。
valは_先手から見た_評価値を表します。プラスなら先手優勢。歩1枚が約100点。3万点以上は詰みです。

master endの行がないところは、定跡等で思考しなかったケース。
CMD_FWDは盤を進めます。FWDは通常2つ続きます:自分の手を指した後、相手がこう指すだろうと予想した手で盤を進め、そこで自分の指す手を考えます。予想が外れたら CMD_RWD で1手戻し、改めて実際に指された手を指し(FWD)ます。

その他なんかわからんことありましたらコメントで質問ください。

あまり以前のログを出してもしょうがないかと思い、最近の300局程度をアップします。ちなみにこのときはハードはテストを兼ねて、本番と同じ、12コア×6ノードでした。最初は1コア×5ノードでやってましたが、しばらくして8コア×4ノードに変更。1x5で最高R 3289まで行きました。R3364は8x4で達成。12x6になったのは元旦です。196連勝(だっけ?)は12x6で。

ほんとはハード変えるときは「フ○ーザ第二形態~」とかブログに書こうかと思っていたのですがw 1x5で3289まで行ってしまったので、これ以上あまり上がらんだろうと考え、書く機会を逸していました。変身して爆上げしないとつまらないですからね。3289以上はもう24では測定範囲超えてると思いますんで、正確なRは測れないでしょう。

ソフトは11月からあまり変わってません。入玉関連や、定跡を追加した程度。ほんとは新バージョンを開発してたんですが、間に合いませんでした。

24への復帰要望は多いみたいで、検討してはいますが、なにぶん各方面の賛同と協力が必要なので、難航しています。またbonkrasとは別に、電王戦も団体戦になったことだし、他のソフトが24に出れると面白いんじゃないかなどと考えもするのですが、まあ反対意見もあるでしょうし、とにかくもろもろ検討中です。

クローズアップ現代とか

竜王ブログでも告知ありましたが、NHKで電王戦関連番組が2つ流れます。

1月27日(金) 総合 午後7:30~7:55 ナビゲーション(中部7県)
 再放送 日曜日 総合 午前8:00~8:25 (再放送) ※静岡除く(?)
 ※中部7県とは、愛知・三重・岐阜・福井・石川・富山・静岡だそう

2月7日(火) 総合 午後7:30~7:56 クローズアップ現代(予定)
 ※まだ予定で、大事件が起こったりすると変わるかも、だそう
   2/2訂正:2/7でなく、遅れるそうです。まだ未定とのこと。
   2/7再訂正:2/8予定と連絡あり。NHK HPでも予定載りましたね

何度か取材に来まして、ボンクラーズのログから読み筋等を見て、どの辺が転機だったかとかいろいろ検討してます。で、こっちのログの情報を持って渡辺竜王や勝又先生のところに意見を聞きに行って、とかしてるようで、かなり気合入った取材をされています。乞うご期待。

私も取材中に検討していく中でいろいろ気付きもあったりしたんですが(バグ見つかったりとか^^;)、番組のネタばれになっても困るので、放送前は記事に書くのは控えますか。

ちなみに※会長も本出すみたいですが、こちらは私のとこには取材来てませんので、本の方は一方的に※会長側視点の内容のようです(ボンクラーズのログとかは出ないはず)。

電王戦評価値・読み筋

まだ解析とかできてないですが、とりいそぎ評価値と相手の応手予測データをアップします。

グラフの方は説明不要でしょう。テキストの方も見れば大体わかると思いますが、"est."はボンクラーズが予測した相手の次の手。"act."は実際に指された手。予測が当たってた場合は"act."の行がありません。駒移動で "00 ->" は歩打ちです。03, 04は銀、金打ち。

Denougraphsmall


「history.txt」をダウンロード

First Electric King

みなさんどうも~ 第一期電王のボンクラ作者です(キリ
しかしこのタイトル合ってるのか?

おかげさまで昨日は無事勝てました。午前中は千日手覚悟してたんですけれどもね。ご声援くださったみなさま、誠にありがとうございましたm(__)m

対局前はやる事山積みでブログ書いてる暇もなく、コメントの質問もレスできてませんでしたが、これからぼちぼち内幕を書いていこうかと思っております。だけど疲れたんでまずは休息^^;

【連絡】bonkras/bonkras2 1/12午後いったん休止します

直前になってしまいましたが、1/12午後に機材を一部将棋会館へ運ぶためbonkras/bonkras2をいったん停止します。で、中に「電王戦まで」の期限付きで借りてるものもあるため、その後のマシン手当てのメドが現状立っておりません。そのためしばらく休止になる予定です。

最近、対局希望者はやや減ってきていますが、観戦者は相変わらず多い状況で(さっき見たら600人)、まだ需要はあるかと思ってます。また、まだアイデアレベルですが、新しい企画等も考えてまして、近々また24に復帰したいなと考えております。
#関連各所と協議せなあかんのですが

bonkrasの戦いはまだ始まったばかりだ…

« 2011年12月 | トップページ | 2012年2月 »