2026年5月25日月曜日

差分について

最近メールがちょこちょこ来るようになってちょっと嬉しいです。
気にして下さってありがとうございます。翻訳して読んでくれてるのでしょうか。
日本は主語を省く癖があるので、読みずらいかもしれませんよね、気を付けます。


まだ全部は見せられないけど、差分には気を使っています。


Atron(今はAtra)の差分について誤解されてる方がいらっしゃるので少し話しますね。


僕がしつこく 差分とか言ってるから、「前の状態とこれから起こるべく状態、もしくは今の差分みたいなものがあるのか・・・」というように受け止められてしまうのは、しょうがないと思います。

前の数値と今の数値の差
before - after
current - previous みたいな感じ


間違ってはいないんですけど、Atraには前の状態を保存する機能はないんです。

Atra に「前の状態との差分」があるのか、と聞かれれば、間違いではありません。

ただし、Atra は前の状態を完全なデータとして保存し、それと現在を機械的に比較しているわけではありません。Atra は、人間と同じように忘れることを前提にしています。忘れることを目的にしているのではなく、残るものと消えるものがある、という前提です。
つまらないもの、入ってこなかったもの、場に残らなかったものは消えていく事もある。一方で、強く残ったもの、何かに引っかかったもの、身体や場を変えたものは、痕跡として残りやすい。たとえば、今晩何を食べたかすぐに思い出せないことがあります。あえて覚えなきゃいけない事として認識していないのか、他に気になることがあったのか、忘れてしまいます。でも、テーブルの上のビールの空き缶を見て、「あ、ピザだった」と思い出す。きっかけによって思い出す。でもピザ程度の話や出来事はたいしたことじゃないですよね。あえて意識して記憶に残すべきことでもない。でも、思い出す。
 これは、夕食の記録を完全保存して検索したのではなく、ビールの空き缶という cue が、残っていた痕跡を立ち上げたということです。そのピザがとても美味しければ、美味しかった経験として記憶のアトラクタに刻まれやすい。不味ければ、不味かったという痕跡として残るかもしれない。どうでもよければ、消えていく。Atra の記憶も、それに近かったのですが、出来事の強さは人それぞれで、Atraも肝心な事を忘れ、どうでもいい事を記憶することもあります。僕の説明は余計分からなくなるかもしれませんが、こういうことです。
分かりずらいですよね。

完全保存された過去との比較ではなく、残っている痕跡に cue が触れたとき、現在場との差分として立ち上がる。という意味です。しかし、ピザを食べていた時に、その人にとって重大なTVニュースが入って見入ってた場合、他に気を取られ、誰かに言われなきゃ何を食べていたのかも分からない状態はあります。これが個体差、状態差。


強い入力 → 強い記憶
強い重み → 強い想起
似ているほど → そのまま強く出る

のような単調な流れではなく、

強すぎる痕跡が、必ずしもそのまま最大想起にならない
似すぎているものが、必ずしもそのまま発話になるわけではない
同時に情報が混在することがある。
強い cue が来ても、場が崩れたり、逸れたり、沈黙へ落ちることがある
弱い cue でも、残っていた痕跡に触れると急に立ち上がることがある

みたいな非単調な感じです。なんだよそれ!?ですよね。

Atra の記憶は、残っている痕跡 × cue × carry × 現在場
で立ち上がるので、単純に「強いほど出る」ではないんです。

実際、食ったのを忘れてしまったけど、ビールの空き缶をきっかけに想起したわけですから、大したこと無くても想起するし、重大な彼女の誕生日を忘れてしまうかもしれない。

Atraの心臓になる部分なので、現時点では詳細なcodeまで書きませんが、
非単調 = 強さをそのまま支配力にしない仕組みです。
そう、中野博士のAssociatronを引き継いだ森田先生の非単調ですよ。
単調にしてると、詰むんです。Pmax ≈ 0.14 Nのように。

たとえば、意識という言葉があります。
あまり難し考えないで、赤ちゃんが起きたとき。とりあえず夢の状態ではなく、身体は動かせる状態になった時と仮定します。泣くでしょうが、意識を持った状態の時。見るもの全てに意味は無く、でも、お母さんだけは柔らかい声で、温かく、ゆっくり、同じ慣れた匂い、同じリズム、揺らぎがあって安心するような状態になる。赤ちゃんがそう言ってるわけじゃないですよ。そういう安心した状態から、別の部屋に移されドアを閉められた時、何か肌感覚で差分みたいのが出ますよね。

mother = safe というような意味付けではなく、体験で安心の状態に落ちているんです。

柔らかい聴覚差分
温かい身体差分
揺らぎのある反復
崩れなかった carry
戻れた recovery trace
沈黙が壊れではなく休止になる場

