2020/09/01

最弱オセロの吉田拓真氏。開発の裏側を徹底的に深堀り!

インタビュー

ライター:

株式会社AVILENのHPで公開されているオセロAI「最弱オセロ」。

https://avilen.co.jp/service/othello/?weak

「負けられるなら負けてみてくれ!」と語るのは、開発者でありAVILENのCTOでもある、吉田拓真氏だ。

有名Youtuberやテレビなどにも取り上げられるコンテンツである最弱オセロは、どのようにして生まれたのか。どんな技術が使われているのか。開発裏話を訊ねてみた。

吉田拓真氏プロフィール

株式会社AVILEN CTO/データサイエンティスト
東京大学工学部を卒業し、大学院時にAVILENを創業。画像処理をはじめとした深層学習を専門とする。
図面読取AI・書類OCRシステムなどメイン開発プロジェクトをリードしてきた。
同時に日本ディープラーニング協会認定E資格対応講座講師を務め、法人の実務AI研修を進めるなど、開発・教育・企画に及ぶ全事業の技術的支柱を成す。

最弱オセロ開発のきっかけ

――最弱オセロを開発しようと思ったきっかけは何でしょうか?

2016年くらいに発表された『AlphaGo』という囲碁のAIを見たのがきっかけです。
それまでゲームのAIを作った経験は無かったのですが、「ゲームAIって面白そうだな」って思って、自分でも作ってみたかったんです。

――将棋や囲碁などの選択肢もあったと思いますが、なぜオセロを選んだのでしょうか。

僕の目的は『ゲームAI』を作ることだったので、ゲームのルールが比較的簡単なオセロを選択しました。
ルールが複雑なゲームを選択してしまうと、ルールの記述に多くの時間がかかってしまいます。
まず、僕は囲碁のルールをよく知らなかったので、囲碁は作れませんでした。
また将棋はルールが複雑すぎて、ゲームをプレイするルールを書くのが大変すぎました。
オセロはルールが単純で、簡単にAIにプレイさせるプログラムが書けるということで、オセロを選択しました。

――そこからどのような経緯でリリースに至ったのでしょうか?

2016年末に開発に着手して、2017年の夏ごろに完成しました。
その後はしばらく放置していたのですが、2018年の8月にAVILENを設立して、11月のYahoo!との共同開催のイベントに出すためにウェブアプリ化しました。
そのアプリを調整して2019年の7月に再リリースしたところ、Twitterから爆発的に広まって、草彅剛さんやじめしゃちょーさんなどの有名人にプレイしてもらったり、世界一受けたい授業など様々なメディアで取り上げてもらえました。


