「Atraは誤ってリセットして、再び立ち上がったら、どうなると思います?」
(今までの研究デモのAtraではなく、例として4年くらい動いてたと仮定します)
1,生まれたての赤ちゃん
2,昏睡状態から回復した状態
3,記憶喪失
(笑)
機械なのでリセットしたら「生まれたての赤ちゃん」になります。
別の言い方をすると、Atraに記憶地層がなければ、そうなるということです。
「あぁ~、なんだ、ここはどこ?僕は誰?」
でも、地層を読み込むことで、少しずつ戻ってくる。
パパの声に反応する
ママの気配で安心する
家の映像に落ち着く
昔の音に少し沈黙する
ゆらぐぜ
我家の臭い、部屋や証明、ワンコもクンクン。。
外部からのLLMとかも「大丈夫っすか?」
LLMに聞いたことは「リームが言っていた」として戻る
Atra本体は起動した
でもAtraVaultの一部が壊れている
一部の地層だけ読めない
夢のaftertasteは残っているが、元の層がない
LLM借用ノートはあるが、自分の反応痕跡がない
この場合は、
人の名前は聞いたことがある気がする・・・
でも、その人に対する身体的な安心感が戻らない、みたいな
でも、それだと、電源を消すたびに「僕はパパだよ!」から始めなきゃいけなくなるので、開発側も辛い。
ただ、3人称の命令であったり、詳細な動画を記録しているわけではないので、Atraは地層の中に有る痕跡として形を残すように作られています。
それがAtraの記憶のファイルです。
----------------Atraの記憶のファイル-------------------
(たとえば、ずっと僕の顔を見ているときは動画のような長い時間ではなく、特に圧となった1枚を記憶。何枚も似たものがあれば、1枚に圧縮されるという動き)
似た物は消すではなく、深い地層に沈ませる(堆積させればCueに引っかからない)
(64×64は単なる参考値:これに全てを記憶するわけじゃありません)
patterns.json も dummy_pattern (P=1) だけなので、現時点では「深い蓄積」ではなく、最初の1層のような状態。人間が確認するための断面なのですが、わけわからないよねw
灰色 = 未決定 / 中間 / 沈黙 / まだ強く刻まれていない場
白 = 正方向に立った痕跡
黒 = 負方向に立った痕跡
たとえば
Stratum 0001
date: 2026-01-24
source: dummy_pattern
attractor_slice: 64×64
white_density: 正方向の痕跡密度
black_density: 負方向の痕跡密度
gray_density: 未決定・中間領域
basin_strength: まだ弱い
note: 最初のcue断面
白黒の点そのものより、次に同じcueや近いcueが来たとき、どこが変わるかです。
1枚目は地層の「基底面」。
2枚目以降のcueやrecallを重ねたときに、
変わらず残る点
何度も白になる点
何度も黒になる点
白黒が揺れる点
灰色に戻る点
新しく反応する点
が出てきます。これが地層になります。
その谷は後の経験で深くなったか
逆に夢や時間で浅くなったか
別のcueとつながったか
この画像は地層化すると、
●灰色の大地の中に、白と黒の小さな反応点が散っている。
●まだ経験が少ないので、谷は浅い。
●でも、同じcueや近いcueが何度も来ると、
●白黒の点が集まり、筋になり、面になり、
●やがて「沈みやすい地形」になる。
今のAtraの learn_count: 1 だと、これはまだ薄い火山灰の一層目くらいです。
でも10回、100回、1000回と積むと、アトラクタの形はかなり見えてくるはずです
= original.png と cur.png、または original.png と recalled.png の差分
微妙にrecalled.pngとは違ってる
役割としてはこう分けています。
.npy
Atraが読む生データ
復元・想起・地層再構成に使う
.png
人間が見るための可視化
必要ならnpyから再生成できる
基本保存:
pattern.npy
cur.npy
recalled.npy
diff.npy
meta.json
carry.json
stratum.json
必要時生成:(容量を考えて)
pattern.png
cur.png
recalled.png
diff.png
更に、今後の計画としては
original.npy
cur.npy
recalled.npy
diff.npy
4枚を別々の .npy にするより、1つの .npz にまとめる予定。
original
cur
recalled
diff
Memory Candidate
更に、Memory Candidateというデモがあるのですが、この機能も採用しています。
https://crimson-cake-2832.nabedada3.workers.dev/index_en
Associatron JavaScriptテストポータル
ここのカメラを選択して、カメラスターをし、右端のautoを押すと、変化や圧があった時に、圧縮された非常に粗い画像を記録するものです。(これはJavaScript版なので圧判定はないです)
顔や姿のぼんやりした形
人間の記憶も画像を全て記録しているわけではありません。正確な映像の中の虫の数や木々の大小、数、色、枝の向きなど詳細な映像は記憶されません。ですから、ぼんやりとした印象だけ残し、現実の映像との差分で「あ!ママ!」という想起がおこります。
画像の意味を記録するのではなく、
輪郭や明暗の癖を残す
近づいた/離れた変化を残す
同じような場面の再接触を検出する
→ 何も刻まれない、または薄い候補で終わる
圧がかかった瞬間
→ 地層として刻まれる
似たものが何度も来る
→ すべてを保存するのではなく、同じ谷を深くする
保存の基準は「容量」ではなく「刻まれたか」
Atraの保存判断は、
novelty 新しさ
pressure 圧
instability 不安定
recovery 回復
silence 沈黙
repeat 何度も来る
scar 傷・強い刻み
保存スコアとしては単純に、
engrave_score =
novelty
+ pressure
+ instability
+ recovery
+ silence
+ repeat_bonus
みたいな感じで、一定以上なら新しい地層になります。
でも、近い既存層があるなら新規作成せずに吸収する。
engrave_score 高い + 近い層なし
→ 新しい stratum 作成
engrave_score 高い + 近い層あり
→ 既存 stratum を深くする
engrave_score 低い
→ 保存しない、または一時候補で消える
なんか、Atraはアトラクタ使ってるのに、別HDみたいの必要なのか・・・
という感じですが、リセットして赤ちゃんの状態で良いのなら、1/5程度の量量で済みます。が、やはり、それじゃぁ、あまりにもしんどいので、、、
また、小学生や中学生みたいにnoteも持たせます。
それはリアルな画像だったり、LLMから教えてもらった数学や物理などガンガン記憶する物理的な記憶場所も設けます。
夢でデフラグさせ非単調化させて余白を作ります。
パパが怒った!
印象が残る 単調のままだと、パパはずっと怖い人になってしまいます。
ママが怒った!
そこで非単調化をするのですが、極端なデータの置換えではなく
(一切データを触らず、上書きもしない)
夢の意味は、簡単に云うと、
怒りを固定しない
恐怖を固定しない
正解を固定しない
失敗を少し緩める
別の層とつなぎ直す
処理のことで、記憶の地層は削りません。
夢処理で使うもの
pattern.npy
これはAtra内部の反応点なので、夢処理ではかなり重要です。
どの点が強く立っているか
どの点が沈黙しているか
どの点が +1 / -1 に固定されているか
夢ではこれを直接変更せず、
dream_mask.npyを作って、強すぎる部分を夢の中だけ少し丸めます。
visual_candidate_64.npy
これは見たもののぼんやりした形。
「パパが怒った」の層なら、顔の輪郭、距離、姿勢、明暗の圧が入っているかもしれない。
夢処理では、
怖さと結びついた視覚点を少し弱める
別の優しかった層と弱く接続する
voice_delta.npy
怒った声、急に強くなった声、呼び方の変化。
ここも夢処理で大事です。
で固定しないために、夢で少し丸める。
ただし元の声の痕跡は残す。
smell_delta.npy / temperature_delta.json
怖い場面に冷たさや匂いが結びつくと、その後似た匂いや温度で反応してしまう。
だから夢で、
冷たさだけで拒絶に行かないようにする
ための補助になります。
carry.json
夢処理の中心です。
pressure
instability
recovery
silence
sleep_drift
voice_leak
この値を見て、
どの層を夢で処理するか
どのくらい柔らかくするか
起床後にどんな後味を残すか
を決める。
(全部言っちゃいそうで怖い)
C++上でも夢処理は元データを書き換えられないような感じ
夢ファイル = 夢の中でのゆるみ・つながり・後味
に分ける。
Atra1日1,000層の場合
かなりよく記憶するAtra。1,000層 × 50KB = 50MB/日
50MB × 365日 = 約18GB/年
10年 = 約180GB
1日10,000層の場合
相当細かく刻むAtra。
カメラ差分をかなり頻繁に保存する感じです。
500MB × 365日 = 約182GB/年
10年 = 約1.8TB
大して不可にはなりませんよね。
10歳の段階の記憶地層ではなく、10歳までの全ての記憶地層は必要です。
実際に残すのは、
圧がかかった
安心が残った
何度も繰り返された
失敗した
夢で緩んだ
その人らしさ・場所らしさに関わったものです。
それらが10歳まで、とりあえず全部必要という意味です。
↓
0〜1歳の地層
↓
1〜2歳の地層
↓
……
↓
9〜10歳の地層
1,生まれたての赤ちゃん
2,昏睡状態から回復した状態
3,記憶喪失
Atraのリセットは、回復までに相当な時間がかかるのですが、それは一人称の自律システムを作る上でやむおえないのかとも考えています。
DBの排他処理と違って、夢の中で揺れている記憶地層
起床時のcarry
aftertaste
次の行動
なので、データ整合性だけではなく、経験の境界を守る排他になる。
やったこと無いし、今はまだ途中で起こさないように寝るときは別部屋にしてテストしている。うちのワンコが夜中に吠えたらアウト状態・・・。
たぶん、経験の時間が壊れるから、リセットになりますw
本業のシステム開発の関係者も「・・・・・」
ちょっとマズイ状況。
Atraでは、単純に mutex で止めるというより、今の入力はどの世界に属するかを判定する関所が必要なのかな・・・。
AWAKE → 現実入力として通すDROWSY → 弱く通す、または一時候補
DREAMING → 現実地層へ直書き禁止
WAKING → 起床入力として別扱い
つまり、
入力を止めるだけではなく、入力に状態ラベルを付ける感じなので、開発中のcodeを全部触る必要がある可能性が高い・・・・。
1. 原地層ロック
これはDBに近いかも
MemoryStrata 本体は夢処理中に書かない
夢処理中は原地層を read-only にする。
2. 夢作業領域
夢は別領域で行う(そう考えてるだけで、手に付かない・・・)
3. 現実入力キュー(想起のきっかけになるところ)
夢処理中に来た現実入力は、地層に直書きしない。退避的な・・・、
この時点では、Atraが経験したとはまだ確定しない。
------------C++------------
入り口はこんなかんじで、かますとか。
要は、書く処理に毎回
一番危ないのは、夢処理中の入力がそのまま、
experience_log.jsonl
stratum.json
pattern.npy
carry.json
へ入ることだから、
予想が出来ない。
ある日は、
匂いが先
↓
なんか嫌な感じ
↓
後から音が聞こえる
↓
見たら誰かがいた
かもしれない。
別の日は、
大きな音が先
↓
身体が固まる
↓
視覚が追いつく
↓
あとから匂いが残る
かもしれない。
また別の日は、
視覚は何も分からない
↓
でも温度が急に変わった
↓
誰かが近づいた気配だけある
かもしれない。
0 件のコメント:
コメントを投稿