AlphaGoとトップ棋士の対局を観戦しよう!

"We cannot go against the trend. I think machines will beat humans someday. "
"If I get defeated it might be negative for go and this is inevitable in this modern life. However, it will not destroy the value of go itself."
(「私たちは時代の流れに逆らうことは出来ません。いつか機械は人間を打ち負かすでしょう」
 「もし私が負けたら囲碁にとってはネガティブなことですが、これは現代社会では避けられないことです。
  しかし、その敗北は囲碁自身の価値を損なうことはないでしょう」イ・セドル)
Human-AI showdown begins 1 p.m.

2016年3月9日、"AlphaGo"という人工知能囲碁プログラムが囲碁で世界トップクラスのプロ棋士であるイ・セドル九段との5番勝負の1局目に勝利しました。つい最近まで「コンピュータ囲碁ソフトがプロ棋士に勝つには、少なくともあと10年は必要」と言われていたことを考えると凄まじい歴史的快挙だと言えます。そして、単に今までにないことが起こったというだけではないのかもしれません。1局目を見た時点では、AlphaGoの実力が人間には底が見えないという、想像を上回る事態になっているかもしれないという驚きがあります。この歴史的な場面を、囲碁について詳しくない方にもリアルタイムで楽しんで頂けるよう、知っておくと良さそうなことを幾つか説明します。この文書をお読みになると、AlphaGoとは何か、イ・セドル氏はどのような棋士なのかなどがなんとなくわかって、対局中継を楽しめるのではないかと思います。


以下、QA方式で説明します。
"by ***"は回答の根拠を示しており、適宜必要な場面で挿入します。
"論文"は次の論文を指しています。
https://gogameguru.com/i/2016/03/deepmind-mastering-go.pdf
それ以外にドキュメントがある場合はURLやタイトルを直接記載します。
明記できる文献がない場合(見た記憶はあるが具体的なドキュメントが引っ張り出せなかったケースも含めます)や筆者の弁の場合は"筆者"と記載します。


Q. どこで観戦できるの?
A. 以下をご覧ください。
囲碁プレミアム
囲碁プレミアム - 生中継|囲碁・将棋チャンネルホームページ

google公式 (英語)
https://www.youtube.com/watch?v=vFr3K2DORc8

ニコ生(実況なし)
【世紀の対局を実況】囲碁 イ・セドル九段 vs アルファ碁 第2局 - 2016/03/10 13:00開始 - ニコニコ生放送


Q. AlphaGoって何?
A. Google(の人工知能研究開発を担当するGoogle DeepMind)のコンピュータ囲碁プログラムです。

Q. なんで囲碁プログラムが人間に勝つのは難しいといわれてきたの?
A. 囲碁はどういう手が良いかを探す範囲(これを情報科学の用語で「探索空間」と言います)が巨大なことと、盤面の形勢や打った石(これを囲碁の用語で「着手」と言います)の善し悪しの評価が難しいからです。
囲碁プログラムが人に勝てるとしたら10年は先ではないかと言われていました。
by 論文

Q. AlphaGoはいつから、なぜ話題になっているの?
A. 話題になった理由は、主にプロ棋士に勝ったからです。これは囲碁プログラミングにおいて世界初の偉業です。昨年10月にヨーロッパチャンピオンであるFan Hui氏を5戦5勝で下していたという論文が今年1月になって公開され、その時点で話題になっていました。そしてその際3月に世界トップクラスのプロ棋士であるイ・セドル氏と対局すると発表し、注目を集めました。
by 論文

ただし、囲碁は9路というミニサイズ版のゲームもあり、それでは2008年の時点でプログラムがプロに勝っています。
by http://minerva.cs.uec.ac.jp/~ito/entcog/contents/lecture/date/5-yoshizoe.pdf

ではなぜ1月の時点で話題になったかというと、9路と19路ではゲーム性が全く違い(厚みや模様という概念が19路にはあるが9路にはないと言って良いと思われます)、9路では勝てても、19路ではまだまだ無理だと考えられていたからだと思われます。
そして3/9にイ・セドル氏との5番勝負の第1局目が行われ、AlphaGoが勝利を収めたことで、一層の驚きとともにさらに話題になりました。by 筆者