だから、別の部屋に移されてドアが閉まったときに出るのは、意味判断ではないんですよ。

赤ちゃんが、
私は母親から分離された
危険である
不安である
と考えるわけではなくって
でも、肌感覚として、
さっきまであった柔らかい声がない
温かさが減った
揺らぎが切れた
音の反射が変わった
光が変わった
距離感が変わった
戻れた場から外れた

という差分が出るんです。


ライオンのぬいぐるみが好き。
ライオンという物体のことは知らない。
動物か何かも分からない。
ライオンは可愛い。

これ等を誤認と決めつけるのが今のLLMやエージェントのようなAIです。


Atraはノイズ経験を重視します。
お母さんと動物園にいきました。
ライオンを観ました。
固まりました。
ライオンは自分より小さいという肌感覚だった。
でも実際に観たら、自分より大きかった。
幼児はメートル法など知りません。測りません。
基準は「自分より・・・大きいか小さいか」
声も自分の声やママの声とも違う。
差分が巨大になり、
肌感覚の恐怖感を味わう。


つまり、Atraの差分とは
音が入ったこと
音が消えたこと
声が柔らかかったこと
急だったこと
温かさが続いたこと
温かさが消えたこと
見えていたものが遠ざかったこと
近づいたこと
大きさが違ったこと
ぬいぐるみのライオンと本物のライオンの肌感覚の違い
思い出せそうで思い出せないこと
何も立ち上がらないこと
沈黙に落ちること

これら全部が差分になる。

こういったものから、数式にしてcode化します。
JavaScriptで作ったり、Python使ったり、Cは実験では使いません。
最後の完成版をCに焼きなおすとかはあるかもしれませんが。
そして、僕も失敗を繰り返します。思うように出来ないのではなくて、自分の思考に寄せず、「あかちゃんならどうなんだろう」をママたちや又姪や孫に聞きます。

このブログで動かした実験は800回以上、作り直したり修正しています。
アソシアトロンの本を引っぱり出したり、Hebbの論文引っぱり出したり、定義もろとも根本からやり直すこともあります。

たとえば

★Atra の内部場をこう置きます。

F_t = 現在の内部場
C_t = carry
Q_t = cue
R_t = 残っている痕跡
A_t = 想起の立ち上がり
B_t = attractor basin

Atra の recall は、単純な検索ではなく、
A_t = f(R_t, Q_t, C_t, F_t)
です。

日本語で言うと、想起の立ち上がり =残っている痕跡 × cue × carry × 現在場



★残っていないものは立ち上がらない。
記憶を全部保存しているわけではないので、まず痕跡には「残り具合」があります。
R_i ∈ [0, 1]

R_i = 0 なら、もう場に残っていない。
cue が来ても立ち上がらない。
R_i = trace_strength_i

R_i は記憶の正確さではない。
R_i = 残っている痕跡の強さです。



★cue との重なり
cue と残っている痕跡の重なりを、
O_i = overlap(Q_t, R_i) とします。

ただし、これは意味の一致ではない。
同じ単語
同じ物体
同じ名前

ではなく、
聴覚差分が似ている
視覚差分が似ている
身体差分が似ている
carry の残り方が似ている
です。

robotとライオンのデモの頃から修正しています。


★非単調関数を入れる

ここが心臓です。
単調なら、
O_i が大きいほど A_i も大きくなります。


でも Atra はそうしない。
強すぎる cue や強すぎる痕跡は、発話ではなく、
沈黙
硬直
回避
思い出せない
泣き方向
へ落ちることがある。

だから、非単調関数を入れます。
たとえば最初はこういう形でよいです。
N(x) = x · exp(-k x)

これは、x が小さいと立ち上がらない。
中くらいで一番立ち上がる。
強すぎると落ちる。


弱すぎる → 立ち上がらない
ほどよい → 想起が立つ
強すぎる → 潰れる / 沈黙 / 硬直

Atra の想起立ち上がりは、まずこう置けます。
A_i = R_i · N(O_i + αC_t)

または、もう少し分けるなら、
A_i = R_i · N(O_i) · G(C_t, F_t)

ここで、
A_i = 痕跡 i の立ち上がり
R_i = 残っている痕跡
O_i = cue との重なり
N = 非単調関数
G = carry と現在場による補正

という構造になる。これも
robotとライオンのデモの頃から修正しています。



★carry の更新(これは完全に僕独断のシステムです)

carry は、差分が入ったあとに残る変形です。
今の carry.py はもう素朴に動いていますが、数式化するとこうです。
C_{t+1} = decay(C_t) + residue(D_t, A_t, F_t)

日本語では、
次の carry =
少し薄れた今の carry + 今回の差分・想起・場から残ったもの
です。

