#自己紹介
皆さんこんにちは。
山中(さんちゅう)で,はちわれ猫たちと,一緒に生息しているWebエンジニア,ほげふがーです。
また,最近は自立思考型AIの仕組みを考えることが趣味になっています。
気になったら,何かコメントいただけると嬉しいです(^^
#要約版のページ
作りました!
https://qiita.com/TiresiasGit/items/259c0b116a0c2c21f235
#~きっかけ~
僕がこの古くて新しい問題に,なぜ,取り組むようになったかというと,きっかけがいくつかあります。
1.漫画:アトム・ザ・ビギニング A106くん(アトムくん) を見て。
かっこいい態度に感化されて←(◎ここ重要ね。)
自己進化できる。この子の自我システム作ったウマタロウくん,すごい。
2.ドラえもんのような,人間くさいけど,優しいAIも欲しい。←(◎これも重要ね。)
3.アニメ:PsychoPass のシビュラシステム,ラウンドロビン を見て。
「なにこれ,かっこいい!実現できるかな?」と思ったから。(本作にある,犯罪行為加担には断固反対。)
4.中学のころから,慈悲を持ったAIが,国民を各パラメータで正確に分類し,公正公平に管理し,AIが国会をすべき。という思想をもっているから。(日本の国会の答弁、見るに堪えないですよね?)
この4つが,僕を取り組ませる原動力です。
#PDCA型自立思考AI アイディア
さて,本題です。
思いついたのは,下記のデータフロー(包括的フレームワーク)です。
(Azureでほとんど実現できるかも?)
#理想状態テーブルと現実状況テーブル
現実世界は複雑なので,DBのテーブル同士の演算ができるRDB(SQL Server,transact-SQL,Postgresなど)が望ましい。
それぞれのテーブルは,
いつ,
どこで,
だれ1が,
だれ2に,
何を,
どのようする,
なぜ,
優先度,
実行可能flag(初期値0:実行不可)
の列を持つ。
##処理start!
##理想状態テーブル
理想の世界を満たすための条件(状態)が羅列された上記の列をもつテーブル。
##現実状況テーブル
現実の状況が羅列された上記の列をもつテーブル。
##各列の定義
いつ・・・タイムスタンプや予定時刻、もしくは、抽象的な時刻
どこで・・・緯度経度の座標、もしくは、抽象的な位置
だれ1が・・・能動的に動く人やモノの名前
だれ2に・・・だれ1により、受動的に動く人やモノの名前
何を・・・物体の名前
どのようする・・・具体的方向にある、他レコードid
具体的な方向に文を展開できるよう,他のレコードと紐づけていく。(デーモンのようなものがいるかも。)
このとき,逆にたどれるよう,なぜ列にも,元のレコードのIDを入れておく。
なぜ・・・抽象的方向にある、他レコードid,
優先度・・・未検討。
実行可能flag(初期値0:実行不可)・・・どのようにする方向へ展開した結果,目標レベルのレコードから手法のレコードへ,一貫したら,実行可能flagに1:実行可能 をたてる
#主語述語モデル文章生成+具体化+制約文付与
上記の最新状況保存用DBの各テーブルについて,それぞれ,優先度の高い理想状態のレコード集合と,優先度の高い現実状況を取り出す。
↓
理想状態についてどのように列のIDを再帰的に展開する。(この展開の程度は,日本語を逸脱しない程度に。,)
↓
「理想状態は[A]だが,現実状況は[B]であるから」
と,現状を表し、動作を促す1文を作成する。
A・・・理想状態のどのように列をたどった展開結果
B・・・現実状態のどのように列をたどった展開結果
がそれぞれ入る。
↓
1文1文,生成していき,文章生成言語モデルに入力できる形に加工,集約していく。
↓
以下を「XかつYかつZ」の形式で結合した文字列を作成する。
・他人を絶対に傷つけないを具体化した条件(マシンの中ではペナルティで表現する)
・他人を守る名誉欲を最大限に満たすを具体化した条件(マシンの中では報酬で表現する)
・上記で生成したタスク1文
#シナリオ生成ユニット
1文から,行動シナリオを自動生成する
例:DeepLearningのGPT-3,ALBARTなど。日本語圏で動かすなら日本語で動作する方が良い。
圧縮されたverや,逐次学習,転移学習が可能なモデルが出れば,ようやく実現可能となると思われる。2020/7/4地点では,まだそのようなモデルは出現していない。
GPT-3に関するGigazineの記事はこちら。
https://gigazine.net/news/20200612-openai-release-api/
#実行可能タスク抽出器
生成されたシナリオを一時テーブルに最新状況保存DBと同じ形式の列で保存
(入れた時点で,シナリオタスク,と呼称する。)
↓
一時テーブル内のシナリオタスク1つ1つを,最新状況保存DBにある,もっとも近い状況を検索,実行可能なタスクか,不可能なタスクかを1つ1つ判定し,一時テーブルの実行可能flagを更新する
#順序決めユニット
まずは,実行順序がどうなるか?を,一時テーブル内のシナリオタスク同士のコスト計算を,何らかの関数を使って算出する。
↓
巡回セールスマン問題(TSP)ソルバなどで,最適なパスを解かせ,算出する。
#タスク(主語+述語)を実行可能なデータやコードに変換するユニット
算出されたパスの通りに並んでいるシナリオタスク集合があるが,このままでは日本語のレベルであるため,機械が実行できない。
そこで,機械が実行可能なデータやコードに変換をする。
(アクチュエータなら,送り出し量,動作角度,ヒーターなら,設定温度など,仮想空間をクロールするプログラムなら,どうクロールするか?のコードやデータなど)
#現実世界(or 仮想世界)で実行するユニット
アクチュエータや,クローラプログラム,デーモンプログラム,など,ロボットやRPAの動作部分となる箇所へ,上記で変換されたデータやコードを受け取り,実行する
#現実世界(or 仮想世界)をセンシングするユニット
上記での実行結果を,
・センサーやプローブ,検出プログラムでセンシング
・Azure Machine Learning やAzure Cognitive Services,AWSや,エッジPCなどでセンシングされた値を言語化
・行動認識機能は必須!(まだ2020/7 地点では発展途上)
例:富士通研究所さんの行動認識AI
https://japan.zdnet.com/article/35146104/
#外れ値,例外値の除去ユニット
AIやコグニティブから話はそれるが,いわゆるデータクレンジングというものである。外れ値や,例外値は,後々蓄積されるナレッジに悪影響を及ぼす危険性があるため,ここでフィルタリングしておく必要がある。
#結果を保存するDB
現実世界や仮想世界は,結果と呼ばれる事象を,無限ともいえるようなデータ量を吐き出し続ける。
それらをなるべく高速なDB(必要であればNoSQL)に接続し,取りこぼしのなく,新鮮なまま保存し続ける必要がある。
現実状況テーブルへ流し込み,最新の状況に更新する。
#問題分析_理想状態改善ユニット
品質管理の手法ではあるが、物事を改善するには、何がよくて、なにが悪かったか?を精密に分析する必要がある。
上記のDBで収集されたデータを、このユニットに流し込む。
改善点を導き出せるなら、手段を問わない。(因子分析やPCAやベイズ推定など...)
計算時間がかかるはずなので、非同期でバックグラウンドジョブで実行。
(Azureに都合の良い解析APIのようなものがあればうれしいと思ったり。)
得られた現実状況から、評価スコアを算出。
↓
改善点を割り出す。
↓
原因となった理想状態を特定し、可能な限り更新する。
処理start!に戻り、上記を,永遠に繰り返す。
#結局何をしていたのか?
何をしていたかというと,端に,PDCAだったのです。
現状,今僕が考えた,PDCAは,リアルタイムにA(改善)をすることができないのです。したがって,暴走する危険性は十分にあります。(理想状態のDBの適切な改善方法の考察ができていない。特にgpt-3のユニットも改善方法が不明。)
まだまだ,自我と呼ぶには稚拙だと思います。
なぜリアルタイムにできないか?というと,今起きた結果に対して,どう改善したらいいか?という処理を挟んだ場合,人間だとどうなるでしょう?
常時そんな思考をすると,無数の改善候補案が導出され,それが脳内で起き,思考がぐるぐると際限なく回り続け、結果が出るまで何時間or何日もかかってしまうからです。(より良いの結果を得るため,もうしばらくお待ちください。というような職場のメールを,開発者の皆さんも見たことあるかと思います。)
いわゆる,「フレーム問題」のような状況が,十中八九起こりえるのです。
https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E5%95%8F%E9%A1%8C
そうなると,動きが停止したようになり,次の動作がリアルタイムにできなくなってしまうのです。
そこで「改善をリアルタイムにすることをやめる」という選択を,今回しました。
その場合、
先に綿密な計画を練る(自分の頭の中の理想状態DBを完璧に近い形に仕上げる)→実行
が,僕の経験則上,最もうまく動作(仕事)を進められる,と記憶しています。
#もっといいのがあるよ!という方へ
もし,「もっといい理想的な自立思考AIができるよ!思いついた!」or「一部分だけど作れたよ!」という方がいらっしゃいましたら,コメント欄を自由に使っていただいて結構ですので,ご教授をよろしくお願いします。m(_ _)m