Q. AlphaGoが昨年10月に勝った棋士はどんな方なの?
A. 欧州大会で3回優勝したプロ棋士2段のFan Hui氏です。囲碁の世界ではBayesEloという方式の棋士の強さを表現するレーティングがあり、そこではFan氏はAlphaGoとの対局時2908となっています。 by 論文
Fan氏の強さがプロの中でどの程度かは、レーティングサイト(http://www.goratings.org/)において2016/03/09時点で866人中564位です。
また、Fan氏はアマトップから平均的なプロ程度という評価をなさっているプロの方もいらっしゃるようです。
by http://go-en.com/comment4alphago.html


Q. AlphaGoが今回対局するイ・セドル氏はどんな棋士なの?
A. 世界最強と呼び声高いトップ中のトッププロ棋士です。 by https://ja.wikipedia.org/wiki/%E6%9D%8E%E4%B8%96%E3%83%89%E3%83%AB
単に強いだけではなく、これまでの定石にない型破りな手を打つこともあって非常に人気があります。AlphaGoがイ・セドル氏に勝利したならば、AlphaGoこそが世界最強だと認める方も多いと思われます。

ちなみに、現在の日本最強棋士井山裕太氏で、囲碁のタイトルは7つあるのですが、そのうち6つを独占しています。さらにちょうど今7つ目のタイトルに挑戦しています。これが実現すれば日本囲碁界初の快挙であり、過去例を見ない圧倒的な強さを誇ることになります。しかし、イ・セドル氏はつい先日井山氏を下しました。このことからも、イ・セドル氏が凄まじいということが伝わるのではないかと思われます。
by 筆者


Q.イ・セドル氏は世界最強棋士なの?
A. 実績としてはそう言っても問題ないと思います。ただ、現在最も勢いがあるのは柯潔氏だと思われます。柯潔氏はイ・セドル氏に10戦8勝しており、レーティングでも他の棋士から頭一つ抜けてのトップです。
また、柯潔氏は「AlphaGoはセドル氏に勝っても、私には勝てません」と発言しており、他にもAlphaGoとの対局に対して前向きな姿勢を見せています。
Sina Visitor System
仮にAlphaGoがイ・セドル氏に勝ち越すとしたら、最後の壁として柯潔氏が立ちはだかるでしょう。
by 筆者


Q.AlphaGoに弱点はあるの?
A.もしかしてですが、時間制限を厳しくするとAlphaGoが大幅に弱体化するのかもしれません。
AlphaGoはFan氏に全戦全勝したと一般に広まっていますが、実は1手30秒ルールで対局した場合は大体互角の戦績であることがAlphaGo論文に示されています。ある程度の時間を掛けて盤面を評価した場合は無類の強さを発揮するAlphaGoですが、時間制限を掛けた場合は直感的に次善の手を見出すことが出来る人間に軍配があがるのかもしれません。ただこれは完全に筆者の弁であり、囲碁プログラムの専門家やプロ棋士がそう言ってるわけではありません(筆者が知らないだけで同様の発言なさってる方もおられるかもしれませんが)。
by 筆者


Q. AlphaGoは他の囲碁プログラムよりどれくらい強いの?
A. 495戦して494回勝利しています。ただし、AlphaGoは単機版と分散版があります。分散版というのは、たくさんのコンピュータを統合して処理能力を高めた版です。先ほどの戦績は単機版です。分散版は単機版より強力で、分散版は単機版に対して77%の勝率、かつ、他プログラムには勝率100%です。
イ・セドル氏やFan氏との対局では分散版を用いています。
by 論文


Q. 囲碁プログラムは近年着実に強くなってきたそうだし、別にAlphaGoが飛躍的に強くなったってわけじゃないんじゃないの?
A. 何をもって飛躍的と表現するかにもよりますが、筆者としては飛躍的と主張して良い強化だと思われます。
近年の伸びに比べてそんな大差ないというのは、例えば以下のような捉え方です。
https://twitter.com/fronori/status/692958398808219648


このような意見に対しては、
・前提である「強さが線形で伸びる」が成立するかについて、筆者はとてもそう思えません。だいたい何事においてもそうですが、ある程度まで伸びると伸びしろはどんどん小さくなってきます。そもそも段は順序尺度であり、例えば1段から1.5段上がるのと5段から1.5段上がるのは全然違いますし、また、「10年後に15段伸びる」と言えばおかしいことは明らかでしょう。
・「少なくとも10年はプロに勝つのは無理だろうと言われてきた」と論文にあり、これはこの論文が自己の成長を誇大広告するためにそう述べたのではなく、コンピュータ囲碁に関わる方なら大半がそのような共通認識をお持ちではないかと思われます。
という主にこの2点から、AlphaGoは飛躍的成長を遂げたと述べて良いと筆者は考えます。


Q. AlphaGoはなぜそんなに強いの?
A. 理由は2つあります。1つはディープラーニング、もう1つはセルフプレイ(自己対局)です。
ディープラーニングは機械学習という分野の手法です。これを活用すると、人間がどのような手を打つべきかを延々コンピュータに情報入力するのではなく、棋譜囲碁の対局内容を記述したもの)をひたすら読み込ませるだけで、どのような手がより良い手なのかを自動的に見出してくれます。*1AlphaGoではKGSというインターネット囲碁対局サービスから棋譜を取得し、それをディープラーニングへの入力に活用しています。
そうして得た「こう来たらこう打ったほうが良さそうだぞ!」という知見をセルフプレイを繰り返すことで磨き上げることで強化したのがAlphaGoです。
さらに言うと、ディープラーニングにもセルフプレイにも凄まじいコンピューターリソースを用いており「なるほどこれはGoogleのような金を持ってる大企業じゃないと出来ないわ…」という物量による下支えも強さの秘訣です。

2015年以前の囲碁プログラムにディープラーニングは活用されていませんでした(筆者の調べた限り)。そもそもディープラーニングが活用されだしたのがここ3年くらいだというのもあります。
ただ、現在は囲碁プログラムにディープラーニングを用いるというアイデアは他でも研究されています。また、次のようなお手軽な価格で購入可能なディープラーニングを用いたプログラムもあるそうです(筆者は試していません)。
平塚の囲碁四段の詳細情報 : Vector ソフトを探す!


Q. 論文に出てくる「モンテカルロ木探索(MCTS:Monte Carlo Tree Search)」はAlphaGo独自手法なの?
A. MCTS囲碁プログラムの現在主流のアルゴリズムです。2006年のCrazy Stoneが初出です。
MCTSが出てくるまでは「どのような手が良いか」を判断する「評価関数」を人手で決めていました。現在の囲碁プログラムは強力になりましたが、その足掛かりとなったのがこのMCTSで、大変重要なアルゴリズムであり、囲碁プログラミングを根本から変えたものです。
そのアルゴリズムの骨子を簡単に説明します。
ある局面から以降ランダムに着手することを繰り返し、最後まで(もう石が置けなくなる状態まで)打ち切ります(これをプレイアウトと呼びます)。プレイアウト時の勝敗数から勝率を算出し、最も勝率が高い手を選択するというのがMCTSです。
by
http://www-erato.ist.hokudai.ac.jp/docs/summer2012/compgo_plan_pub.pdf
AlphaGoもディープラーニングやセルフプレイなどを利用し工夫していますが、やっていることはMCTSです。
*2


Q. AlphaGoは囲碁のためのプログラムだけど、その研究結果は何か他に応用できるの?
A. 可能です。AlphaGoは汎用的な機械学習の手法を用いています。また、強化のアプローチも汎用的です。
by 論文