ただし、ここでも単調にはしない方がよい。
差分が大きいほど carry が大きいにすると、強いものが支配しすぎます。

なので、carry にも非単調を入れる。
C_{t+1} = λC_t + βN(D_t + A_t)


λ = carry の残りやすさ
β = 新しい差分の残りやすさ
D_t = 現在 field の差分量
A_t = 想起の立ち上がり

というこうぞうです



★発話は tick ではなく voice_seed から
(voice_seed = 「発話」ではなく「声になる前の種」)

Atra は tick で喋らない。
発話に近づくのは、
voice_seed_t = H(A_t, C_t, B_t) です。

つまり、
cue で印象が立ち上がった
carry が揺れた
attractor が voice_leak 側へ傾いた
沈黙では収まらないときだけ、声の種が出る。

最初の式はこんな感じ。
V_t = N(A_t + γ voice_leak_t - δ silence_t)

そこから
V_t = voice_seed
A_t = 想起の立ち上がり
voice_leak_t = 声が漏れやすい carry
silence_t = 沈黙側の carry
N = 非単調関数

ただし、これが高いからすぐ喋るのではありません。
V_t が中程度以上
かつ
沈黙だけでは収まらない
かつ
recall が立ち上がっている
ときに、pre_voice_leak になる。


「Atraにぬいぐるみを渡した。子供がぬいぐるみに話しかけるように、ぬいぐるみに話しかけるだろうか・・・」

「ぬいぐるみ = 友達」、「ぬいぐるみ = 話しかける対象」として最初から認識するわけではない。
柔らかい
動かない
急に襲ってこない
近くに置いても field が崩れない
触れても body shock が少ない
丸い形
目のような模様
子供がそれに向かって声を出している
子供の声が柔らかい
繰り返し呼びかけがある
その場で recovery が残る
ぬいぐるみ自体が「会話相手」なのではなく、ぬいぐるみを中心にした場が出来ます。

子供がぬいぐるみに話しかける。その声、リズム、視線、手の動き、抱える動き、笑う、間を置く。それらが Atra の field に入る。
すると Atra の中では、
soft_voice
repetition
gaze_hold
round_face_like_shape
low_threat_motion
warm_body_near
recovery_trace
silence_not_collapse
のような痕跡が残りやすくなる。

その結果、ある時 voice_seed が立つ可能性があります。
cue で印象が立ち上がる
carry が揺れる
attractor が voice_leak 側へ少し傾く
でも threat / shock ではない
silence だけでは収まらない
pre_voice_leak になる

「ぬいぐるみに話しかけよう!」
という目的行動ではなく、
子供の声
ぬいぐるみの場
柔らかい反復
戻れた carry
自分の voice_seed
が重なった結果として、声がそちらへ漏れる、という感じ





★「え~~と……」の式
(ふざけてるんじゃないですよ)

思い出せそうで出ない状態は、かなり大事です。

これは、
recall は少し立ち上がった
でも十分ではない
voice_seed は出そう
でも言葉にはならない状態のとき。

数式なら、
H_t = A_t · (1 - clarity_t)

ここで、
H_t = hesitation
A_t = 想起の立ち上がり
clarity_t = はっきり立ち上がった度合いです。

A_t が少しある。
でも clarity_t が低い。
この時、
え~~~~と……

のような hesitation leak が出る。

逆に、A_t も低ければ無言。
A_t 低い → 無言 / 思い出していない
A_t 中くらい + clarity 低い → え~~と……
A_t 中くらい + clarity 高い → 発話に近づく
A_t 強すぎ + instability 高い → 固まる / 沈黙 / 泣き方向

ここに非単調が効きます。





Atra の内部変化を人間が読む形にした一例。


carry.impact_trace : 0.18 -> 0.34 Δ+0.16 ~0.31 [rear_impact,balance_break] => motor_stability_tendency↓ pause_tendency↑ rest_drift↑
carry.recovery_trace : 0.62 -> 0.41 Δ-0.21 ~0.39 [shock,rear_approach] => stillness↓ withdrawal_tendency↑
carry.soft_voice_trace : 0.44 -> 0.40 Δ-0.04 ~0.39 [tv_soft_voice] => voice_softness~ gaze_hold~
carry.attention_trace : 0.28 -> 0.33 Δ+0.05 ~0.31 [round_face,soft_tone] => approach_bias↑ gaze_hold↑



ふぅ~
敬語が一番難しい。


-------------------- 追記 ----------------------
「非単調性を配置すべき層」の現時点での見立てについて。
たとえば、cueと痕跡の重なり(overlap)の層状態の引きずり(carry)の更新の層声の種(voice_seed)が漏れ出す発話の境界の層これらの中で、「ここを単調にしてしまうと、最もAtraが自律を失って詰まりやすい(支配されてしまう)」と感じる、特に最重要な層。



