2017.12.13

超文系社員が挑むAIプログラミング。「コンピュータ大貧民大会」への道!!(第四回・後編)

AIって何だ? 初心者の私がAIプログラミングで分かったこと

齋藤真祐美

P&E部門 デジタル・マーケティングセンター

2016年に電通テックに入社。ダイレクトプロモーション部署に所属し、eCRMを中心とした制作・分析業務にあたる。たまに舞台俳優(自称)。愛読書は太宰治『きりぎりす』、三島由紀夫『花ざかりの森・憂国』。

超文系の私がプログラミングに挑戦!と、 全四回にわたりお届けしてきたこの記事も、いよいよオーラスです。後編では大会当日の模様をお伝えします。超文系の私がなんとか組み上げたプログラムは果たして勝てるのか!?

目次

ついに本番当日です!

皆様こんにちは。電通テック2年目社員の齋藤です。
後編では、いよいよ大会当日の模様をお届け致します。

前回の記事では紆余曲折を経てなんとかプログラムを提出しました。そして大会当日は、シンポジウムということで参加者の方々の前で、自分のプログラムについて発表する機会までいただくことに…。果たして大丈夫なのでしょうか!?

大会連覇中のチャンピオンにインタビュー!

というわけで、迎えた大会当日! 「調布祭」が開催されている、電気通信大学にやってきました。いやー、お祭りということで、賑わっていますねー。

なんと大会の前に、「コンピュータ大貧民大会」の無差別級で3連覇の大渡勝己さんにお話を伺う機会をいただけました!

無差別級3連覇の大渡さん
齋藤

これまでに3連覇もされている大渡さんですが、強さの秘訣は何でしょうか。

大渡

圧倒的にプログラミングにかけた時間が長い、というのが一番の理由かもしれません。参加歴は5年ですが、初めて無差別級に挑戦した2014年は、前年の大会が終わってすぐ次のプログラムを書き始めたくらいなので。当時は一日中、大貧民のことを考えていました(笑)。

齋藤

今回の大会にかける思いは?

大渡

今年は、あまり時間がとれずプログラムにあまり手を加えられませんでしたが、モンテカルロ法※1特有のシミュレーションを繰り返し行う部分は、去年より強くなっているはず。機械学習による不完全情報ゲームがどのように展開されるのか、初めて見る方もいらっしゃると思うので、ぜひ、楽しんでもらいたいなと思っています。

なんという余裕のコメント…。これが王者の風格なんですね。私も気を引き締めて、本番に臨みます

いよいよ、大会スタート!

この企画の全編にわたってご指導いただいた西野哲朗先生による開会宣言

それでは、いよいよ開会です。
この大会は、実行時間の長い「無差別級」と、実行時間の短い「ライト級」の2つの階級に分かれて戦います。大会は、まず無差別級の試合を開始し、試合が進んでいる間にシンポジウムが開催、そしてシンポジウムが終わると、ライト級の試合が始まります。

会場真ん中のスクリーンに、無差別級の戦いがリアルタイムで映し出されるわけですが、意外と淡々と進んでいくのが印象的でした。
それもそのはず、出場者は全てプログラムですから、人間のように喜んだり怒ったりはしないのです。
そして、この大会で一番驚いたのは、一回戦につき5,000ゲームもすることです。人間のプレイヤーだったらまず考えられないゲーム数です。一体何日かかるのでしょう! しかしこの大会では戦うのはプログラムですから、無差別級でも数十分、ライト級なら数分で終わってしまいます。

無差別級のゲームが始まったので、同時進行でシンポジウムが開催されました。
人前で発表するのは、大学生の時以来…いえ、そこまで優等生ではなかったので、もしかしたら生まれて初めてかもしれません。 ともかく、緊張でガチガチになりながらも、今回の企画の経緯と私の提出したプログラム「sand67」についての発表を終えました。他の参加者の皆さんが、温かく発表を聴いてくださったことが印象的でした。

無差別級で4連覇達成!大渡さん

シンポジウムを終えると、無差別級のゲームの結果が出ていました。無差別級は決勝戦のみを行ったため、この順位がそのまま大会の順位になります。
決勝戦の結果、大渡さんのプログラム「Blauweregen」が優勝しました! これで大渡さんは無差別級4連覇になります! おめでとうございます!

無差別級の結果発表が終わり、すぐさまライト級の予選が始まります。
今回は、ライト級の出場プログラムを2チームに分け、それぞれのチームの上位2プログラム(つまり大富豪と富豪)が決勝に進めます。
ゲームが始まってしまうと、製作者は見守るしかありません。皆、自分のプログラムは己の子供のようなものです。自然と、同じ年の子供を持つ親たちのような一体感が生まれます。
予選の結果、私の提出した「sand67」は見事富豪になり、決勝進出を果たしました!
思いがけない展開に、頭が追いつきません。
しかし、驚く間もなく決勝戦が始まります。決勝戦では、各チームの大富豪、富豪に加え、予選で惜しくも負けてしまったプログラムの中から敗者復活戦を行い勝ち抜いた1プログラムの計5プログラムが戦います。

決勝戦では、予選の倍の10,000ゲームを行い、優勝プログラムを決定します。
再び製作者たちは固唾を飲んで試合を見守ります。
決勝戦の結果、「sand67」は第4位に入賞することができました!