これがチェスプログラムのディープブルー*3との大きな違いです。ディープブルーはあくまでエキスパートシステムであり、人間がチェスのためだけに設定したパラメタに従って動作しています。チェス以外のタスクをこなそうと思ったなら、チェス以外のパラメタを人間が与えなければなりません。しかし、AlphaGoは極論すればデータを与えればそこから目的に合わせて自動的に適切な振る舞いをするよう学習します。タスクを切り替えたければ、与えるデータを変えるだけで良いのです(あくまで原理的にはですが)。
by 筆者

ディープマインドの共同創業者で最高経営責任者(CEO)のデミス・ハサビス氏は「いちばん重要なのは、AplhaGoは人間のプログラミングによって設計された、単なるエキスパートシステムではないという点です」と語ります。「代わりに一般的なディープラーニング(深層学習)のテクニックを使って、どうやって囲碁の試合に勝つかを AlphaGo自らが学んでいくんです」と述べています。

DeepMindのAI「AlphaGo (アルファ碁)」は何を変えるか? – Nobuyuki Kokai Blog

Q. AlphaGOの登場で意気消沈されてる囲碁プログラミングの方がいらっしゃるのはなぜ?
A. あくまで私見ですが、一般人に実行可能な伸びしろがないからだと思われます。
MCTSが登場した際は、分かりやすい問題点がたくさんありました。アルゴリズムが洗練されているとはいいがたく、また、マシンスペックの問題もありました。
そのため、いくらでも強化できるポイントがあり、しかも途中参入しやすかったと思います。
そもそも登場してすぐは「職人が一つ一つ丹精込めて作った評価関数より、でたらめな手をたくさん試すとかいう手法が勝てるはずない」というようにMCTSのアプローチに懐疑的な方もいらっしゃったように思われます。
また、囲碁囲碁による囲碁のためだけのプログラムであるならばまだしも、前述のように実社会に直接応用可能な役立つものであるとまで言われると、本当に付け入る隙がありません。
by 筆者


Q.英語でコミュニケーションとる際の囲碁専門用語はどうすればいいの?
A. youtubetwitter英語圏の方とやり取りしたい時は、こちらを参照してください。
囲碁用語英訳集 - 囲碁のパンダネット


Q. 囲碁やってみたいんだけど。無料で。
A. フリーソフトがあります。
囲碁ブラウザゲーム COSUMI - 無料!
バリュー囲碁4【無料版】の詳細情報 : Vector ソフトを探す!


Q. 囲碁ってどういうゲームなの?何が勝利条件なの?
A. 囲碁は陣取りゲームです。
以下の説明は正確さをかなりの程度無視して、とりあえず対局観戦を楽しむための最低限の知識を雑に把握するためのものでしかないことご了承下さい。

先手が黒色・後手が白色の石を持ち、それ交互に置いていき、最終的に自分の色の石で囲んだ陣地の大きさが自分の点数になります。つまり、自分の石でできるだけ大きく囲んだ方が勝ちです。
自分の石は相手の石に周囲を囲まれると取られます、逆も同じくです。
細かいルールはいくらでもありますが、「黒色の石で囲まれた面積の方が白色の石で囲まれた面積より大きいっぽいな。だから黒が優勢だな」くらいの認識をしていただければ結構です。


Q. 形勢とか目算とか「形」とかって何?
A. 自分の獲得した陣地の大きさは、終局時に確定します。
目算は「この辺のスペースは自分(か相手)の陣地になりそうだな」という目分量で陣地の大きさを計算をすることです。終局まで陣地は確定しないため、あくまで目算は暫定的な評価でしかありません。
形勢は各スペースの目算の結果を足し合わせて、その時点で対局者のどちらがどれくらい優勢なのかです。
「形」は「まだ確定してはいないけど、ゆくゆくは陣地になりやすそうな石の配置」程度の意味だと捉えてください。取らぬ狸の皮算用な感じのものです。
形勢や形の良し悪しはプロでも正確に捉えるのは難しく、人によって評価が異なることもよくあります。

ここら辺の曖昧でふわっとした概念が囲碁にはあることを念頭に置いておくと、観戦や解説視聴をより楽しめると思います。厳密さにこだわらず、なんとなくで把握すれば大丈夫です。


Q. 結局イ・セドル氏とAlphaGoとの1局目はどうだったの?
A. 説明しづらい1局でした。
こちらをご覧になると良いでしょう。
【AlphaGo】イ・セドルvsAlphaGo Googleディープマインドチャレンジマッチ第1局速報(※16:57更新終了) : 【nitro15】

筆者は囲碁プレミアムにて対局をリアルタイムで視聴していました。
www.youtube.com
解説は石田芳夫二十四世本因坊で、この方はコンピュータの異名をとるほど形勢判断が正確な方です。また、ニコニコ動画での対局実況やtwitterでのプロ棋士やアマチュア囲碁ファンのツイート、2chの実況などを横目に眺めていました。なお、筆者は一番勉強してた学生時代でも部内・ネット碁初段程度、現在は5級あるかないかくらいの棋力です。これは、基本の定石や手筋は知ってて、精度の低い形勢判断であればギリギリできるかなという程度です。

対局の内容は、序盤イ・セドル氏が珍しい手を打ち、30手目くらいまででもう完全にイ・セドル氏が勝つに違いないと素人目にも見えるような状況でした。AlphaGoはなんだかぼんやりとしたそれでいてゴリゴリに力押しの手で、イ・セドル氏が華麗にかわしていて、イ・セドル氏ご自身も優勢を確信してあまり厳しい手を打ってないように思われました。自分が優勢の時に一か八かの切り込み特攻を行う必要はありません、悠然と構えていればいいのですから。ヘボ碁打ちの筆者の感想なんてどうでもいいですが、プロ達の評価も形勢イ・セドル氏良しでした。ニコニコ動画の解説で、イ・セドル勝利間違いなしと明言していました(真剣にではなく、ノリで言ってる雰囲気もありましたが)。

