FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

麻雀AIが進んでいない理由

麻雀AIというと、「爆打」が有名だけど、
将棋や囲碁のAIに比べると進んでいなくて、まだ人間のほうが強い。

なんで麻雀AIは進んでいないんだろう?って思う人もいると思うので
個人的な見解を書いておく。


1.ゲームとしての知名度が低い


日本のテーブルゲームとしては割とメジャーだけど、世界的に見ると、
オセロやチェス、囲碁、将棋などと比べるとまだまだメジャー度合は低い。
世界大会みたいなものも最近では開かれているので徐々にメジャーにはなってると思うけど。

2.ルールが統一されていない


フリー雀荘やプロの大会、ネット麻雀など色んなところで麻雀はやられてるが
赤ドラや食いタン・後付け、ウマ・チップなど、ルールが統一されていない。

また国際的にも、AI先進国の一つである中国が、かなり異なるルールであるのも、大きな理由だと思う。
Googleなどの企業がゲームAIを進める主な目的の一つとして技術力アピールがあるけど、
中国に認められないと、アピール価値として弱くなる。

3.ルールが複雑で、開発が面倒


これが特に大きいと思う。
囲碁の場合、選択肢のパターンとしては非常に多く、ゲームとしての難易度はかなり高いが、
交互に石を置くというルールはシンプルでAIを作りやすい。
考慮するとしても、石を取るときや「コウ」くらいなもの。

それに対して麻雀は、
あがり役の事前知識が必要だったり、
赤ドラやカン、鳴き、四風連打、流し満貫、ノーテン罰符、責任払い、などなど
色んなルールが付加されており、非常に複雑。
こういったルールにAIが対応するには、
それぞれのルールへ対応するようなルールベースの処理を組み込んだり、
機械学習で学習させる要素として取り込まないといけない。

しかも、考える要素として、
・どれを切ったらあがりやすいか、高打点か
・どの牌がどれだけ山に残っているか
・各牌でどれくらい振り込む確率があるか
・鳴くべきかどうか
・リーチすべきかどうか
・あがるべきかどうか
などなど、考えることが多く、
基本的にはそれぞれに対して、
アルゴリズムを考えたり、機械学習したりしないといけないので、
かなり面倒くさく、時間がかかる。

4.労力とリターンが見合わない


上記のルールの複雑さのせいで、AIを作るのにかなり時間がかかる。

そして頑張って作っても、ちょっと話題になったりはするが、
優勝して賞金がもらえたりするわけでもなく、ビジネス展開が見えてるわけでもないので、
金銭的なリターンは少ない。
さらに、上記の知名度などの影響もあり、
時間がかかるにも関わらず、仕事としてやれる人も少ない。
かといって趣味でやるには大変すぎて挫折しやすい。

爆打があそこまで強くなった一つとして、
大学の研究としてある程度時間をかけれたことがあると思う。
(それでも、強くするのと研究としての価値は別なので強くすることに、そこまで時間をかけれてないとは思う。)




だいたいはこんな感じかと思う。

不完全情報ゲームだから難しいという声も聞くことはあるけど、
それはあまり関係ないと思う。

麻雀AI自体は面倒なだけで、他のAI分野と比べたらそこまで難しくないと思う。
(とか言って、自分はまだまだだけどw)
グーグルとかのAI研究者がしっかり取り組んだら
すぐに天鳳位くらいなると思う。

あとは、麻雀をしている層がITリテラシーが低めだったりとか、
ネット麻雀へのAI参加の敷居の高さとかも少しあるかも。



なんか文字だらけで読みにくい記事になってしまったw
スポンサーサイト

久々の更新

かなり久々に更新してみる。

ブログは3日坊主になってたけど、
一応麻雀AIの研究は細々と続けてる。

仕事やら生活環境の変化で昔より時間取れなくなってるけど、
仕事でも機械学習や深層学習も扱う機会もあって
知識は増えている感じ。

ブログを書いてない間に、
爆打が9段になったり、Googleのアルファ碁が人間をあっさり越えたりはしてるけど
まだ麻雀AIが人間を越えた、みたいな状態にはなってないので
麻雀AI作る価値はありそう。

記事書いてない2年弱の間にやってきたことをざっと書くと
↓のような感じ。

天鳳用プログラムの強化

