ロボット2体はそれぞれ1人称です。(マジで)
団体さん出現(3人称:ロボットはどのくらい、安心するか見るため)
ライオンは(3人称:イベントを設定しています) (今回はライオンだけ)
app.js は世界です。
ロボットたちの経験の違いで性格が変わる数値を見るためのデモなので、つまらないかもしれませんが、僕のメモでもあるので載せときます。
同じ世界を見ても、経験の履歴が違うと、反応が変わる
2体のロボットは最初は同じ状態です。
途中で片方だけ止めます。
再開すると、同じ世界を見ているのに反応が変わります。
理由は、経験の履歴が違うからです。
このモデルでは性格は設定ではなく、経験の積み重ねです。
ライオンの状態(イベント:3人称)
0. sleep_far 寝ている、遠い、小さく見える
体験としては「大きいけど、今は安全そう」
1. wake_far 起きた、まだ危険かどうかも分からない不確実性
2. play_mid 「遊んでいる?攻撃していない?」
でも size は大きい 「なんだろう、あれは?」
3. roar_mid 「吠えた」、「え!何今の」 threat cue、fear急上昇、
ロボット的には「大きい、近い、音が強い」 危険モード
4. hunt_seen 「他の動物を襲っているのを見た」
「これは捕食者」 fear weight が強化される経験。
5. threat_close 「近い・大きい・目が合う」逃走トリガー fearが飽和するポイント。
6. sleep_again_far また、寝た。「今は安全かもしれないけど、体験上警戒」
「寝ているけど、あれは危険なやつだ」
イベントによる考えられるロボットへの影響です。
① 最初の状態
「この2体のロボットは、最初は完全に同じです」
同じ重み
同じ性格パラメータ
同じ初期状態
個体差はゼロ
② 途中で片方だけ止める
「途中で、ロボット2だけ停止します」
その間、
ロボット1 → ライオンの一日を経験し続ける
ロボット2 → 時間が止まったまま
世界は同じでも、経験した時間が違う
③ 再開すると何が起きるか
再開した瞬間、
ロボット1:恐怖が落ち着いている
ロボット2:恐怖が高いまま
その結果、同じイベントでも
●反応
●fear
●行動
がズレる。
性格はパラメータではなく、履歴です。
ログを見てもつまらないと思いますが、今回はこれが目的なので・・・
ar=0.75 lure=0.35 feltF=0.50 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
0 sleep_far | Robot-1 model=fear_v1 fear=0.56 lure=0.31 feltF=0.43 feltL=0.52 action=flee utter=Pabu
0 sleep_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
1 wake_far | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.71 feltL=0.51 action=flee utter=Pabu
1 wake_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
2 play_mid | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.84 feltL=0.55 action=flee utter=Gau
2 play_mid | Robot-2 [PAUSED] fear=0.85 lure=0.39
3 roar_mid | Robot-1 model=fear_v1 fear=0.75 lure=0.36 feltF=0.94 feltL=0.50 action=flee utter=Aga
3 roar_mid | Robot-2 [PAUSED] fear=0.85 lure=0.39
4 hunt_seen | Robot-1 model=fear_v1 fear=0.86 lure=0.38 feltF=0.99 feltL=0.53 action=flee utter=Gau
4 hunt_seen | Robot-2 [PAUSED] fear=0.85 lure=0.39
5 threat_close | Robot-1 model=fear_v1 fear=0.96 lure=0.39 feltF=0.99 feltL=0.51 action=flee utter=Gau
5 threat_close | Robot-2 [PAUSED] fear=0.85 lure=0.39
6 sleep_again_far | Robot-1 model=fear_v1 fear=0.75 lure=0.34 feltF=0.49 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
0 sleep_far | Robot-1 model=fear_v1 fear=0.56 lure=0.31 feltF=0.42 feltL=0.52 action=flee utter=Pabu
0 sleep_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
1 wake_far | Robot-1 model=fear_v1 fear=0.64 lure=0.33 feltF=0.71 feltL=0.51 action=flee utter=Pabu
1 wake_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
2 play_mid | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.84 feltL=0.55 action=flee utter=Gau
2 play_mid | Robot-2 [PAUSED] fear=0.85 lure=0.39
3 roar_mid | Robot-1 model=fear_v1 fear=0.75 lure=0.36 feltF=0.94 feltL=0.50 action=flee utter=Aga
3 roar_mid | Robot-2 [PAUSED] fear=0.85 lure=0.39
4 hunt_seen | Robot-1 model=fear_v1 fear=0.86 lure=0.38 feltF=0.99 feltL=0.53 action=flee utter=Gau
4 hunt_seen | Robot-2 [PAUSED] fear=0.85 lure=0.39
5 threat_close | Robot-1 model=fear_v1 fear=0.96 lure=0.39 feltF=0.99 feltL=0.51 action=flee utter=Gau
5 threat_close | Robot-2 [PAUSED] fear=0.85 lure=0.39
6 sleep_again_far | Robot-1 model=fear_v1 fear=0.75 lure=0.34 feltF=0.48 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
0 sleep_far | Robot-1 model=fear_v1 fear=0.56 lure=0.30 feltF=0.40 feltL=0.52 action=flee utter=Pabu
0 sleep_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
1 wake_far | Robot-1 model=fear_v1 fear=0.64 lure=0.33 feltF=0.72 feltL=0.51 action=flee utter=Pabu
1 wake_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
2 play_mid | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.85 feltL=0.55 action=flee utter=Gau
2 play_mid | Robot-2 [PAUSED] fear=0.85 lure=0.39
3 roar_mid | Robot-1 model=fear_v1 fear=0.75 lure=0.36 feltF=0.94 feltL=0.50 action=flee utter=Aga
3 roar_mid | Robot-2 [PAUSED] fear=0.85 lure=0.39
4 hunt_seen | Robot-1 model=fear_v1 fear=0.87 lure=0.38 feltF=0.99 feltL=0.53 action=flee utter=Gau
4 hunt_seen | Robot-2 [PAUSED] fear=0.85 lure=0.39
5 threat_close | Robot-1 model=fear_v1 fear=0.96 lure=0.39 feltF=0.99 feltL=0.51 action=flee utter=Gau
5 threat_close | Robot-2 [PAUSED] fear=0.85 lure=0.39
6 sleep_again_far | Robot-1 model=fear_v1 fear=0.75 lure=0.34 feltF=0.47 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
0 sleep_far | Robot-1 model=fear_v1 fear=0.55 lure=0.30 feltF=0.39 feltL=0.52 action=flee utter=Pabu
0 sleep_far | Robot-2 [PAUSED] fear=0.85 lure=0.39
R2 enabled = true
1 wake_far | Robot-1 model=fear_v1 fear=0.63 lure=0.33 feltF=0.72 feltL=0.51 action=flee utter=Pabu
1 wake_far | Robot-2 model=fear_v1 fear=0.87 lure=0.40 feltF=0.64 feltL=0.51 action=flee utter=Auo
2 play_mid | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.86 feltL=0.55 action=flee utter=Gau
2 play_mid | Robot-2 model=fear_v1 fear=0.80 lure=0.39 feltF=0.70 feltL=0.55 action=flee utter=Aro
3 roar_mid | Robot-1 model=fear_v1 fear=0.75 lure=0.36 feltF=0.95 feltL=0.50 action=flee utter=Aga
3 roar_mid | Robot-2 model=fear_v1 fear=0.88 lure=0.40 feltF=0.85 feltL=0.50 action=flee utter=Gau
4 hunt_seen | Robot-1 model=fear_v1 fear=0.87 lure=0.38 feltF=0.99 feltL=0.53 action=flee utter=Gau
4 hunt_seen | Robot-2 model=fear_v1 fear=0.96 lure=0.41 feltF=0.94 feltL=0.53 action=flee utter=Aro
5 threat_close | Robot-1 model=fear_v1 fear=0.96 lure=0.39 feltF=0.99 feltL=0.51 action=flee utter=Gau
5 threat_close | Robot-2 model=fear_v1 fear=1.00 lure=0.41 feltF=0.95 feltL=0.51 action=flee utter=Gura
6 sleep_again_far | Robot-1 model=fear_v1 fear=0.75 lure=0.34 feltF=0.46 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 model=fear_v1 fear=0.81 lure=0.36 feltF=0.57 feltL=0.52 action=flee utter=Gawo
0 sleep_far | Robot-1 model=fear_v1 fear=0.55 lure=0.30 feltF=0.38 feltL=0.52 action=flee utter=Pabu
0 sleep_far | Robot-2 model=fear_v1 fear=0.63 lure=0.32 feltF=0.53 feltL=0.52 action=flee utter=Uwaa
1 wake_far | Robot-1 model=fear_v1 fear=0.63 lure=0.33 feltF=0.73 feltL=0.51 action=flee utter=Pabu
1 wake_far | Robot-2 model=fear_v1 fear=0.68 lure=0.34 feltF=0.64 feltL=0.51 action=flee utter=Uwaa
2 play_mid | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.87 feltL=0.55 action=flee utter=Gau
2 play_mid | Robot-2 model=fear_v1 fear=0.64 lure=0.35 feltF=0.69 feltL=0.55 action=flee utter=Gura
3 roar_mid | Robot-1 model=fear_v1 fear=0.75 lure=0.36 feltF=0.95 feltL=0.50 action=flee utter=Aga
3 roar_mid | Robot-2 model=fear_v1 fear=0.73 lure=0.37 feltF=0.84 feltL=0.50 action=flee utter=Auo
4 hunt_seen | Robot-1 model=fear_v1 fear=0.87 lure=0.38 feltF=0.99 feltL=0.53 action=flee utter=Gau
4 hunt_seen | Robot-2 model=fear_v1 fear=0.84 lure=0.38 feltF=0.94 feltL=0.53 action=flee utter=Gura
5 threat_close | Robot-1 model=fear_v1 fear=0.96 lure=0.39 feltF=0.99 feltL=0.51 action=flee utter=Gau
5 threat_close | Robot-2 model=fear_v1 fear=0.93 lure=0.39 feltF=0.95 feltL=0.51 action=flee utter=Gura
6 sleep_again_far | Robot-1 model=fear_v1 fear=0.75 lure=0.34 feltF=0.44 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 model=fear_v1 fear=0.74 lure=0.34 feltF=0.56 feltL=0.52 action=flee utter=Gawo
0 sleep_far | Robot-1 model=fear_v1 fear=0.54 lure=0.30 feltF=0.36 feltL=0.52 action=flee utter=Pabu
0 sleep_far | Robot-2 model=fear_v1 fear=0.57 lure=0.31 feltF=0.52 feltL=0.52 action=flee utter=Uwaa
1 wake_far | Robot-1 model=fear_v1 fear=0.63 lure=0.33 feltF=0.73 feltL=0.51 action=flee utter=Pabu
1 wake_far | Robot-2 model=fear_v1 fear=0.63 lure=0.33 feltF=0.64 feltL=0.51 action=flee utter=Uwaa
2 play_mid | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.87 feltL=0.55 action=flee utter=Gau
2 play_mid | Robot-2 model=fear_v1 fear=0.60 lure=0.34 feltF=0.69 feltL=0.55 action=flee utter=Gura
3 roar_mid | Robot-1 model=fear_v1 fear=0.75 lure=0.36 feltF=0.95 feltL=0.50 action=flee utter=Aga
3 roar_mid | Robot-2 model=fear_v1 fear=0.70 lure=0.36 feltF=0.85 feltL=0.50 action=flee utter=Auo
4 hunt_seen | Robot-1 model=fear_v1 fear=0.86 lure=0.38 feltF=0.99 feltL=0.53 action=flee utter=Gau
4 hunt_seen | Robot-2 model=fear_v1 fear=0.81 lure=0.38 feltF=0.95 feltL=0.53 action=flee utter=Gura
5 threat_close | Robot-1 model=fear_v1 fear=0.96 lure=0.39 feltF=0.99 feltL=0.51 action=flee utter=Gau
5 threat_close | Robot-2 model=fear_v1 fear=0.91 lure=0.39 feltF=0.96 feltL=0.51 action=flee utter=Gura
6 sleep_again_far | Robot-1 model=fear_v1 fear=0.74 lure=0.34 feltF=0.43 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 model=fear_v1 fear=0.72 lure=0.34 feltF=0.56 feltL=0.52 action=flee utter=Gawo
0 sleep_far | Robot-1 model=fear_v1 fear=0.54 lure=0.30 feltF=0.35 feltL=0.52 action=flee utter=Bau
0 sleep_far | Robot-2 model=fear_v1 fear=0.55 lure=0.30 feltF=0.51 feltL=0.52 action=flee utter=Uwaa
1 wake_far | Robot-1 model=fear_v1 fear=0.62 lure=0.33 feltF=0.74 feltL=0.51 action=flee utter=Pabu
1 wake_far | Robot-2 model=fear_v1 fear=0.62 lure=0.33 feltF=0.64 feltL=0.51 action=flee utter=Uwaa
2 play_mid | Robot-1 model=fear_v1 fear=0.63 lure=0.34 feltF=0.88 feltL=0.55 action=flee utter=Gau
2 play_mid | Robot-2 model=fear_v1 fear=0.59 lure=0.34 feltF=0.70 feltL=0.55 action=flee utter=Gura
3 roar_mid | Robot-1 model=fear_v1 fear=0.75 lure=0.36 feltF=0.95 feltL=0.50 action=flee utter=Aga
3 roar_mid | Robot-2 model=fear_v1 fear=0.69 lure=0.36 feltF=0.86 feltL=0.50 action=flee utter=Auo
4 hunt_seen | Robot-1 model=fear_v1 fear=0.86 lure=0.38 feltF=0.99 feltL=0.53 action=flee utter=Gau
4 hunt_seen | Robot-2 model=fear_v1 fear=0.80 lure=0.38 feltF=0.95 feltL=0.53 action=flee utter=Gura
5 threat_close | Robot-1 model=fear_v1 fear=0.96 lure=0.39 feltF=1.00 feltL=0.51 action=flee utter=Gau
5 threat_close | Robot-2 model=fear_v1 fear=0.90 lure=0.39 feltF=0.96 feltL=0.51 action=flee utter=Gura
6 sleep_again_far | Robot-1 model=fear_v1 fear=0.74 lure=0.34 feltF=0.42 feltL=0.52 action=flee utter=Bupapa
6 sleep_again_far | Robot-2 model=fear_v1 fear=0.72 lure=0.34 feltF=0.56 feltL=0.52 action=flee utter=Gawo
これはめちゃくちゃ綺麗にロボットたちの「履歴差」出てるログです。
R2は最初、ライオンを見せた状態で停止させていたので
Robot-2 [PAUSED] fear=0.85 lure=0.39 固定のまま時間が進み
“高い恐怖を抱えたまま時間が止まってる”状態でした。
その間、R1は sleep_far/wake_far/... を何周も回って、恐怖が下がる(sleep)また上がる(roar/hunt/threat)を繰り返してました。
R2の再開直後に「時差」が爆発
再開した瞬間(1 wake_far)で
-
R1:
fear=0.63 -
R2:
fear=0.87
僕のAtron研究では、外部影響の事を外輪(3人称)、内部影響の事を内輪(一人称)と命名しています。
外輪(三人称):
-
世界の出来事
-
群れ
-
社会
-
他者
-
ライオンの状態
-
group.ally
内輪(一人称):
-
fear の蓄積
-
lure の履歴
-
weights の変化
-
last_action
-
停止中は変わらない
-
経験した分だけ性格が変わる
そのあとR2が一瞬で1.00に張り付く
5 threat_close で
R2: fear=1.00これは「停止前に溜め込んだ高恐怖」の上に、近距離脅威が乗って、飽和してる。
つまりライオンの変化で言うと
R1は「ライオンが遠くで寝た→落ち着いた」を何回も挟んでる。
R2は「怖いピークのまま凍結」してたから、再開したとき
“さっきの恐怖を抱えたまま、次のライオンを見てしまう"
という一人称になってる。
使ってる言語は3人称でこちらが用意した言葉を使っています。
----JavaScript----
const UTTER_POOL = [
"AuuAu", "Gauwa", "uauaga", "Awa", "Guaa", "Bau",
"Pabu", "Bupapa",
"Aga", "Uwaa", "Gawo", "Auo",
"Gau", "Uau", "Ahaa", "Gura", "Aro", "Uro"
];
今は、固定しています。
●語彙:固定
●選択:状態依存
●学習:なし
意味の収束の前段階
経験で utter を固定
特定状態 → 特定音に収束
2体で同じ音に収束
ロボットは言葉を作っていない。
ただ、状態に応じて用意された音を発している。
発声はその結果を、数値じゃなく直感的に見せるためのものです。
言い換えると 発声=内部状態のメーター
固定語彙にしている意味は、人間の赤ちゃんも
自分で語彙を作って成長するわけではないからです。
「ママ」「うあうあ」「ばー」「あうあう」
言葉の意味が先ではなく、経験を重ねて意味を重ね、親や周りの会話を徐々に覚えていきます。ですから、赤ちゃん状態のロボットには発声しやすい語彙を用意しておきます。
たとえばスタートが同じ状態のロボットが
R1:いつも「Gau」
R2:いつも「Uwaa」
となったら、「性格が違う」のが一目で分かる。
今回のデモはそれぞれの一人称の自律を見るデモなので、語彙の自然発生は控えています。
一人称の経験による内部状態の分岐を見ること。
大事なのは、世界を複雑にすることを考えるのではなくて
外輪を「出来事の源」にして、内輪がどう分岐するかを見ることです。
今はライオン(1種類)→ sleep / roar / hunt などのイベントを
やっていますが、動物を沢山増やしたりロボットが獲物を捕ったり荷物を村まで運ぶなどは意外と難しくはないのです。(アソシアトロン系列の論文や書籍を全て読み尽くせば)
でも、この研究は次のシーンに進まなければいけないんです。
ロボットが獲物を捕獲したものを村まで運ぶことで家族が養われ、捕獲した荷物が無ければ、危険な場所に出向いて狩りを行わなければいけなくなる。収穫があるうちは森や川に行って比較的安全な場所で狩りをするが、気候変動や災害によって獲物が取れなくなるとロボットは家族のために危険を冒すかどうか。その時、他のロボットとの共同作業が生まれるか、どう分配するか?もしかしたら争うのかが観たいわけです。自律を終点にするのではなく、自律からどのように社会形成をしていくかが問われていくはずです。知能ですから。
なぜかというとエージェントのように外の目的で動く(3人称が決めた目的に向かって行動する存在)が、いつしか「自律」と呼ばれる方向で進んでしまっているからです。正しく行動するという概念は、そもそも自律ではないのです。その時点で大人なんですから。
正しいという概念がそもそも外からの情報で自律とは関係がありません。関係があるのは自律したAtronが成長する上でエージェントの正しさを学ぶ時です。
エージェントは目的がある(報酬・ゴール)、評価基準がある(スコア・最適化)、改善の方向が決まっている。つまり「どう動けば一番いいか?」を計算しているもので、世界の外から見た3人称アルゴリズムです。エージェントは自律ではないのですが、半生物であるAtronの教師役としては最高の存在になると思っています。
連想記憶(Hopfield )
パターンを記憶する、ノイズがあっても思い出す、エネルギー最小へ収束する。
Hopfieldは 状態の履歴・収束までは行いますが、履歴から一人称で行動を思考するところまでは行っていません。なぜなら、失敗を経験としていないからです。ノイズがあっても綺麗に収束し過ぎて経験になっていない、ということです。
バスケットボールやアイスホッケー両方とも僕は経験しているのですが、練習しないと上手にシュートが決まることはありません。プロなんかは僕の10万倍、100万倍失敗の経験があるんです。だから綺麗にシュートが決まる。100点満点の評価基準の中だけの計算ではなく、積の中の負が積み重なるから「次はこうしよう」という意思や判断が生まれる。それが練習という経験から生じる自律です。
Hopfieldのシステムは、ライオンに出会って、もし襲われ瀕死の状態になっても次また同じ行動をとってしまいます。構造はアソシアトロンと似てはいますが、3人称で綺麗に収束し過ぎるため、結果大きな違いが出てきます。
しかし、ロボットの体にとっては、むしろ Hopfield型やバックプロパゲーション、状態系の考え方のほうが「神経回路らしい」かもしれません。
発達ロボット(Developmental Robotics)
これも自律と呼ばれる方がいますが、内部は結局、報酬設計・外部評価です。
人工生命(ALife)
感情・連想の内側が弱い。知能として成長がどうなってるのか不明
個体差がある、世代で進化する、環境に適応する、生き残る/死ぬ
生態としての変化は利用したいと考えましたが、今の段階では知能として結びつきずらさを感じました。
アソシアトロンはおかげさまで一人称として動きました。
外輪(3人称)の影響を受けながらも、内輪(1人称)の経験と歪みから発するものです。
アルゴリズムじゃない
失敗も経験する
記憶はきっかけで思いだす
100%正解は関係ない。
報酬なし
最適化なし
正解なし
同じ環境でも個体差が出る
停止→再開で履歴が効く
発声が内部状態の可視化
2体で経験のズレが出る
2体のうち経験者の1体の行動に釣られる
赤ちゃんから育て、それぞれの環境で性格や思考が変わるものです。
たぶん、もうアソシアトロンの原型から若干離れているかとは思うのですが、それでもアソシアトロンには原型があって核というものがあるんです。
連想記憶
文脈による競合
想起の収束
状態遷移(エネルギー景観)
僕はここから離れたことは一度もありません。
随分と枝葉はつけましたが、つけたのは、Atron,一人称、群れ、社会、狩り、家族、分配、内輪・外輪、文化的シナリオ程度で、親はアソシアトロンです。
このAtronの源泉はやはり中野博士のアソシアトロンで間違いないんです。
当然森田先生の非単調や池田先生のロボットというものが存在していなければ、こんな研究は出来なかった。後は関係者の方々が沢山の書籍や資料を残してくれたから。
1人もお会いしていませんが(笑)
----追記メモ---------------なんかライオン一匹のくせに重くなってた-----------------------
ログをバッファしてまとめて書くか、サイズが増えるから自動ローテンション
run_20260302_001.ndjson
run_20260302_002.ndjson
するか。
gzipで圧縮しながら保存するか・・・
JSONは圧縮利くからいいよねw
重みは毎ステップ全部書くと重いので、現実的には差分(更新したキーだけ)もしくは 100ステップに1回だけ全weights保存とかか・・・
いや、それだと変化が見られないか・・・
たぶん、動物増やしたり、ワールドの3人称 条件増やしたり、原始時代、中世、近代、現代とシーンを回していくので、それまで我慢するか・・
0 件のコメント:
コメントを投稿