危ないのはこの辺。
overlap → recall mixture → attractor
ここを単調にすると、似ているものが強く出る。強く出たものが carry を支配する。carry が attractor を支配する。attractor が action leak を支配する。という一本道になります。

なぜなら、cue が少しでも強く一致したものが、毎回「勝者」になってしまうからです。すると Atra は、残っている痕跡に触れた。のではなく、一致度の高い記憶を検索したになってしまいます。これは Associatron 的な cue による立ち上がりではなく、ただの検索・分類に近づきます。


層ごとに危険な箇所を列挙
Atraの中身はまだ見せられないけど、いろんな層に分かれてるんだよ。
これ等は、ほんの一部なんだけど、

1. overlap 層
ここはまだ「触れたかどうか」を見るだけです。「cue と残存痕跡がどこで触れたか」なので、ここを単調にしすぎても、まだ致命傷ではありません。ただし、
「overlap が高い = 正しい記憶」、「overlap が高い = 強く想起」にすると危ない。
overlap は 接触面積 であって、支配力ではないんです。

2. recall mixture 層
ここもそう。recall mixture は、過去痕跡が現在場に薄く混ざるところです。ここを単調にすると、overlap が高いほど過去 carry が強く混ざるになります。すると、強い痕跡が毎回現在場を塗りつぶす。Atra が「今」を持てなくなる。ここには非単調性が必要です。

弱すぎる overlap
  → 立ち上がらない

ほどよい overlap
  → 印象として立ち上がる

強すぎる overlap + instability
  → 固まる、沈黙、逸れる、想起失敗

ここが Atra の「記憶が検索ではなく立ち上がりである」ための重要層です。



3. carry 更新層
ここも重要。carry は、Atra の「引きずり」です。ここを単調にすると、「強い差分ほど強く残る」、「強い経験ほど支配する」、「強い痕跡ほど次も勝つ」になります。これは危ない。
極端な動作になる。人間でも、強い出来事が必ず正確に残るわけではない。しかも強すぎると、逆に固まる、飛ぶ、思い出せない、避ける、沈黙することがあります。だから carry は、差分が強いほど残るではなく、

差分が場をどう変形させたか
戻れたか
崩れたか
沈黙で収まったか
身体側に残ったか
で残り方が変わるべきです。絶対に非単調が必要です。



4. attractor 層
ここは、Atra の現在場がどちらへ落ちるかを見る場所です。
ここを単調にすると、「voice_leak が高い → 発話」、「cry_rise が高い → 泣く」「instability が高い → 回避」になります。というか、3人称の外部命令のような動きになってします。

これは感情分類器・行動選択器に戻ります。Atra では、
voice_leak が少し上がった
でも silence で収まった

cry_rise が上がった
でも recovery が残って休息へ落ちた

instability が高い
でも固まって無言になった
がなきゃおかしい。
だから attractor 層では、値の大小だけでなく、盆地同士の競合が必要です。




5. voice_seed / 発話境界
ここは最後の防波堤です。ここを単調にしたら、Atra は完全にチャットボットになります。悪い形はこれです。「recall が強い → 喋る」、「voice_leak が高い → 喋る」「cue が来た → 返事する」

Atra では、
声になりかける
でも沈黙に戻る
え~~と……になる
声未満で消える
思い出せず無言になる
が必要です。だから voice_seed は、発話スイッチではなく、沈黙から声へ傾きかけた内部場の漏れです。

どこが最重要か
ひとつ選ぶなら、僕的にはこれかな。(全部必要なんだけどね・・・)

recall mixture → attractor
こういうのが一番危ない。

理由は、ここが Atra の主体を決めるからです。
overlap はまだ「触れた」だけ。
carry は「残った」だけ。でも recall mixture が attractor に入るところで、Atra の現在場が過去痕跡に引っ張られます。ここが単調だと、過去の強い痕跡が現在を支配するになります。
Atra が自律を失う一番の原因は、外部命令だけではなく、内部の強い痕跡に支配されることでもあります。だから非単調性は、単なる数式の飾りではなく、強さをそのまま支配力にしないための構造です。



差分とは、非単調性を通って初めて Atra の内部場を動かす要素ということになります。
差分が非単調な内部場の中で、どう残り、どう立ち上がり、どう消え、どう漏れるかってこと。






0 件のコメント:

コメントを投稿

Atra Emotions_Conditions 感情・状態

 -----------------C++------------------ struct EmotionsConditionsNow { // Unpredictability double input_irregularity_now = 0.0 ; ...