昔は門前で切るだけだったけど、バグ修正したりで、
アルゴリズムさえしっかり作れば、天鳳で打てるだけの環境にはなった。
あと副露もしょぼいアルゴリズムだけど一応出来る。

危険牌読み

これは未完成。
深層学習を使った危険牌読みをずっとやってて
ようやく最低限の予測はできるようになった。
ただ、ルールベースでやったほうがまだ精度良さそうな感じ。
他の機械学習手法使えば簡単にできそうだけど、
データ量とか考えても深層学習に向いてると信じて引き続きやる予定

強化学習の応用

強化学習というのは、正解データから学習するのではなく、
実際にやってみながら成長させていくような学習方法。

DeepQ Network(DQN)という深層強化学習の方法で今も試している。
まずは門前の何切るの学習で、少しずつ学習で強くなるんだけど、まだまだ弱い。
かつ、何切るはモンテカルロ法がかなり牌効率がいいので、実用性は今のところ低い。

ただ何切るである程度うまくいったら、押し引きとかに応用できると思っているので、
そうなると使えるかも。
そして、研究として強化学習が純粋に面白い。



こんな感じで
強くする部分よりも深層学習の技術的な興味に重きがいっていて
あまり強くなっていない状態。
感覚的には天鳳2~3段くらいかな。。
他の方の開発してるAIのほうがずっと強いはず。

また次あかずに更新できるようにと思ってます!

パケット解析

なかなか時間がとれず既に何名か実装している方もいて今更だけど
ようやくパケット解析による場況把握がだいたい出来た。
(だいたいkmo2さんのおかげです。)

↓の動画はどんよくさんがやってたこととほぼ同じ(or劣化版)で
デバッグ用に可視化した。



テストプレイはまとめて情報送られてくるから
更新のタイミングが変。

あとはこれとAI部分とマウス操作のプログラムを組み合わせて
パケット解析版のAIができる。
やっぱり画像認識に比べて圧倒的に早いし、ツモ切りとかも一瞬で分かるしすごく楽。

大明槓した時の挙動とかが微妙に変だったりするけど
、一旦こんなところで、そろそろモチベ的にアルゴリズム作りに移ります。

赤ドラとカンはAI作りの敵ですね!

そしてモチベーションはやっぱり大事です!!

麻雀AIのタイプ

これから色々と結果や計画を書いていくうえで
前提となる話なので先に書いておく。

「AI」といっても色んなタイプがある。
広い定義では、ルンバみたいな家電製品も、i Phoneのsiriも、ドラえもんみたいな未来ロボットもAIが搭載されていると言えるが
自分で学習するものから事前にプログラムされたとおりの動きしか出来ないものもある。

麻雀のAIの場合でも、大きくいくつかのパターン、及びその組み合わせで分けられる。

 1 考え方や戦略を条件式で組み込んでおく
 2 評価関数をつくる
 3 シミュレーションを行う
 4 牌譜から機械学習を行う




<1 考え方や戦略を条件式で組み込んでおく>

 例えば、打牌選択において
 「シャンテン数が一番低くなる牌のうち、受入枚数が一番多い牌を切る」
 など。
 
 メリットとしては、プログラミングした分、人間の考えをいくらでも条件式として取り入れることが出来ること。
 例えば、現代麻雀技術論とか麻雀プロの本に書かれてる牌理や考え方もその通り条件式書くことが出来れば
 再現することができる。
 (例:1345sと1456sでは、前者の1sの方が価値がある等)

 デメリットとしては、全ての要素をプログラミングすることが非常に難しく、膨大な計算量になってしまうこと
 例えば、押し引き判断のバランスを適切に表現しようと思っても「両面3900以上はゼンツ」とかシンプルなものは作れるが、
 点棒状況や和了牌の山読みや、相手の打点を予想したりとかそういった諸々の要素を条件式で表現するのはかなり難しい。
 
 そしてもう一つのデメリットが
 「人間が考えていること以上のことを出来ないこと」
 あるプロ雀士が自分の考え方を全て組み込めれば、そのプロ雀士と同じ実力になることは出来るが
 それ以上のことは出来ない。
 (もちろんコンピュータはミスをしない分は、強いかもしれないけど)