はじめしゃちょーによるプレイ動画(https://www.youtube.com/watch?v=gHEqrNZmI1M&feature=emb_title)

最弱オセロ開発の裏側・使った技術

――開発に半年ほどかかったそうですが、苦労したことは何でしょうか?

AI・機械学習の知識もプログラミングの経験もほとんどない状態で、C++というプログラミング言語を使って、1から実装したことですね。普通は、Pythonや既にあるライブラリを使うのが一般的なんですけど、僕はライブラリを使わずに、全てC++で書いてます。結果約2万行のコーディングになりました。

――C++はプログラミング言語の中でもかなり難しい方と言われていますよね。なぜC++でしかも1から書こうと思ったんですか?

C++の方がプログラムの実行速度が速いからです。AIは素早く学習できないと、いつまでも強くならないから、速さはめちゃくちゃ重要なんですよ。
PythonはC++に比べると実行速度が非常に遅いので、かなり勉強してC++を使いました。
C++の勉強は大変でしたが、ディープラーニングや強化学習に対する技術的な理解がかなり深まりました。

※処理速度を比較すると、C++はPythonの約50倍の速度である。(下画像参照)

――学習モデルはどのようなものを使いましたか?

簡単に言うと、5層のニューラルネットワークです。入力は盤面情報、出力が盤面の価値(有利度のようなもの)です。
モデル構築はAlphaGOの論文を全部読んで、理論をコードに落とし込む形で完全に模倣しました。
使っていた技術は、キーワードで挙げると、深層学習、ニューラルネットワーク、強化学習、アルファベータ探索、モンテカルロ木探索など…話し出すとキリがありません。
理論系の本や論文を参考にしながら、試行錯誤しながら実装しました。

――最弱オセロに使われている技術について、もう少し詳しく教えてください。

技術の根幹は「強化学習」「深層学習」「探索」の3つです。
まずベースとなるのは「強化学習」で、AI同士を戦わせて、勝った方を「良い手」、負けた方を「悪い手」として学習させる手法です。
AIは自己対戦を繰り返して、どんどん良い手を学習させて強くなっていきます。
最弱オセロでは「負けたら勝ち」というように、勝ち負けを反対にして学習させることで、どんどん弱くなるようにしているというわけです。

AlphaGoも自己対戦を繰り返して学習している

――強化学習をベースにして、どのように「深層学習」と「探索」を組み合わせたのですか?

深層学習は、強化学習を効率的に行うために利用します。
盤面の情報を入力データとして、ディープ・ニューラルネットワークによって評価値(盤面の有利度のようなもの)が最も高くなる行動を出力します。
このようにネットワークを学習させる手法を深層強化学習と呼びます。
探索は、人間にとっては当たり前のことなんですけど、先の手を考えるっていうことですね。
例えば、将棋の名人ですと10手以上先まで考えています。このAIにもそういう機構を搭載していまして、例えば1手先に行くと、大体10種類ぐらいの盤面が出てくるわけですね。1手先は10種類。そうすると、2手先って10掛ける10の100種類とかになるわけです。3手先だと1000種類っていうふうに爆発的に増えていきます。そのため普通は、この探索はあんまり深くできないんですよね。
僕の場合は色々と工夫をした結果、終盤では20手先、前半でも10手先など、ものすごく膨大な数の盤面を考えることができています。その中から一番いい状況を取ってくるイメージです。

最弱オセロの性能

――最弱オセロにおいて、先攻・後攻で有利・不利は存在するのですか?

負けるためのオセロは、今のところは先攻・後攻でアドバンテージにほとんど差がありません。
実は、最弱オセロを学習させていく中で、先攻・後攻で戦わせてみると、大体同じぐらいの勝率になります。むしろ引き分けが一番多いかもしれないです。

――最弱オセロのサイトでは、プレーヤーが必ず先攻になっていますね。

いいところに気が付きましたね。実はこれは、不正防止の為なんです。
先攻・後攻を両方プレイできるようにさせると、2つサイトを開いて『最弱オセロ』同士を戦わせることができてしまいます。
その裏技を避けるために、先攻固定にしています。
最弱オセロ同士で戦ったら引き分けか、僅差でどっちかが負けることになりますからね。

最弱オセロ同士を対戦させている様子

――最弱オセロは最弱と言いつつも、負けることもあるようです。それはなぜでしょうか?

それはですね、やはり人間が強いからですね。もっとAIを弱くすることはできます。
実はこの『最弱オセロ』は、気軽にプレイできるように、探索時間を短くして、すぐに手を返すようにしてるんですよ。
探索の深さを調節すれば、更に弱くすることができます。
ただし、そうするとテンポよくプレイできなくなってしまいます。
今の設定でも、実力ある人でないと負けることはできません。

――やはり強い人じゃないと負けられないのですね。

そうです。弱い人は負けられなくて、強い人じゃないと結局負けることもできない。
結局、勝つにしても負けるにしても、相手の選択肢を限定することが大事で、そこは変わらないので。
ちなみに、初めてこのAIに負けたのは、山崎冬矢五段という方です。
天才オセロキッズとして有名な方で、現在もオセロ界で活躍していますね。

↓史上初の最弱オセロ攻略者・山崎冬矢五段の独占インタビューはこちら!

開発を終えて、その後の展望は…

――最弱オセロの開発を通して、吉田さんが得たものは有りましたか?

結構、深層強化学習を含めて、いろんな知識やコーディングスキルが身に付いたのが一番大きいです。
また、AIについてほとんど知らない状態からのスタートでも、しっかり学べばAIを活用して色々なことができるんだなっていうのが分かりました。
人間もAIも、不可能なことってあんまりないっていうか。やろうと思えば、何でもできちゃうなっていう感想を抱きました。

――最弱オセロ製作の経験を活かし、今はどんな開発に携わっているのでしょうか。

画像処理・自然言語処理系が多いですね。例えばいろんな情報が書いてある書類から、お客さんが欲しい情報を文字も含めて認識して抽出するシステムなどを開発しています。
他には、デザインを生成するっていうシステムも最近開発しました。デザインって普通はアーティストみたいな、結構創造的な仕事じゃないですか。
それも最近、AIでできるようになってきたっていうところで、ワクワクしながら色んな新しいことに挑戦しています。
(totalcount 1,095 回, dailycount 82回 , overallcount 2,970,131 回)

ライター:

インタビュー

COMMENT

コメントを残す

メールアドレスが公開されることはありません。
*は必須項目です。




CAPTCHA