ところが、40手目から50手目くらいで、なんかふんわりよくわかんない形勢になってきました。まぁ、でもイ・セドル優勢は揺るがないかなと筆者は思っていました。ですが、この辺からちょっとずつプロの解説者たちが「よく分からない」と言うようなことを漏らすようになってきたように思われます。こんな序盤ではまだ陣地は確定せず、形勢は揺れ動くものです。目先の陣地確保にこだわるより、形の良し悪しの方が後々効いてきます。確かに、多少イ・セドル氏は陣地確保の面で甘いところがあったのかもしれませんが、形ははっきりイ・セドル氏良しです。遅かれ早かれイ・セドル氏の優勢は濃厚になっていくでしょう。AlphaGoはプロもイマイチと評価するような手ばかりですし。

中盤に差し掛かると、どんどん形勢があやふやになってきました。どっちが優勢なのかわかりません。頼りのプロの解説も、段々歯切れが悪くなってきました。これはイ・セドル氏が何か大きなミスをしたら逆転される程度に不味いかも…という雰囲気を感じます。序盤、あれだけ綺麗に見えていたイ・セドル氏の形も、今やあまり活かされてないように見えます。

後半に入ると、形勢はもう全くわかりません。形の良さが活かされていません。どちらも厳しい勝負手を打ったりやるかやられるかの殴り合いを挑んだりするのではなく、淡々と進行していってるように見えます。なのに、この頃になると、プロ解説者がAlphaGoの優勢を口にするようになってきました。

終盤、ニコニコ動画のプロ解説者はAlphaGoの勝利を断言しました。石田氏はもっと慎重な発言をしていたのですが、ここに来てとうとうイ・セドル氏の旗色の悪さを認める発言をするようになりました。時々首を振り、苦しそうな表情を浮かべるイ・セドル氏。そして彼はまさかの投了(ギブアップ)を告げました。







Q. 感想は?
A. 怖いです。何かが人と違う気がします。
以下は本当にグダグダとした筆者の独り言で、真に受けない方が良いです…。

下馬評はイ・セドル氏優勢でした。AlphaGoが勝つには、イ・セドル氏のミスにつけこむとか、機械ならではの奇妙な手で翻弄するとか、そういうハプニングに近いものが必要だと思っていました。しかし実際は、AlphaGoが淡々と勝利を収めました。なぜAlphaGoが勝ったのか、筆者には全くわかりません。イ・セドル氏に何か具体的な大きなミスがあったわけでも、AlphaGoに驚きの妙手があったというわけでもなく、いつの間にか形勢が移り変わっていたような気がします。途中までの形勢は明らかにイ・セドル氏に傾いていたように見えていました。なぜなら形が良かったからです。ですが、この形の評価というのは難しく、とらえどころがないものでもあります。普通、形勢不利とみなしたら、相手の陣地を奪うために深く切り込んでいきます。ところが、この1局ではどちらもそれをしていなかったと思います。そこが怖いです、つまりはAlphaGoもイ・セドル氏もどっちも自分の方が形がよいと考えていたのだと推察します。プロ棋士たちの評価は途中まで皆さんイ・セドル優勢で「AlphaGoはもっと切り込んでいくべきだ、なのに未だにそうしてないとは、AlphaGoの形勢判断は相当甘いな、ふふん!」と仰られているように筆者には見えました。それが、終わってから振り返ってみると、AlphaGoが勝利したのですから、AlphaGoの形勢判断の方が正しかった(ミスや妙手でひっくり返したのではなく、地力での勝利なので)と言わざるをえなかったようです。リアルタイムでプロの解説が徐々に不穏な雰囲気を帯びてきて、前言撤回する方が多くいらっしゃったことがとてつもなく印象的でした。これは「プロ棋士ともあろう者が、一旦口にした形勢判断を撤回するとは何事か!」と揶揄してるのでは一切なく、それ程に形勢判断が人間とAlphaGoで異なるのではないかという畏怖があるからです、
まとめると、AlphaGoはイ・セドル氏を含めたプロ棋士とまるで違う形勢判断をしており、それが結局正しかった。大げさに言うならば、人間と違う域に達しているかのようです。

ある意味地味な1局でした。うおおおおおおおお!と盛り上がる局面もなく、穏やかに進行しているように思われました。筆者はなんだかんだいって人間の肩を持ちたいという心情のため、イ・セドル氏に何か明確なミスがあれば「そこを改善して次こそイ・セドル氏が勝つんだ!」と言いたいところでしたが、どうにもこうにも地力の違いのような気もします。このままではAlphaGoの5戦全勝も十分あり得るのではないかと現時点では思っています。

ただ、イ・セドル氏は独創的な手を打つことに定評がある最高峰の棋士です。今回の1局は(筆者程度の棋力の人間が言うのは大変お恥ずかしいのですが)イ・セドル氏らしからぬ碁だったように思われます。本来の実力を発揮すれば、ここからの逆転勝ち越しも全く不思議ではありません。それを期待しています。それでいて、これがイ・セドル氏の不調ではなく、AlphaGoが人間と違う域に達しているがためにどうにも打ち回しが窮屈に抑え込まれていたのだとしたら、それは…。

*1:この辺の話は面白いので、詳細をまた後日書きたいなーと思います。

*2:論文読解にチャレンジなさる方へ。論文に出てくるrolloutは上記資料でいうプレイアウトのことだと思います。筆者はそもそも囲碁プログラムに関する英語論文読んだのこれが初めてだったので、rolloutって表現は初見なのですが、こっちの方がむしろ通じるんでしょうか?