<2 評価関数をつくる>
 
 これも1に似ていて、どう打つかを事前に決めておく。
 例えば
 「字牌・1,9は1点、2,8は2点、3,4,5,6,7は3点。ドラの場合は、+2点。・・・」
 といったいくつかの点数条件を作っておいて、一番点数が低い牌を切る。
 みたいな感じ。

 メリットとしては、パラメータ(点数)をうまく調整できれば製作者以上に強く出来るかもしれないこと。
 そして、その調整結果は、新たな麻雀理論を作り出せるかもしれない。
 デメリットは、パラメータの調整が難しすぎること。
 例えば、上の点数制の場合、それぞれ何点プラスするかといった適切な値を調べないといけない。
 真面目にやろうとしたらパラメータの数が多すぎて、恐ろしい調整量になってしまう。。。 




 <3 シミュレーションを行う>
 
 例えば、リーチかダマかの判断において
 その局面でリーチした場合、ダマの場合、それぞれ対戦相手を仮想的にコンピュータとして1000回くらいシミュレーションする。
 その結果、期待値が高い方を選択する。
 といったようなもの。

 メリットとしては、人間では計算出来ないような大量のシミュレーション結果を元にするため、
 人間には分からないような場面でも最適解を出せる可能性があるということ。
 
 デメリットとしては、シミュレーションの精度が高くないと、結果の精度も高くならないこと。
 仮想的なコンピュータが、本当の対戦相手と違う選択をすればとるほど、得られる結果も妥当性が低くなる。
 そして厳密なシミュレーションは難しい。

 またもう一つのデメリットとして、計算量が多く時間がかかってしまう可能性があること。
 通常の麻雀では数秒で判断しないといけないが、シミュレーションの仕方によってはその時間内におさまらなくなる。
 特に、正確なシミュレーションをすればしようとするほど、計算が複雑になり時間がかかってしまう。




<4 牌譜から機械学習を行う>

 
 過去の牌譜から「打ち手が何を選択したか」や「何が当たり牌だったか」などを学習していく。
 機械学習としては、SVM(サポートベクターマシン)やディープラーニングなどが有名な方法。
 例えば、ある天鳳位の牌譜を学習して、どういう時に何を切るべきかを仮に完璧に学習できれば
 その天鳳位と同じ思考のAIを作ることが出来る。

 メリットとしては、細かい要素を含めて自動で学習してくれるから、
 1や2の方法で製作者が組み込むのが難しい細かい要素も自動的に取り入れてくれること。
 また、一度学習してしまえば、シミュレーションと違い、計算時間が短いこと。
 
 デメリットとしては、完全な学習をすることが難しいこと。
 この機械学習というのは、画像認識や音声認識などで今もグーグルなどたくさんの企業・研究機関が研究開発しており
 ディープラーニングとかは非常に今ホットな技術であるが、過学習といった問題があり、完全な学習が難しい。

 またもう一つのデメリットとしては
 打牌の学習の場合、学習元の牌譜の打ち手を超えることが出来ないこと。
 1の方法と同じだが、仮にある天鳳位の完全コピーが出来たとしても、その天鳳位を超えることは出来ない。
 (もちろんミスが減る分は強くなる)




長くなってしまったがだいたいこんな感じ。

あとはこれらを組み合わせていったりする方法がある。
今話題の「爆打」とかは、製作者の論文を見る限り、3と4を組み合わせている。
序盤は機械学習の結果を元に、押し引きはシミュレーション結果を元に、相手の手のテンパイ予測は機械学習を元に、・・・
みたいな感じ。


それぞれの方法でメリット・デメリットがあるので
それを踏まえたうえで、どんなAIにしていくか決めていく必要がある。

あとはどんな目的でAIを作っていくかによっても違う。
新たな戦術や理論を発見したいのか、人間より強いAIを作りたいのか等。


個人的には、最終的には人間を超える最強のAIを作れたらなーとか思ってるので
いろんな方法を組み合わせながら試行錯誤していくつもり。
今は4の方法の中でもニューラルネットワークという方法を試している。
(ディープラーニングもニューラルネットワークの一種)

もし、鳳凰卓で打てるくらいのレベルのAI作ることだけが目的なら方法1と2で頑張れば一番早そうだけど
もっと強くなるためには、3と4の方法が必須という感じ。
プロフィール

pao

Author:pao
AIに興味を持った社会人天鳳民。
ID:ppaaoo 最高9段。だいたい8段くらい。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。