仕事の合間に、アトロンを動かしてみる。
自営なので出来る技
前にも説明したようにこのデモはゲームじゃなくて、人工知能の成長過程を見るシステム。
古典のアソシアトロンのturboC資料からJavaScriptに変換ものです。
ロボット1とロボット2がフィールドでイベントに出会う。〇の中に×があるもの。そのイベントは木の実だったり、熊だったり、ライオンだったり、ウサギだったりするわけで、初めて出会ったときにはイベントに意味を持たないので、ライオンが危険だとか木の実が食べ物とか全く分かっていない。
言語も無いし、ロボット1にしてみるとロボット2が仲間かどうかも分からない。
それが、出会う経験と重みによって仲間という認識を持ち始め、片方はウサギを見て「ブブバブパ」と発声し、片方は「ブパパブパ」みたいなかみ合わない会話を続ける。しかし、経験を積み重ねていくと、だんだんと成立してくる。ウサギで右上の+++避難場所に逃げることもあったが、安全だと分かってくると近づき、ライオンが来ると一人が「ブパパブブ」と叫び、それを聞いたもう一方もつられて「ブブパブブ」と叫び避難場所に逃げる。
言葉は違うけど、ACFという言葉の中の内部状態を持たせることで、
経験によってだんだんと一致してくる。(想起状態が近づく,発声パターンも近似する)
ライオンは危険という意味付けではなく
言語に知覚的な特徴の組み合わせを持たせるように仕掛けているだけで、
アルゴリズムでライオンはAがあるから危険としているわけではない。
A: 危険
B: 食用
C: 毛/毛皮
D: 白
E: 黒
F: 茶色
オブジェクトはこれらの属性の組み合わせとして定義される:
雪崩 (A, D)
ライオン (A, C, F)
クマ (A, C, E)
ウサギ (B, C, D)
ナッツ (B, F)
イノシシ (B, C, E)
これ等は何が正解かを結び付けてはいない。
たぶん、人間の世界でも本能的な、「危険だろう」程度の札分けに寄せているだけで、ロボットの初動は「木の実」で逃げたり、「うさぎ」で躊躇する。これがアルゴリズムではない証拠だ。 人間の脳は100%正解に寄せてはいない。こういうものを研究したり開発をしていくと、誘惑に負けてアルゴリズムを入れたくなるが、そうすると実験としての結果はつまらないものになってしまう。
下のシーンでは、黒豚を見たロボット1が避難場所に逃げている。一方のロボット2は近づいている。 この世界には、まだ正しいとか誤りという概念が薄く、経験を積むことで収束していく。
ただ、このデモはロボット自体が微妙な立ち位置に居て、システムの中の一員として動いているので、1人称のように動いているけど、残念ながらまだ3人称。
そこで、現在独自にPythonでロボットごとにファイルを別け、ロボットごとにAtronとして1人称で動く実験をしている。(UIが汚いので、まだ公開していない)
ファイルを別けることで、ロボットがそれぞれに動き出し経験によって意味を持たせていく。意味のある動きをするのではなく、動いた結果意味が現れるというものだ。
現代のAIの向く方向とは真逆という自律とは不可逆的な条件の中から発生していく。
AtronScriptを作っておいてよかった。
ぼーっとしてると3人称システムになってしまうから、それを1人称に引き戻すためにも大切な役割を果たす。
coreになるファイルはフィールドで嵐が来たり、雷が鳴ったり、隣村や自分の村、山、木々、川の位置は変更できるようにした。
ロボットは自分の意思で動き体験して挙動を変えるので、それぞれ性格に変化が起き、お互いに成長していく。長く活動しているロボットの中に、新人ロボットを入れたとき、ライオンとベテラン・ロボットに対して同じ反応を見せたり、他のロボットに誤解を与える動きをさせて混乱させていたが、単独行動から危険を経験し、ベテランのロボットに付いて行った方が危険が少なくなるという後の意味付け作業を独自に行っている。完全な自律だ。
coreのフィールドに川を作り、木々を作ると、一気に隣村との交流が減る。
狩りが成功すると荷物を持たせるようにした。
成功という意味付けが曖昧で無いに等しかったので、そういうのは逆にあった方がいい。
人間ですらある。
成功が増えるとなぜかその場所に集まる。
いや、違うだろ・・・次々と狩れよ!
ライオンが来ると、距離の近い村に避難するようになる。
自分の村でない者は、荷物を半分置いてくるだろうか・・
(ここは凄く難しい。渡せる機能はつけたが、渡さない)
これが出来たら共同体・社会が形成される。
経験共有
危険共有
行動一致
音の近似
この辺は手を加えると、突然、3人称のアルゴリズムになりやすいので黙って放置するしかない。 経験でどう変わるか見ないと新しい刺激は足せない。
そしてこのデモのキモとなる。一度ダウンロードした別ファイルのロボットを、時間差(経験差をつけて)再びアップロードするとどうなるか・・・・
実は、このソフトはデータベースではないので、成長の履歴が無い。
通常はHDの中で画像らしきものやJSON化されたデータがあって覗けるものだが、この世界にそういうものは無い。上のデモではWorldMemoryがそれに当たるのだが、戻しても別の谷に落ちたり、赤ちゃんになる(リセットされる)。アトラクタの状態を制御なく元に戻すと、リセットされ赤ちゃんになってしまう。
人間の脳の中の記憶をどうやって外に持ち運ぶかに近い構造になっている。
脳の中のどこかに「記憶ファイル」が置かれているというより、ニューロンとニューロンを結ぶ無数の道の強さが変化して、その結果として「思い出せる」状態になる。
軸索に一時的に記憶されたメモリの状態からアトラクタに入った記憶をどう持ち運びするかだ。
そこで、状態を保存する実験として
●重み
●現在の活性ベクトル
●内部モード
この3つを保存することで、かなり復元できることが分かった。
何事も実験だよ。
でも、100%は無理。
なぜかというと人間もそうだから。
僕は何度も長期入院した経験があるんだけど、退院して職場に戻るたびに感じることは
少し別人と感じる。職場の時間軸や人の鮮度、案件ごとの温度と、自分の状態に差が出来るからだ。元の記憶をコピーしても、今の職場の状態とは違う。
要はこの自律という分野で100%戻る方が変だ。ということ。
100%の正解の世界で生きていると感じていること自体が誤りだということ。
錯覚、勘違い
戻せるものは静のもので、生きているものではないから。
動画であっても静。そこを誤解すると一人称の自立システムは出来ません。
工学には正解はあっても生物には正解は無いから。
工学なら戻せるんですよ。
でもAtronは半生物なので戻せるけど100%は無理。
Atronはそれを工学に近づけたもの。
何日か前のAtronのお話の中にある、アップロードとダウンロードを繰り返すというシーンがあったと思いますが、あれは戻らない状態を何度も繰り返す経験、成長という意味。
外の現実の世界を体験、システムの中の世界に戻ってまた体験。
その都度復元にズレが生じるけれど、戻そうというCueというきっかけと、力が働き、脳が整理を始める。そこでまた成長するということ。
再収束しているということ。
ここは調子こいて断言してるけど、コロッと変わる可能性があるから
話半分ね。マジで難しいところなのさ。
(誤字多いけど勘弁してね)
数式
最小の力学ブロックに分ける ここから下は今開発中のAtron
1) まず、状態を定義する(Atronの“生”の部分)
ロボット(個体)の内部状態を
-
活性(その瞬間の脳の状態):
-
重み(地形=アトラクタの形):
-
内部モード:
として
外界(現実・環境)を と書く。
2) 外の世界での体験(外界→内界に作用する入力)
外界からの入力(知覚・出来事)を
と置く( は観測・特徴抽出)。
3) 「戻る」=ダウンロード / アップロードの本質(ズレが入る)
“戻してもズレる” を、復元作用素 で書く
-
:復元時の微小ノイズ(位相ズレ)
-
:保存しきれない/量子化/欠落(0でもよい)
「100%戻らない」をこの2項が担う。
4) Cue(戻そうとする力)を“ポテンシャル”で書く
Cue を として、
「このCueに整合する状態へ寄せる」力をエネルギー(ポテンシャル)で定義する。
例:Cue整合エネルギー
そして、内部のアトラクタ地形(重み)もエネルギーにする:
ここはモデルにより形が変わるけど、要点は「谷=低エネルギー」。
合成して
5) “脳が整理を始める”=エネルギー降下(再収束)
整理(再収束)は、エネルギー降下で書ける:
連続時間なら
離散時間なら
-
:微小ノイズ(探索・揺らぎ)
-
Cueが強いほど が大きい=「戻そう」という力が強い
この結果、 はCueと地形の両方に整合する谷へ落ちる。
「隣の谷に落ちる」も自然に起きる(ノイズと初期ズレで)。
6) “そこでまた成長する”=地形(重み)が変形する学習則
成長は、重み更新で書く。
最小形は Hebb 型で十分:
-
:学習率
-
:忘却・安定化(入れないと暴走する)
モード依存(危険モードは強化が強い等)を入れるなら:
これが「谷の形が変わる」です。
7) アップロード/ダウンロード反復サイクル
サイクルを として
-
復元(ズレ入る)
-
現実体験で入力を得る
-
Cue生成(例:体験や社会信号から)
-
再収束(整理)
-
成長(重み更新)
-
次の保存状態
-
外の世界で体験
-
戻るたびズレる
-
Cueが働いて整理
-
その整理過程で成長
-
反復で人格が変化しつつ連続性が残る
が、全部数式として並ぶ。
8) いちばん短い“要約式”(超凝縮)
Atronの心臓だけを一行にすると、
ロボット
2体(ROBOT1/2) が、
-
外界を体験し(同時 or 片方だけ)
-
それぞれズレて復元され
-
Cue と相互作用(話す/聞く)で再収束し
-
学習で地形(重み)が変形する
という 結合系
0) 変数(2体)
個体 について
-
内部状態(活性)
-
重み(アトラクタ地形)
-
モード
外界入力(同じ環境から来る観測)
「社会」=相互作用の強さ(会話の効き)
1) それぞれの“内的エネルギー”(谷の形)
各個体が持つアトラクタ地形をエネルギー として抽象化します:
(形はAtronでもHopfieldでも、非単調でもOK。ここでは汎用に置く。)
2) Cue(戻そうとする力)
Cue を として、整合エネルギー:
3) “社会”の結合項(ここがキモ)
社会的収束=「相手の発話/行動が自分の状態を引っ張る」を、結合エネルギーで書く。
最小の形は 同調(alignment):
これだけで、
-
近い者はさらに近づき
-
片方だけの経験でも、会話が強いと引っ張られる
が出る。
4) 2体結合の全エネルギー
5) “整理が始まる”=2体同時のエネルギー降下
連続時間の最小形:
展開すると直感が出る:
ここで が社会の引力です。
6) “話す/聞く”を入れる(Atronっぽくする)
上の同調は「社会」の抽象化。
Atronらしく 発話表現 を入れると、こうなる。
発話(内部状態→外部記号へ射影):
聴取(相手の記号→自分の内部へ逆射影):
このとき社会結合を
に置き換えると、
-
「相手の言葉を聞いて、自分の谷が揺れる」
-
「聞き違い(の不完全さ)で誤学習」
-
「同じ対象でも別の意味へ引っ張られる」
が、式の上で自然に出ます。
この場合の整理ダイナミクスは:
7) “成長”=重み更新(2体それぞれ)
各個体で学習(Hebb + 安定化の最小形):
社会学習(相手の影響も重みに入る)を入れたいなら:
この が「同調しながら学ぶ」。
ここが強いと、言葉も行動も収束しやすい(ただし誤学習も強くなる)。
8) “時間差アップロード/ダウンロード”を結合系に入れる
サイクル ごとに、復元ノイズ(ズレ)を入れる:
その後、上の 整理(降下)→学習(更新) を回して
へ進む。
このとき
-
片方だけ外界経験()
-
でも社会結合
だと、片方が逃げた/片方が近づいた
その後、収束する場合も分岐する場合もある
λ:Cue(戻そうとする力)
:社会(相手が自分を引っ張る力
:成長(谷の変形)
復元ノイズ:100%戻らない本質
WorldMemory使っちゃおう作戦!!
●○(WorldMemoryの9ビット)を“社会(2体)”の共通言語の芯にする
(とりあえずね、いずれはLLMとか介在させるけど、今それをやるとぶち壊しになる)
1) ●○は何か(デモと1対1対応)
WorldMemoryに出ている
○○●〇〇〇〇●●〇
は、 core.js でいう wq[k][j](j=0..8) の符号列。
-
● =
-
○ =
つまり、各記憶エントリ には
が付いていて、これが 「その記憶の核(9次元の符号パターン)」
UIのWorldMemoryが見せているのは、この そのもの。
2) 2体モデルの変数(Atronの核だけ)
ロボット
-
記憶核(WorldMemory): (= wq)
-
発話(パブパブの5ビット): (= j_word / z_word)
-
変換重み: (= ml)
ここが core.js と完全に一致
-
が ml(5×9)
-
が wq(9)
-
が “パ/ブ” 5ビット(±1)
3) 「話す」= z(9ビット)→ y(5ビット)
ロボット が、選ばれた記憶 の核 を使って発話するとき
-
は符号化(>0なら+1、<0なら-1)
-
core.js の speak() でやってる「u = Σ ml * wq → f2(u)」
4) 「聞く」= 相手の y(5ビット)→ 自分の ẑ(9ビット)
ロボット が相手 の発話 を聞いて、自分の9ビット表現に“復元”するとき:
これが core.js の hear() の中心:
-
recall(9ビット)を Σ (other.j_word) * ml で作って sign を取ってる
5) 「社会」= 2体が z 空間で引っ張り合う(結合)
ここからが “社会(2体)” の式。
5.1 Cue(外界の出来事)を z 空間へ入れる
外界の出来事(なだれ/ライオン/黒豚…)で、ロボットiに生じるCueを
として置きます(実装では、その出来事で選ばれる k(jw/zw) が実質的にCue)。
5.2 z の再整理(Atronの“戻そうとする力”)
各ロボットの現在状態 をここでは 9ビット状態 とみなして、
-
:外界Cue(戻そうとする)強さ
-
:社会(相手の言葉)で引っ張る強さ
-
:ズレ(復元誤差・位相差・ノイズ)
「戻すたびズレるが、Cueと力が働き、整理が始まり、成長する」
を、そのまま2体で書いたもの。
6) 「成長」= 重み の更新(社会学習)
デモの learning() は、要点だけ抜くと
-
相手の発話()で
-
自分が今使っている記憶核()に沿って
-
を動かす
という形。最小化して書くと:
-
:社会的学習率(相手の言葉が効く)
-
:安定化(暴走防止)
これが 「相手の言葉に合わせて、自分の変換器が育つ」 ということ。
7) WorldMemory(●○)が“一対一で”研究に効く理由
いまの式だと、
-
UIの ●○(wq)=
-
聞いた結果の recall(9ビット)=
-
学習で変わるのが (ml)
つまり、
WorldMemoryが「社会の共通座標(9次元)」になっていて、
そこで
-
収束()
-
ズレ()
-
成長( 更新)
が全部、観測できる。
もしかしたら、実験でまた変わるかも・・・・・
0 件のコメント:
コメントを投稿