*3:1996年、当時チェスチャンピオンであったガルリ・カスパロフ氏に勝利

厚みと模様とAlphaGo

GoogleのAlphaGoというプログラムが、韓国のプロ棋士であるFan Hui氏と囲碁で対局して勝利したというニュースが世界を駆け巡りました。
それについての参考資料のまとめと、思ったことをつらつらと。一点注意ですが、AlphaGoのアルゴリズムを解説するという内容では一切ありません。

論文

Mastering the Game of Go with Deep Neural Networks and Tree Search
https://storage.googleapis.com/deepmind-data/assets/papers/deepmind-mastering-go.pdf

参考書籍

コンピュータ囲碁 ―モンテカルロ法の理論と実践―

コンピュータ囲碁 ―モンテカルロ法の理論と実践―

人間に勝つコンピュータ将棋の作り方

人間に勝つコンピュータ将棋の作り方

「コンピュータと対戦した人間は何を考えるのか?」についてはこちら。
読み物として面白いのでお薦め。
われ敗れたり―コンピュータ棋戦のすべてを語る

われ敗れたり―コンピュータ棋戦のすべてを語る

棋士ランキング

Go Ratings
今回のFan Hui氏は633位、スコアは2916*1

ソフトウェア

強いだけではなく、各種指導モードがあり、ルールを知らない入門者からアマ上級者まで楽しめるソフトウェアです。

ネット対局サービス

KGS Go Server
世界中のプレイヤーと対局可能なサービスです。
棋譜管理や検討、レーティングなどの豊富な機能があるにも関わらず無料で利用出来ます。
登録せずゲストプレイも可能なので、とりあえず打ってみたいという場合にもお薦めです。

雑感

今回のニュースは、囲碁好きで機械学習に携わったことがある方なら誰でも強い衝撃を受けるものだと思います。ただ、囲碁は知らないけど機械学習に詳しい方からすると「将棋やチェスで既にコンピュータが勝利しているのだから囲碁も例外ではないだろ?何を驚いてるの?」と言われそうです。これはちょっと囲碁経験ないとご理解頂けない感覚かなーと思ったため、何をぼんやり考えているのかをつらつら書き連ねたいと思います。これ読んでもマジで得るモノは無いです。あと私は一番勉強してた時ですら初段届くかどうか程度だったので、高段者の意見は全然違う可能性があります。

よく囲碁のプログラムを作成するのが難しい理由として、「盤面が広いから」を挙げられることがあります。
例:【やじうまPC Watch】Googleの人工知能が初めて囲碁で人間に勝利 〜10の170乗通りの選択肢の壁を破る - PC Watch
理由の1つとしてはその通りなのですが、囲碁の難しさは計算量だけではありません。難しい理由のもう一つ、そして私が最大の理由だと考えるのは、「評価関数がわかりにくいから」です。囲碁にはチェスのように「クイーンはポーンより重要」だとか、「単なる移動よりかは相手の駒を取る動きの方がより重要*2」だとか、そういうわかりやすい評価基準がなかなかありません。特に評価基準作成が困難なものとして、囲碁には「厚み」という大変捉えどころがない、けれど盤面で非常に重要な概念があります。囲碁番組を見ていると、プロですら評価が一致してるかと言われると微妙で、しかもそれを利用する(好む)かは棋士によって千差万別です。「で、その厚みって何ですか?」と聞かれるとすごく説明に困るのでとりあえずwikipedia貼っておきますが、この説明読んで理解出来ると思えないですしこの説明がしっくりくるかと言われると難しいところですが、これ以上どう説明していいのかよく分かりません。
厚み (囲碁) - Wikipedia
さらには「模様」というこれまた打たないことにはよくわからない概念もあります。
模様 (囲碁) - Wikipedia
多分これ両方読んで頂いても余計混乱するだけと思いますし、結局厚みと模様が何でどう違うのかわからないと思いますが、多分囲碁始めるとなんとなく分かると思うのでやりましょう、KGSで待ってます。

ちょっと話は変わりますが、私が囲碁を初めた際、たまたま武宮正樹 - Wikipedia氏の書籍が図書館にあったのでそれを読んで布石や手筋を学びました。当時は意識していなかったというか棋風の違いというのを知らなかったのですが、武宮氏は宇宙流という「厚み万歳!!大模様万歳!!!」な棋風の持ち主で、書籍にも「目先の地*3を取ることに拘らず、厚みを築きましょう」という旨の教えがありました。そこでなんとなく厚みというのを肌で感じ、それが性に合ったため、今も厚み万歳で大模様を張りたいという思想が根付いています。そういう背景があるため、私が囲碁のプログラムを見る際は「厚みをどう活かす仕組みになっているのか」、「厚みをどうとらえているのか」にワクワクしながら着目します。最近の囲碁ソフトは普通に市販されているものでもアマ5段程度の強さです。これは相当なもので、人が5段取ろうとするなら、単に勉強すれば良いというものではなく、ある程度才能が求められる領域だと思われます。ただ、総合力はやはり強いなと思いますが、厚みの部分をうまく活かしているのかについては疑問なところもあります。厚みの評価はコンピュータにも、いや、コンピュータにこそ難しいのかもしれません。…と思っていたら、そこに黒船としてやってきたのがAlphaGo、難攻不落と思われていたプロ棋士を破る快挙を成し遂げました。その成功要因は、、論文読めばわかるように単純に計算量がとてつもなく物凄いというのもありますが、気の遠くなるような強化学習の果てに、これまでのプログラムとは全く異なる評価関数を手にしたというのもあるでしょう。それはこれまで割と謎だった厚みをきちんと把握して有効活用するにはどうすればいいかの知見が詰まっているのではないかと夢想しています。今後、AlphaGoの振る舞いや評価関数を調べることで「厚みとは何か」、「厚みはどのように評価されるのか」を知ることが出来るんじゃないかと期待が膨らみます!

