技術とか戦略とか

証券レガシーシステムを8年いじってから転職した普通の文系SEによるブログ。技術のみではなく趣味の戦略考察についても。

ルールベースのAIの可能性を考えてみた

AIについて本格的に勉強したいと思っているものの、どこから手をつければ良いかわからず…。
 
色々調べていたら、以下のようなページを見つけました。
ざっくり言うと、今流行のAI技術は「機械学習」であるが、昔ながらの「ルールベース」も分野によっては使われている、ということが書かれています。
 
今さら聞けない「AI」- ひとまずおさえておきたい 「AI技術」の基礎知識  “生活者データ・ドリブン”マーケティング通信

http://seikatsusha-ddm.com/article/03276/

 
機械学習には良質なデータが大量に必要なため、開発に多くの時間と費用を要するという問題があります。
機械学習から発展した深層学習にしても、人間では考えることができない結論をAIが導き出すということで、その妥当性を誰がどのように判断できるのか、という問題があります。
流行りの機械学習には以上のような問題があるため、現在もルールベースの技術で開発したシステムが「AIシステム」として出回っています。適切なタイミングで適切な商品に自動的に投資するサービス「ロボアドバイザー」も、ルールベースの技術で実現できるものです。
詳しくは以下のページに書かれています。
 
経営者も技術者も納得! AIブームのウソとホント  日経 xTECH(クロステック)

https://tech.nikkeibp.co.jp/it/atcl/column/16/122700311/

 
ルールベースの技術は判断を行うための知識や基準を人間の手で入力するというものであり、(私のような)業務プログラムを作れる程度の普通の技術者でも少し応用を効かせれば今すぐにでも作り始めることができるものです。

 
良く考えたら、私が趣味で作ったプログラムの中にルールベースのAIと言えなくはないものがありました。
1日で作ったものなので荒削りもいい所ですが、逆に言えば普通の技術者でもわずか1日で骨格となる部分は作成可能です。
 
--------------------------
 
【対策ベースによるポケモン対戦のパーティの半自動生成】
 
■プログラム概要
ポケモンの対戦で使用するパーティを半自動生成する。
パーティの骨格となるコンセプトをプログラムが自動的に提示することで、
人間はそのコンセプトに沿って細部を決めるだけでパーティを作成できる。
 
対策する必要がある戦術の一覧と、各々の戦術に対する対策法をDBのテーブルに持たせ、
全ての戦術を対策できる対策法の組み合わせをプログラムで自動的に選定する。
選定はランダムに行い、ランダムの試行を1000回実行する。
 
各々の対策法については、ポケモン対戦の理論に基づいてコストを算定し、
これもDBのテーブルにて管理している。
対策法の組み合わせを選定する際、コストの合計についてもプログラムで算出する。
コストが少なくなる対策法の組み合わせは、
優れた対策法の組み合わせであると判断できる。
 
人間は、コストが少ない対策法の組み合わせを、
パーティの骨格となるコンセプトとして据える。
 
■プログラムの評価(達成できた点)
ポケモンのパーティ作成を約100レコードの情報入力で実現できた
ポケモンのパーティは約数千万通りとも言われている。
 http://vento.blog3.fc2.com/blog-entry-73.html

 その膨大な情報量を約100レコードの情報に圧縮し、
 少ないリソースである程度の解答を得ることができた。
 
・パーティの弱点を発見することができた
→パーティの弱点診断ツールとしての活用が期待できる
 
・漏れのない対策法の組み合わせ方を導出することができた
→実戦で使用できる水準のパーティを半自動的に生成することはできそう
 
・導出された対策法の組み合わせ方から、新たな発見を得ることができた
→新たな戦術を発掘できる可能性がある
 
■プログラムの評価(課題)
・コストの算出が不正確である
→ロジックの改善が必要
 
・プログラムによる探索量が不足している
→試行回数の増加や探索ロジックの改善が必要
 
・対策法の組み合わせから実際のパーティを作成する手順については手動である
→今回の手法では、パーティのコンセプトを提案する所までしかできない
 実際のパーティを作成する手順まで自動化する必要があるなら、別途検討が必要
 
・データベースの情報を人力で入力している
→プレイヤーの主観が入り情報が不正確となる上、新たな対策法も発見できない
 別途、改善の方法を検討する必要がある
 
・作成したパーティの有効性を客観的に評価できない
→実戦は1回約20分を要するため、統計的に有効なデータ量を集めることが難しい
 別途、改善の方法を検討する必要がある
 
■詳細
SpringFrameworkの挙動確認のついでに作ったのでソースがすごく汚いです…。
また、元々ポケモン対戦のプレイヤーに向けて作った資料のため、
ポケモン対戦の専門用語が出てきます。
興味がある方は、適度に読み飛ばしてわかる所だけ読んでみて下さい。
 

https://1drv.ms/b/s!AivF3bzWXOzuhQlXk5hscKYqkLkM
 
--------------------------
 

実際に実用化されているAIはルールベースのものが少なくないので、流行りの機械学習の技術を追うよりも先にルールベースの技術を習得するのも悪くないと思いました。
機械学習の時代が本格的に訪れたとしても、機械学習で得られた知見をルールに組み込んだり、ルールと照らし合わせて機械学習で得られた結果の妥当性を評価したり、といった形でルールベースの技術は活きると思うので。
 
ルールベースの弱点は膨大な分岐処理を人力で入力しなければならない所ですが、物事の本質を捉え、少ない分岐である程度妥当な結果を得られるロジックを作れれば、これは乗り越えられる場合があります。
私が作成したプログラムも、ロジックの工夫でこの問題に対処した例です。
 
ルールベースと機械学習は二律背反ではないと思っており、どちらも学ぶ必要があると思っています。