これまで頑張ってきた甲斐があるというものです。ですが、少し悔しくもあったので、次はメダル圏内(第3位以上)を狙いたいところです。
全てのゲームの結果が出て、表彰式の後、閉会となりました。

「モンテカルロ法」の強みが見えた試合だった

入賞の余韻も冷めやらぬまま、見事優勝を果たした大渡さんに再びお話を伺うことができました。

齋藤

連覇達成おめでとうございます。今回の勝因は何でしょうか?

大渡

2位の方がディープラーニングを利用した浅い探索を採用していましたが、
モンテカルロ法によって試合終了までを考慮することは、大貧民のような複雑な勝負においては強みになるのかな、という結果になったかと思います。私と同じモンテカルロ法で追随してくれる選手の方がまだ出ないのは残念でしたが…。

齋藤

来年に向けての抱負をお願いします。

大渡

今回は、自分よりさらに強いプログラムが出てくることも期待していたのですが、結果的には優勝になりました。来年は、私を凌ぐような強敵が現れることを期待しています。
今後も続けていきたいですし、もっと大貧民大会を盛り上げていきたいので、多くの方に興味を持っていただけたらと思います。

「kou2」製作者を指導した但馬先生にインタビュー

さらに、スペシャルゲストの登場。但馬康宏先生は、今回私のプログラムの基礎となった「kou2」の作者である田頭幸三さんを指導をされた方です。私が改良した「kou2」のプログラム、但馬先生の目にはどのように映ったのでしょうか?

齋藤

「kou2」のプログラムを理解するため論文も読ませていただいたのですが、文系の私にとって、とても面白い体験でした。

但馬先生

「kou2」は、作者の学生が3年間かけて完成させたプログラムです。これをさらに改良するのは、かなり難しい体験だったのではないでしょうか。既存のプログラムを組み替えるというのはゲームに限らずプログラマーはよくやることですが、その際は作者の意図を汲むことが大切です。ですので、齋藤さんが最初によく論文を読まれて理解された上でプログラミングをされたのは、結果的に成功だっだと思いますね。

齋藤

「kou2」の変数に使われている数値にはどのような根拠があるのか、論文を読ませていただいて理解できました。それを変えるか、そのままにするか、判断するのはとても難しかったのですが。

但馬先生

変数の数値にはプログラマーの意図があって、「kou2」の場合は実験を重ねながら値を設定しています。作者は実際にカードゲームの大貧民が得意な学生でして、戦略にもこだわりを持っていたようです。

齋藤

人間味のあるプログラムなんですね。今回、私は「kou2」に「一番強いカードを必ずしも出さない」という戦略を組み込んだのですが、惜しくも負けてしまいました…。悔しいので、次回もまた参加したいです(笑)。

但馬先生

これにめげず、ぜひ次回も出場してください。

私が「AI大貧民大会」で学んだこと

大会を終えて、今回大変お世話になった西野先生からコメントを頂戴しました。

「齋藤さんは、何よりもまず非常に運が良かったと思います(笑)。そしていいセンスをお持ちなのではないでしょうか。過去の優勝プログラムを改訂したからといって、強くなるとは限りませんから。また、文系である齋藤さんが今回のように大会に参加してくれたことで、プログラミングの門戸がより開かれたと思います。」

今回の企画を通して、プログラミングにはある程度の“曖昧さ”が重要だということが分かりました。例えば、私の作戦であった、『毎回、必ず優先順位第一位のものを出すのではなく、たまに第二位のものを出す』に関して言えば、“たまに”という確率は言葉にすると簡単ですが、プログラミングの際には「5回に1回」とか「10回に1回」というように定める必要があります。ではその“たまに”とは確率にすると何パーセントなのか、という定義は、誰が定めるものなのでしょうか。私たち人間は、きっと、どこか肌感覚のようなもので“なんとなく”決めているはずです。
その“なんとなく”を少しでも解明できれば、プログラミングをもっと”広告”に応用できるのではないでしょうか。
連載の第一回目で、西野先生は「研究として大貧民が面白いなと思った点は、人間が大貧民をプレイする時、必ずしも勝つことが目的ではないということです。」「(大貧民に)『人間らしさ』を見出せるのではないかと思って魅力を感じました。」と仰られていて、私はとても共感したのですが、その魅力を身を以て知ることができた体験でしたし、AIやプログラミングがこれまで以上にもっと身近な存在になりそうです。

また、プログラミングの際に、文系として学んできた読解力が生きたことも大きな気づきでした。 西野先生も度々、「文系・理系という分け方をしているのは日本だけだ」というお話をしてくださいました。実際、私も、学生の時には自分が文系であると意識したことはありませんでした。ただ文章を読むことが好きで、これまで本だけは人並み以上に読んできました。その下積みがあったからこそ、「kou2」に関しての論文も読むことができたのかもしれません。

私の初めてのプログラミングへの挑戦は、大会4位入賞という形で一旦終わります。
しかし、既に「あそこをああすればよかったかなあ」「あの数値をいじったらもっと強くなるかな」と思い始めていますので、次回もひょっとしたら「AI大貧民大会」でお目にかかるかもしれません。皆さんも参加してみませんか?

長きにわたる私の奮闘記も今回で終わります。
ここまでお読みいただきまして、ありがとうございました!

(※1)ランダムなシミュレーションを繰り返すことで得られる勝率から次の一手を求める手法。