このワクワクを「機械学習についてはプロだけど囲碁は全くやったことない」って友人に説明してもあんまり同意されなかったので「頼む囲碁やってくれ頼む!!!!」ってなってる、皆さんKGSで待ってるのではよ!!!あるいはリアルで打ちましょう、よろしく!

*1:2016/1/28現在

*2:「単なる」移動と言っています、何が何でも駒を取る手が重要だとは言ってません。

*3:取った陣地のこと。点数だと思っても構いません。

2016年現在のWindows機によるAnacondaを用いたPythonでのデータマイニング環境構築

はじめに

数年前、Windows機にPythonでのデータマイニング環境を構築するには様々な困難が待ち受けていました。依存関係にあるライブラリのバージョンが合わないというよくある話から、ライブラリをインストールする順番によって無事に動いたり動かなかったりするなど初心者殺しな落し穴があちこちで口を開いていました。ところが、2016年1月現在、全く新規に環境構築しようとしてAnacondaを利用してみたところ、意外なほど簡単に環境構築できました。

Anacondaデータマイニングの便利なライブラリを集めて一括でインストール・利用できるようにしたパッケージです。内包されているライブラリは様々な数値解析、機械学習自然言語処理、可視化、DB連携、データハンドリング、さらには最近話題のディープラーニングなど多岐に渡り、これを入れておけばデータマイニングを行う大抵の場面で対応できるでしょう。そこで、この記事ではAnacondaを用いてデータマイニング環境を構築する手順について、殆どPythonを知らなくてなおかつ非エンジニアの方向けに説明したいと思います。Anacondaは無料版(無料だからと言って機能が制限されてたり使い勝手を悪くされているわけではありませんので安心して下さい)が存在し、本記事でもそれを利用します。有料版もあり、それを利用すると様々なサポートを受けることが出来ます。「(何かあったときサポートが欲しいので)無料版しかないのでは困る」 or 「(お金が無いので)有料版しかないのでは困る」というどちらにも対応可能でありがたいです。

今回の検証環境

Windows 7 64bit (7以降なら恐らくOK

用意するもの

Anaconda(python 3系, 32bit版*1 ((2016年8月22日現在 64bit版で諸々のライブラリが動いてる+32bitだと数GBのデータ扱えずMemoryErrorで落ちるため、そろそろ64bit版に統一するので良いと思います))) Download Anaconda now! | Continuum
mecab(※形態素解析器。テキストマイニング自然言語処理をしない場合は不要)
http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html?sess=3f6a4f9896295ef2480fa2482de521f6#download
MeCab 0.98pre3 野良ビルド (pythonからmecabを利用するためのもの)
形態素解析エンジン MeCab 0.98pre3 野良ビルド - 銀月の符号

手順

1. Anacondaを Download Anaconda now! | Continuum からダウンロード。今回は"Windows 32-bit Graphical Installer 321M ver 2.4.1"を利用します。

2. ダウンロードしたAnacondaのexeファイルをダブルクリックして実行。インストール作業が自動で始まります。時々ダイアログがでますが、yes押してれば先に進みます。core i7, mem 8GBの環境でインストール終了に約10分程度掛かりました。

3. インストールが正常に行われたか簡単な確認をします。コマンドプロンプトを起動し、pythonと打ち込めばpython REPLが起動するので、そこにimport numpyと打ち込んで無事ライブラリが使用可能なこと(何か失敗してたらこの時点でエラーメッセージが色々出ます)を確認して下さい。ここまでOKなら、とりあえずAnacondaのインストールは完了です。ここから先は、必要になってから読み進めるのでも問題無いでしょう。

4. 次に、Anacondaに入っていない各種ライブラリをインストールしていきます。
この時点でpipというパッケージ管理ソフトが使えるため、それを利用すれば良いのですが、いくつかインストールできないライブラリがあるかもしれません。筆者の手元では、なぜかseabornという可視化ライブラリがpip installに失敗しました*2。それらのライブラリもgithubから個別にダウンロードすることでインストール可能でした。例としてseabornをインストールするとします。seabornのgithubページ GitHub - mwaskom/seaborn: Statistical data visualization using matplotlib から"Download ZIP"ボタンを押下してダウンロードします*3。zipファイルを展開するとsetup.pyというファイルがあります。これはpythonのライブラリをインストールする際の常とう手段です。これを利用してインストールしましょう。コマンドプロンプト上で python [seaborn zipを展開したフォルダ]setup.py install とするとseabornがインストールされます。このように、pipで入らないものも直接setup.pyを利用することでインストールできるものもあると思いますので試してみてください。
2016/4/1 追記 anaconda使ってる場合はpipではなくcondaを利用すればいいようです。

5. テキストを分析する際にmecabというツールを利用することが多々あります。pythonからmecabを利用するためのライブラリもあるのですが、実はこれがコンパイルが必要だったり適宜コード修正する必要があるなどして中々大変です。ここでは、恐らく一番簡単な導入方法である野良ビルドを利用した環境構築を行います。色々なドキュメントが出回ってますが、結局次のページの通りにするのが無難かと思います。
形態素解析エンジン MeCab 0.98pre3 野良ビルド - 銀月の符号

終わりに

上記手順で、pythonをほぼ初めて触った非エンジニアでも30分程度で環境構築できました。私が6年くらい前に初めてPythonで本格的に環境構築しようとして四苦八苦したのがウソのようです。あの時は本当に丸2日掛かっていました…。上記記述で不明点や試してみたけど上手くいかなかったよという点がある場合は、とりあえずこの記事のコメント欄にて問い合わせてください。よろしくお願いします。
皆さんが気軽にデータマイニングに取り組めますよう。

*1:anacondaでどうなるかはまだ未検証ですが、私がanaconda以外で環境構築していた他の端末で64bit版のライブラリが動かないことが時々あったため、今回は32bit版にしました

*2:ここら辺ちょっとわからなくて、pythonやpipをanacondaのようなパッケージからではなく一つ一つ手で入れた場合は特に問題無くpipからseabornをインストール出来たのですが、anacondaのpipからは上手くいきませんでした。condaでも同様です。うーん、なぜでしょう…。

*3:もちろんgit使える方はgit使ってください

刀剣乱舞集計速報_20150121

はじめに

刀剣乱舞がリリースされ早くも一週間が経過しました。
pixivでも刀剣乱舞の作品が多数投稿されているように思われます。
ここで一度pixivに投稿された刀剣乱舞のデータを集計した結果を
速報として公開したいと思います。

本稿では下記について集計します。

  • 作品別日次投稿数推移比較
  • 作品別一週間の合計投稿数比較
  • 投稿数分布
  • 刀毎各指標一覧
  • 共起ネットワーク
データ取得設定

pixivからとある方法でデータを取得しました。

データ取得期間は 2015/01/14 13:00 ~ 2015/01/21 12:59 です*1

作品によっては広く用いられている略称もあります。
私の知る限りにおいて略称でも広く通用している場合はそれもタグ検索時に用いています。
(例:艦隊これくしょん艦これ

なお、取得時にフィルタを掛けているため、
全データを漏れなく取得しているわけではないことに注意して下さい。
各作品数件レベルだとは思いますが、取り逃しはあります。

作品別日次投稿数推移比較

f:id:AntiBayesian:20150122021836j:plain
1/21の投稿数が少ないのは集計期間が12:59までだからです。
リリースから僅か5日で大人気作品である艦これや東方を超える日次投稿数に達しています。

作品別一週間の合計投稿数比較

f:id:AntiBayesian:20150122021853j:plain
艦これにあと一歩と言うところまで迫る伸びを見せています。
先程の作品別日次投稿数推移比較をご覧になればお分かりのように、
リリース当初は殆ど投稿が無かったにもかかわらず
1週間で東方を追い抜くとはかなり驚異的だと思われます。

投稿数分布

f:id:AntiBayesian:20150122021910j:plain
僅か1週間で刀剣乱舞絵を12枚も投稿された方が1名、
5枚以上投稿された方が計23名もいらっしゃる
ということが明らかになりました、尊い…。

刀毎各指標一覧

各刀名をタグに含んだ投稿についての集計です。
この表では投稿数を降順でソートしています。
複数の刀をタグに含めている投稿もあるので、
その刀単体でのスコアという意味ではないことに注意して下さい。
f:id:AntiBayesian:20150122022455j:plain

共起ネットワーク

共起とはある単語と他のある単語が文章中に同時に出現することを言います。
ある単語と共起する単語を調べることによって、
どのような単語と結びつきやすいかを把握することが出来ます。
具体的にはカップリングされやすい刀達を見付けるなどに利用出来ます。
共起ネットワークは共起関係にある単語同士を
線で結んだネットワーク図を描くことによって
共起関係を見易く表現する手法です。
f:id:AntiBayesian:20150122021932j:plain
面白いのが[打粉]-[責める]で、実に刀剣乱腐に
特徴的な独自の共起関係だと思われます。
また、[堀]が単独で存在するのは堀川と他の刀とのカップリングが頻出し、
「堀○」、「○堀」という表現があることと、
そのものずばり「掘る」というタグがあり、お察し下さい。
[R-18]-[ショタ]も、皆さん、ちょっと、おい。
他、兄弟関係なども抽出が上手くいっているので中々良い結果ですねと思いながら
元データ眺めていたら、兄弟ってそういう意味かよ、おい、皆さん、はい。
色々解釈できる共起ネットワークに仕上がりました。

分かち書き用辞書

ここから先は専門的な話になります。

本稿では文章やタグから単語を切り分けて分析したわけですが、
日本語は英語などと違って単語ごとにスペースで分割されたりはしていません。
そこで、分かち書きという文章を単語ごとに切り分ける処理が必要です。
分かち書きにはMeCabという大変便利なツールがあります。
但しこれは一般的な単語しか対応していません。
刀剣乱舞の文章をMeCabに放り込むと次のような結果になってしまいます。
f:id:AntiBayesian:20150122024351j:plain
にっかり青江がすっかりがっかりな結果になって残念です。
そこで、ユーザ辞書という「この文字列はここからここまでで一つの単語ですよ」
とを教えるファイルを適切に用意すると、
分かち書きの結果は次のようになります。
f:id:AntiBayesian:20150122024651j:plain
正しくにっかり青江が抽出できてにっこりです。
このユーザ辞書の作り方を習得するのは結構難しいので、
筆者が用意した刀剣乱舞用のユーザ辞書(SJIS)を配布*2します。
https://dl.dropboxusercontent.com/u/49326509/touken.dic

現在の進捗

f:id:AntiBayesian:20150122022703j:plain
蛍丸はよきてくれ頼む。

終わりに

五虎退+蛍丸が尊い過ぎて辛い…。


辛い~!!

*1:刀剣乱舞リリースが13時頃らしいです

*2:MITライセンス準拠

EmEditorでHSP開発できるようにしてみた

概要

この記事はEmEditorというエディタをHSP開発環境として利用する際の情報をまとめたものです。少なくともHSP既に知ってて、EmEditor常用しようかなと言う人でないと全く読む価値は無いです拝承。

はじめに

 先日、*1下記のサクラエディタHSP開発環境にするという記事が盛り上がっていました。
サクラエディタをHSPのスクリプトエディタとして使う: transient-log
確かにHSP標準エディタにも色々機能足りてないなーと思う所があったのですが、普段サクラエディタを利用していないのでちょっと設定に手こずるところもあり、私が常用しているEmEditorHSP用の開発環境に仕立てようかなと思いました。そこそこ使えるようになったので、その環境構築の手順を紹介します。EmEditorでも上記サクラエディタで出来ることほぼ出来ますので、サクラエディタよりEmEditorの方を常用してるよって方はこの記事の内容を試して見てはいかがでしょうか。

EmEditorHSP向け環境設定など

EmEditorのDL

下記URLからDL出来ます。
Unicode、巨大ファイルにも対応する Windows用定番テキストエディター! - EmEditor (テキストエディタ)
EmEditorは有料ですが、無料版もあるので、お試しならそちらを使えばよいでしょう。ちなみに私がEmEditorを常用している理由は、数十GBのファイルであってもかなり軽快に開けるからです。私はデータ解析してる人間でして、たまに数十GBに及ぶ巨大なログを目視したい時もあり、その際に便利です。多分HSP使ってる人の99.999%に当てはまらない要望だとは自覚してます。

EmEditorHSP構文ファイルを適用する

構文ファイルを適用すると、キーワード(関数名や定数など)を強調表示(平文と色分けしてくれたり太字にしたり)してくれます。まずは下記サイトからHSP構文ファイルをDLしてください。
http://mclab.uunyan.com/lab/editor/HSP_%E6%A8%99%E6%BA%96%E6%A9%9F%E8%83%BD.ESY
DL出来たら、画面上部のツールバーから「ツール」→「設定の選択」→「設定の定義」へと進み左クリックすると「設定の定義」ダイアログが出てくるので、そこにある「新規作成」ボタンを左クリックします。すると「新規作成」ダイアログが出てくるので、そこで「既定の設定を使用」にチェックを付けたまま「OK」ボタンを左クリックします。クリックすると、「新規作成」ダイアログが閉じて「設定の定義」ダイアログにコントロールが戻ります。そして「設定」欄に「新規」ってオブジェクトが出てくるので、それに「HSP*2」と名前を付けてEnterします。すると「設定」欄にHSPの項目が出来ますので、それを選択状態にしたうえで「プロパティ」ボタンを左クリックします。「HSPのプロパティ」というダイアログが出てくるので、そこから「強調(1)」というタブを左クリックし、「強調(1)」画面の下部にある「インポート」ボタンを左クリックします。そこでファイルダイアログが出てくるので、先ほどDLしたHSP構文ファイルを選択し左クリックを押すと、HSP構文ファイルの情報が読み取られて強調表示などが設定されます。

EmEditorからHSPコンパイルする

HSP3コンパイラfor EmEditorマクロ | Codetter(こーどったー)β
これをcompile.jseeなどの適当な名前を付けて保存します。
EmEditorに戻り、画面上部のツールバーから「マクロ」→「カスタマイズ」→「新規作成」でファイルダイアログが出てきますので、そこで先ほどのcompile.jseeを選択します。これで設定は終わりです。以後は「マクロ」にcompile.jseeが設定されているので、それをクリックするとか何らかのキーを対応付ければEmEditorからコンパイルできるようになります。ただ、これ私の環境ではパスの設定が面倒臭くて、HSPソース内で相対パスにて画像ファイルなどを設定した状態でこのコンパイルすると「そのパスにそんなファイルは無い」と怒られます。これちょっとめんどくさいのでどうすればいいのか思案中です。今の所絶対パスで書いてます。あとHSP標準エディタが立ち上がるのもイケてないです*3

EmEditorからHSPヘルプを呼び出す

HSPインストールされてるフォルダの中にhdl.exeというのが入っている筈です。それを外部ツールに設定して呼び出せばよいです。
ツールバーから「ツール」→「外部ツールの設定」で出てきた「外部ツール」ダイアログの「新規作成」ボタンを左クリックすると「外部ツールのプロパティ」ダイアログが出てきますので、そこに以下を設定して下さい。

  • タイトル:HSPヘルプ(何でも良いです)
  • コマンド:横の「…」ボタンを左クリックするとファイルダイアログが出てくるので、それでhdl.exeを選択
  • 引数:$(CurText)とすると、エディタ内で選択したテキストや行先頭の単語をhdl.exeに渡してくれるようになるので便利です

とこのような設定をして、これまた外部ツールの呼び出しをまたなんかのキーに割り当てれば1発で選択したキーワードを引数に与えてヘルプを参照できます。これとても便利!

サクラエディタと違って出来ないこと

多分ですが、アウトライン表示のウィンドウをサクラエディタなら任意の場所に出来るのに、EmEditorは右端固定だと思います。あとコード補完も出来ません(EmEditorプラグイン山ほどあるので、何か組み合わせたら出来そうな気もしますが)。ただ、サクラエディタのコード補完も適用出来るの標準組込関数だけなのでそんな実用するようなものではないと思います。これも僕がサクラエディタを知らないばかりに嘘ついてたらごめんなさい。最大の難点はやっぱ有料だと言う事ですかね…。

終わりに

というわけで、以上でEmEdtiorのHSP対応終わりです。HSP標準エディタと違って矩形選択が出来たりアウトライン表示が出来たり色んなマクロを仕込めるのが良いです。特にHSPって「ラベル」に対してgotoで書いていくスタイルが凄く好きなので、アウトライン表示がとてもありがたいです。アウトライン表示をすると各ラベルの一覧が表示され、そのラベルをクリックするとそのラベルの所までジャンプできます。便利!長くなったソースファイルでも縦横無尽に行き来できる!ヤッター*4

*1:私の狭い観測範囲内で

*2:これ別にHSPじゃなくても動くのですが、HSPにしといた方が分かり易いでしょう

*3:だったらお前がいいスクリプト書けと言う話ですね、はい!すみません、ちょっと試しましたがどうすればいいのかやり方が分かりませんでした…

*4:1ファイルに何百行もコード書くなというのは他の言語なら認めるけど、HSPの場合は別に良いのではという感想。依存関係とかパーツ化とか考えたりしないといけないようなものHSPでは(多分)作らないんで