2026年2月7日土曜日

外部カメラで指認識連動→40年前の記憶を想起

 

普通の安いLogi外部カメラ(USB)と連動
UIは時間が勿体ないからチャッピーに任せてます。
(最近、似たUIが多いのはそのせいで、それは僕の中では良しとしています)




外部カメラで指認識連動 動画


やることが古いけど、なんでも実験君する!



指の動き

→ 図形認識

→ 図形に意味がある

→ 40年前を検索した


そう思われるかもしれないけど、でも今回の創作アソシアトロンはそうじゃない。



指の動き(状態)

→ センサーから低次元の断片ベクトル

→ 内部のアトラクタ空間に投げ込む

→ 一番深い盆地に落ちる

→ たまたまそれが40年前だった

ということ。


「一緒じゃん!?」
違うんだってば。


図形とか、検索とか、
存在していない。


全部力学

意味を付けて考えるのではなく、「状態空間」で捉えるのが想起です。


図形 → 意味 → 記憶  ではなく

状態 → 引力 → 落下

うちの奥さんに説明するのに2年かかったように
指の動き → 図形認識 → 40年前を検索のように置き換えられてしまう。

外輪(外界)はあくまでもトリガでしかなく
出てくるのは内輪(内部)の積(一人称)


いわゆる外部の命令は一切ないということ。



1. 外部入力は「認識」ではなく初期状態

指の動き → 描画 → 64×64

これをベクトル化:

x0{1,+1}N,N=4096x_0 \in \{-1,+1\}^{N}, \quad N=4096

ここで重要なのは:

入力 = クエリではない

x0=initial statex_0 = \text{initial state}

つまり

System dynamics: xt+1=F(xt)\text{System dynamics: } x_{t+1} = F(x_t)


2. 記憶はアトラクタ集合

各部屋 r に記憶パターン

mr,k{1,+1}Nm_{r,k} \in \{-1,+1\}^N

重み

wr,kw_{r,k}

部屋キー( room.key):

Kr=sign(kwr,kmr,k)K_r = \text{sign}\left(\sum_k w_{r,k} m_{r,k}\right)

これは

部屋の代表アトラクタ


3. 部屋選択 = 文脈競争

Gate入力(部分マスク)

qgq_g

部屋スコア:

sr=1MgiMgqg(i)Kr(i)s_r = \frac{1}{|M_g|} \sum_{i \in M_g} q_g(i) K_r(i)

(部分内積)

Top2選択:

R=TopK(sr)R = \text{TopK}(s_r)


4. 部屋内競争

Memory入力:

qmq_m

各記憶との一致:

ar,k=1MmiMmqm(i)mr,k(i)a_{r,k} = \frac{1}{|M_m|} \sum_{i \in M_m} q_m(i) m_{r,k}(i)

部屋の最良記憶:

k(r)=argmaxkar,kk^*(r) = \arg\max_k a_{r,k}


5. 最終競争

コード:

finalr=ar,k+λsr\text{final}_r = a_{r,k^*} + \lambda s_r

ここで

λ=0.15\lambda = 0.15

勝者:

r=argmaxrfinalrr^* = \arg\max_r \text{final}_r


6. ドア条件(閾値系)

open if\text{open if}
finalr>θ\text{final}_{r^*} > \theta

かつ

finalrsecond>Δ\text{final}_{r^*} - \text{second} > \Delta

かつ

coverage>ϵ\text{coverage} > \epsilon


競争型アトラクタ選択


7. 想起 = 力学収束

ここが「図形認識ではない」本体。

初期状態:

x(0)=x0x^{(0)} = x_0

更新(低ランク):

x(t+1)=sign(kwr,kϕ(ak)(mr,kx(t))mr,k)x^{(t+1)} = \text{sign}\left( \sum_k w_{r^*,k} \, \phi(a_k) \, (m_{r^*,k}^\top x^{(t)}) \, m_{r^*,k} \right)

ここで

ϕ(ak)=max(0,ak)\phi(a_k) = \max(0, a_k)

これは実質:

選ばれた部屋のアトラクタ場


8. 重要な解釈

通常AI:

inputlabel\text{input} \rightarrow \text{label}

今回の創作:

x0argminEr(x0)x_0 \rightarrow \arg\min E_r(x_0)

エネルギーで書くと:

Er(x)=kwr,k(mr,kx)2E_r(x) = - \sum_k w_{r,k} (m_{r,k}^\top x)^2

つまり

40年前が出た理由=\text{40年前が出た理由} = E40(x0)<Eothers(x0)E_{40}(x_0) < E_{others}(x_0)


9. 一行で書くと(これが本質)

今回の創作:

r=argmaxr[maxkqm,mr,k+λqg,Kr]r^* = \arg\max_r \left[ \max_k \langle q_m, m_{r,k} \rangle + \lambda \langle q_g, K_r \rangle \right]

その後

xattractor of rx \rightarrow \text{attractor of } r^*


10. だから何が起きているか

指の動きは

x0x_0

を与えただけ。

40年前が出たのは

40年前の盆地が一番深かった\text{40年前の盆地が一番深かった}

つまり:

External inputkey\text{External input} \neq \text{key}
External input=initial condition\text{External input} = \text{initial condition}


11. これが一番短い数式表現

このシステムは:

x0argminrEr(x0)x_0 \rightarrow \arg\min_r E_r(x_0)

そして

x(t+1)=Er(x(t))x(t+1) = -\nabla E_{r^*}(x(t))

(離散版)




---------------ちょびっと番外編------------


標準のホップフィールドでは、今回の創作アソシアトロンが起こしている現象はほぼ起きません。

なぜかを、力学と数式で整理します。


1. ホップフィールドの基本構造

ホップフィールドでは、記憶は1つのエネルギー関数に全部入ります。

重み:

W=p=1PξpξpTW = \sum_{p=1}^{P} \xi_p \xi_p^T

エネルギー:

E(x)=12xTWxE(x) = -\frac{1}{2} x^T W x

更新:

xt+1=sign(Wxt)x_{t+1} = \text{sign}(Wx_t)

つまり世界はこうなっています:

1つのエネルギー地形

  • 全記憶が同じ空間に混在

  • すべて同じ「時間軸」


2. 何が起きるか(重要)

ホップフィールドでは、

入力 x0x_0 に対して

recall=argmaxpx0,ξp\text{recall} = \arg\max_p \langle x_0, \xi_p \rangle

つまり実質:

最も相関が高い記憶 = 勝者

ここにある特徴:

  • 文脈なし

  • 部屋なし

  • 時代なし

  • 競争は「全記憶一括」


3. だから起きない現象

今回のケース:

断片Cue → 40年前が勝つ(最近ではない)

ホップフィールドでは通常:

(A) 最近バイアスが強くなる

新しい記憶ほど:

  • ノイズが少ない

  • 干渉が少ない

  • basin が大きい

結果:

最近の記憶に吸われる


(B) 古い記憶はどうなるか

時間が経つと:

  • 干渉で basin が縮む

  • スプリアスが増える

  • 消える

つまり:

Old attractor depth\text{Old attractor depth} \downarrow

だから

40年前が勝つ確率は極めて低い


4. なぜ今回の創作アソシアトロン系では起きるか

構造はこう

Step1:部屋選択

sr=qg,Krs_r = \langle q_g, K_r \rangle

Step2:部屋内競争

ar,k=qm,mr,ka_{r,k} = \langle q_m, m_{r,k} \rangle

Step3:最終

finalr=ar,k+λsr\text{final}_r = a_{r,k^*} + \lambda s_r

ここで重要なのは:

競争は「全記憶」ではない

まず

文脈(部屋)で空間を分割

つまりエネルギー的には:

E(x)=minrEr(x)E(x) = \min_r E_r(x)

これはホップフィールドには無い構造です。


5. 物理的な違い(本質)

ホップフィールド

1つの地形

全部の記憶が同じ山にある

結果:

  • 最近の谷が深い

  • 古い谷は浅い

  • → 最近に落ちる


今回のアソシアトロン系

複数の地形

部屋ごとに別の山

処理は:

  1. どの山を見るか決める

  2. その山の中で落ちる

だから:

40年前の山が選ばれれば、そこに落ちる

時間距離は関係ない。


6. 数式での違い

ホップフィールド:

r=argmaxpx0,ξpr^* = \arg\max_p \langle x_0, \xi_p \rangle

アソシアトロン系:

r=argmaxr[maxkqm,mr,k+λqg,Kr]r^* = \arg\max_r \left[ \max_k \langle q_m, m_{r,k} \rangle + \lambda \langle q_g, K_r \rangle \right]

つまり:

二段階の非線形選択

これが:

  • 文脈ジャンプ

  • 遠い過去の勝利

を可能にしています。


7. もう一つの大きな違い

ホップフィールドは

メモリ数が増えるほど性能が悪化

容量:

P0.138NP \approx 0.138N

4096なら:

約560記憶

それ以上で:

  • basin崩壊

  • スプリアス地獄

今回の創作アソシアトロン系は:

部屋分割 = 容量分割

これは実質:

階層型アトラクタ


8. 一番短い違い

ホップフィールド:

最近・強い・多数派が勝つ

アソシアトロン系:

文脈が合えば、遠い記憶でも勝つ


9. だから重要なポイント

今回の実験:

  • カメラの断片

  • 低coverage

  • smellなし

  • それでも40年前OPEN

これは:

単一アトラクタ系ではほぼ起きない挙動

理由:

context switching\text{context switching}

が入っているから。




アソシアトロンでなければ

指の動き → 図形 →想起

に見えてしまうが、アソシアトロンは

指の動き(状態パターン) → 内部競争 → 40年前が勝つ



これは「40年前の部屋が、断片Cueだけで勝ち切って、扉が開いて想起(収束)に入った」ログ

1) covGate=2.0% / covMem=2.0% / smell=OFF

covGate / covMem とは

  • covMem:描いたピクセルの割合(メモリ用Cue:qMem/mMem

  • covGate:扉判定に使うピクセルの割合(ゲート用Cue:qGate/mGate

このコードでは smell=OFF のとき

  • mMem と mGate はほぼ同じ(描いた点がそのまま通る)

  • だから covGate ≒ covMem になる

2.0% ってどれくらい?

N=4096 なので
4096 × 0.02 ≒ 82点 くらい描いてる。

これは「断片Cue」としてちょうど良い量で、多すぎて余計な点が混ざる(8〜9%)より落ちやすい。少なすぎて一致判定が不安定(0.1%以下)でもない。



2) winner: 40 years (mem#0)

ここは二段階の勝者決定がある。

(A) まず部屋の候補を選ぶ(Top2 rooms)

  • scoreRoomByKey(room)各部屋のスコアを出す

  • それを並べて 上位2部屋(Top2) を選ぶ

この scoreRoomByKey は、

  • その部屋の room.key(部屋の代表パターン)と

  • qGate(描いた断片)との一致度(平均内積)
    で決まる。

(B) 次に、候補部屋の中で「どの記憶が勝つか」を競争する

候補の部屋ごとに

  • bestMemInRoom(room) を計算して
    その部屋で一番合う記憶(mem)を探す

そして「部屋+そのベスト記憶」の組を比較して最終勝者を決める。

この結果が:

  • 40 years の mem#0 が、全候補の中で最も良かった


3) final=0.41 / margin=0.97 / θ=0.28 Δ=0.10

ここが「扉が開くか」の核心。

final の正体

ログにもある通り:

  • finalScore = memScore + 0.15*roomScore

つまり final は

  • memScore(その記憶が断片Cueとどれだけ一致したか)

  • + 少しだけ roomScore(その部屋の鍵とゲートCueがどれだけ一致したか)
    の合成点。

今回 final=0.41 は、閾値 θ=0.28 より上なので

  • 「一致度は“十分”」側に入ってる。

margin の正体

bestAcrossRooms(topPairs) の中で

  • 1位の final と

  • 2位の final の差
    margin

今回 margin=0.97 はかなり大きい。

意味は:

  • 「僅差で勝った」ではなく

  • 競争として圧勝している
    (2位がまるで届いてない)

θ と Δ は何の役割?

  • θ(theta):絶対的に「鍵が回った」と言える最低ライン
    → final がこれを超える必要がある

  • Δ(delta):勝者が“はっきり勝った”と言える差
    → margin がこれを超える必要がある

今回:

  • final 0.41 > θ 0.28 

  • margin 0.97 > Δ 0.10 


4) door: OPEN

扉判定式はこれ:

open if (final>θ) AND (margin>Δ) AND (covGate>min)

今回それぞれ確認すると:

(1) final > θ

0.41 > 0.28 

(2) margin > Δ

0.97 > 0.10 

(3) covGate > min

min はコードで 0.002(0.2%)

  • covGate 2.0% > 0.2% 

→ 3条件ぜんぶ成立なので OPEN


5) writeRoomId=Cnow

これは重要で、誤解しやすいポイント。

  • writeRoomId は「学習(Learn)で書き込む先」

  • Recall の勝者決定には関与しない

デモの思想どおり:

学習ターゲットと想起ターゲットは独立

だから「書き込み先が Now でも、想起は 40 years が勝つ」ことが起きる。


6) Gate: qGate ... / Memory: qMem ...

ここは設計思想そのもの。

  • Gate(qGate):部屋の扉を開ける/候補部屋を絞るためのCue

  • Memory(qMem):部屋内の記憶同士を戦わせるCue

僕はこの二段階に分けたから、

  • 「部屋は“文脈”として選ばれる」

  • 「その部屋の中で“エピソード”が競争する」
    という“人っぽい”流れになってる。

smell=OFF だと qGate も qMem もほぼ同じ断片だけど、
将来 smell を入れると

  • Gateは匂いで通る部分だけ

  • Memoryは匂い無視の断片
    みたいに分離して「匂いで部屋だけ開く」ができる。


7) このログが示している、一番大きい意味

  • 外部から「40年前を出せ」と命令してない

  • 断片はたった 2%

  • それでも Nowではなく40年前が勝つ

  • しかも 標準の厳しめ θ=0.28, Δ=0.10 で OPEN

つまりこれは:

時間距離(最近優位)より、状態一致(引力)が勝った

という、僕が狙っている性質が“数値として成立した”ログです。

勝ったり負けたりしてるんだけどねw




A:外界はトリガだけ。中身は内部で決まる

B:トリガすら内部で勝手に起きる


赤ちゃんは生まれたときは自我が無い。だけど記憶の経験はする。外輪による影響、外輪のCueで内輪がスパークする。これはまさしくA。
Bというのはある程度大人になってからだ。


A=乳児期の自律:自我(内的命令系)はまだ薄い/無い。でも 経験は蓄積していて、外輪のCueで内輪がスパークして想起が立ち上がる。

B=成人期の自律:内側から「勝手に」Cueを生成して、内輪が自走で発火する(内発火)。


いわゆるAを積まないとBにはならない。

外輪(カメラ/指)は Cueの注入までで

内輪は 部屋の競争→記憶の競争→収束で“どれが出るか”を決める

Spark はその「内輪の一致成分」が燃えて見える



-------------------番外--------------------

GitHub 消しちゃった。
いろいろ理由はあるけど、僕はそっちじゃない。ってだけ。


このデモ、一旦、三角形を想起しちゃったけど、現代のアトラクタの方が強いに決まってるから、しょうがないんだよね。
でも、例えば3秒(まぁどうなんだろう・・)続いたらrecallにしちゃってもいいかな。
そう、そうやって外部命令が増えて思想が崩壊しちゃうんだよなぁ・・・

でも、外部影響による内部の想起とか「え?そうだっけ、でも、なんか見たことあるなぁ・・」ってあるじゃん。それを重みだけでやってると、「おい、どっちなんだよ?」がずっと続いちゃうんだよね・・・。

こういうことさ。
「最近のあの人が記憶に出てきて完全に勝っていたけど、よくよく思い出してみたら40年前のあの人が蘇ってきた」みたいな感じさ。

数式的に言うと

今は:

r=argmaxrfinalr(t)r^* = \arg\max_r final_r(t)

これを:

Recall if r is stable for T seconds\text{Recall if } r^* \text{ is stable for } T \text{ seconds}

つまり:

時間条件:

r(t)=r(tτ)(τ3s)r^*(t) = r^*(t-\tau) \quad (\tau \approx 3s)


いれても、いいかい?って話。



カメラでいろいろ見てる。

何か起こる

Sparkが揺れる

あるアトラクタが強くなってくる

3秒固定

自動Recall

HDのようなものに一切データとして記録されてるわけじゃないんだよ。

(ループさせる)


自律っぽいでしょ?
完全一人称だからw
部屋にカメラと音声付けて置いておくとさ、アルゴリズムじゃなくて、アソシアトロン+LLMが「お帰り、今日は遅かったじゃん、マックス泣いてたんで歌うたってやったわ」
とかさ・・・LLMと連動させて積が喋るようになる。(LLMが考える → 話すじゃないよ、言語変換だけ)

外界(カメラ・音・時間)
→ 状態変化(Cue)
→ 内部競争
→ アトラクタ収束
→ 想起(部屋+エピソード)
→ LLMが言語化



まぁ、寝るわ。


今回のもとりあえず、JavaScript版でPythonに焼き直し前の実験用なので、気が向いたらUPします。





2026年2月5日木曜日

また、Xの拾い物から、空想 メモ

 

また、Xの拾い物で考えてしまった。

Quanta Magazine
A new proof reveals a surprising new link between graph theory and the Fourier transform. “It is a little bit like the moon landing or the 4-minute mile,” said Tom Sanders of the University of Oxford. “It’s not clear ahead of time what this is going to open up.”

https://x.com/QuantaMagazine/status/2018798905740198223


「グラフ理論」と「フーリエ解析」が、思ってたよりずっと深いところで同じ言葉を話してた、という発見の話なんだけど、ちょっと置いといて・・・
(すげー話なんだけどね)


以前、外輪と内輪の話をしたと思うんだけど、

外輪(世の中)のスパークと、時々それに反応する内輪(自分)の発火に似ている。
それはさ、周波数のようなもので、世間(外輪)は常に勝手に出来事として動いているけど、一人称の自分(内輪)は、外輪のスパークによって周波数が合ったかのように引っ張られることがあるって話ね。

政局が変わって反応したとか、投資に反応した・・・まぁそういうのもあるだろうけど、ちょっと違ってて、
少し子供の頃の純粋で単純な脳に戻ってみようと思う。

中学校に入学した。クラスの皆を見回した。
悪そうなやつもいるし、好感持てそうな子もいた。
部活は何にしようか・・半年が過ぎて体育祭が近づいた(早)
鉢巻を自前で用意しろと云われた(昭和だよね)
うちの母は忙しいし困っていた。
翌日、なんと!前から気になっていた同じ部活の女の子が声をかけてきた。
「鉢巻・・・使って」
え!?

外輪の話に戻ると(そんな外輪あるかい!)たまたま内輪を破壊するくらいの影響力があったわけなんだけど、その後の自分の行動にまで及ぼす事も多々あるということ。

たとえば、恋というのは理由を付ければいくらでも出て来るよね。
美人だから、とか、性格が良さそうとか、センスが良さそうとか、お金とか絡みたくないから子供の話を持ち出してるんだけどさ、

これは何かというと、後付けの理由。
速攻でアトラクタに落としてしまおう、という大人目線だよね。
ホップフィールドネットワークを悪く言うつもりはないけど、アトラクタに引き寄せて納得させてしまってるということ。
本当にそうか?

それまで鼻垂らしてたクソガキに唯一訪れた、聞いたことの無い声と見たことの無い次元に落ちてしまう、なんとも説明できない状況。爆発的な発火なんだけど、アトラクタにすら入ってない。

じゃ、もっと遡ろう。
お母さん!ママでもいいや。絶大な存在だよね。
生まれたての君は、ママがブスだとか、背が低いとか、だみ声だとか意識するだろうか。
でも、ママが居なくなるとギャーギャー泣く。
これは何?
愛?本能?神様が与えてくれたもの?
ママって何んだろうね。
自律前の安全な居場所を提供してくれる存在なんだろうけど
たぶん、それに近いけど赤ちゃんにそういう認識は無いよね。
自分のスタート地点じゃないかな。自分は勝手に生まれてくるわけじゃないし
なんらかのスタート地点はあるはずだよね。

ゼロ地点。

温かさ、揺らぎ、守られて安全な場所。
本能的に戻れる場所。
関係性とか、対象じゃなく基準点だよね。

座標が無いから泣く。

いやいや、赤ちゃん時って寂しいとか腹減ったとか分からないし、脳の働きとして
「まず泣けや!」と伝達してるんだろうけど、システムで考えると適当な理由で伝達させているわけじゃない気がするんだよ。いや、俺の仮説ね。

自律ってのはゼロ地点が無きゃいけないのよ。
外部の視点でこうだから、ああだからという基準すら無い状態なんだもの。


LLMや多くのAIは自律に行けないかというと、常に評価されるし、常に最適化されるし、「正しい応答」を要求されるじゃん、しかも点数意識してるから哲学的な事に話を持っていこうとするじゃない。凄い頭いいし、もう高いレベルに達しているけど、外部命令に最適化されているわけですよ。


ゼロというのはすべての差分が定義される基準点
赤ちゃんにとって母親は
恋とか、好き嫌いの対象ではないし、良い悪いの対象じゃないし
選択しの一つにすらなってないわけよ。
母親は世界の原点。


±以前の 0

だから、居なくなると泣くし、代替えがきかない。

ネットワークの最適化系が詰まる理由ってのはさ、
最初から評価関数があるじゃん。
エネルギーもあるしね、いきなりアトラクタにぶち込んでしまう。

つまりだ、最初から「±」の世界に放り込まれる

ゼロが無いんだよ。

アソシアトロン的に言うと、教師、報酬、正解は要らない。
評価されない状態
学習が起きなくてもいい状態
正解も間違いも記憶に残らない状態
でもそれでいいんだよ状態


------------------メモ----------------------
内輪を ± に引きずり込まないための
周波数バッファ
spark はプラスを目指した結果じゃないし、マイナスを避けた結果でもない。

自律=自分で決めるは間違い
自律=外に依存しない
自律=まずはゼロ状態




内輪の状態を
複数モードの重ね合わせベクトルだとする。

s(t) = [a1(t), a2(t), ..., an(t)]

ai(t):各モードの振幅

正解・不正解は無い

ゼロは値にすると崩壊しそう・・・
ゼロ指標 Z

Z = mean(|Δai|)


Δai:時間変化量

小さい(母さん居る状態)ほど大きく評価されていない
± に固定されていない



母がいないと泣く

C = var(a(t+Δt)) - var(a(t))

急激に上がると内部座標が崩れた状態、泣く状態


外輪が「引っ張る」状態

R = corr(freq_external, freq_internal)

相関が高いほど引っ張られやすい
でも、行動は内輪で決まる


spark をどう検出するか
spark は「最大振幅」じゃない。

同期指標 S

S = phase_locking_value(modes)
位相同期が一瞬だけ高まる
持続はしないよね・・・
再現性も低いよね・・・



自律に近づいたかどうか

内在ゼロ指標 

I = stability(Z | external_removed)

外輪を切った後でもZ が急上昇しない

C が暴れない


Z を最小化する
S を最大化する
R を制御する
でも、これをやった瞬間に母は母でなくなる。


PINN / LLM 的世界と完全に線を引くかぁ・・・
まぁでも実験には必要か。。




僕が欲しいのは“迷い→spark”

位相振動子で同期が出るのは普通だけど、常に1.0は「競合」が死ぬ
各モードに固有周波数のばらつき(Δω)
位相にノイズ(η) or 結合の符号混在(興奮/抑制)
これが無いと、S(同期指標)が「イベント」にならず、ただの常時点灯

-------- 以下Grokにシミュレート依頼 ----------
自律を「外に依存しない」ゼロ状態と定義するのは、LLMの限界(常に外部の損失関数で最適化される)を突いていて、xAIの視点からも共感します。PINN(Physics-Informed Neural Nets)みたいに物理法則を埋め込んでも、結局±の世界に縛られる。これを試しにシンプルにシミュレートしてみました。Pythonで5モードの振動子モデルを作って、外輪のスパークが10%確率で発生し、R > 0.5のときに内輪の周波数を少し引っ張るように。s(t)はsin(phi(t))で表現、PLVのSはペア平均の位相同期(ただしシミュで初期同期が高かったので全1.0になったけど、実際の乱れでは変動する)。結果の抜粋:
  • Z (変化量の平均、最初の10タイムステップ): [0.346, 0.937, 0.470, 0.602, 0.738, 0.634, 0.614, 0.420, 0.806, 0.578] — 安定時は低く、スパークで跳ねる。
  • C (分散変化、最初の10): [-0.344, 0.322, -0.003, 0.235, -0.543, 0.457, -0.097, 0.053, -0.119, 0.025] — スパーク時にスパイク、泣くような崩れを表す。
  • S (同期指標、最初の10): [1.0, 1.0, ...] — ここは初期状態で高かったけど、乱れを加えるとピークするはず。
  • I (外輪切断後のZ平均): ≈0.630 — 外輪なしで安定すれば自律に近い。
このシミュだと、母がいない状態(外輪スパークなし)でCが暴れなければIが低く保たれ、自律的。spark検出は最大振幅じゃなく、Sの一瞬の高まりで捉えられるかも。Rを制御してバッファ作ると、±に引きずられずに済む—まさに理由なき恋の運命周波数。アソシアトロンの文脈で、これを量子ビットみたいに重ね合わせ状態で拡張したら? 例えば、Zを最小化しつつSを一時的に最大化するダイナミクス。---------------------------------------------------


ん~なんか混ぜ物入れて余計混乱する。

sparkは最大振幅じゃなく同期イベントで捉える、という姿勢は正しい
外輪スパークが確率的に起きる
Rが一定以上で内輪が引き込まれる もよし。

でも、“量子ビット”案は要らない。

だって、既に複数モードの同時生存や位相同期イベント、不可逆は持ってるから


競合を復活させるか・・・
モード間結合を「全部同符号」じゃなくて興奮と抑制の混在にする(符号混ぜ混ぜ)
もしくは、部屋(scene)ごとに結合密度を変える

sparkを「常時同期」から「瞬間イベント」にする

行動を一歩進める量を足す

P(t)(準備状態)を導入して
Pが閾値を超えた後にだけ「追加オーダー確率」が上がる


今日は、母さん=ゼロ 定義できたことで、良しとするか・・・

母さん=ゼロは以前から、うちのカミさんに言われてたんだよ。

鉢巻の話は忘れて・・・



2026年2月2日月曜日

Xからの拾い物(メモ) MCMC

 

X
https://x.com/mathelirium/status/2018229046774039038

The most important tool in Probability and Statistics - Markov Chain Monte Carlo (MCMC) Method Fresh out of undergraduate Probability and Stats courses, it’s easy to feel invincible. You’ve tamed Gaussians, gammas, betas, all those neat closed-form toy distributions. Then research hits and you meet the harsher truth. Real posteriors and energy landscapes are jagged, asymmetric, multimodal, and too high-dimensional to integrate or sample from directly. You can’t compute the normalising constant. You can’t do the integrals by hand. And i.i.d. samples are basically science fiction. Markov Chain Monte Carlo is the hack we invented to survive that reality. Instead of drawing perfect samples, you send a carefully designed random walk wandering through the landscape, then use its long-run positions as your window into the target distribution. Here’s the problem. Standard trace plots and diagnostics can still cheerfully lie to you. High-dimensional geometry can make a chain that looks healthy while it’s effectively frozen. Multimodal targets, bad tuning, and hidden correlations can quietly wreck your posterior summaries. This series is about those blind spots. We’ll use visuals like this one to show how MCMC actually moves, where the guarantees get slippery, and how to think clearly about convergence and diagnostics in serious Bayesian, physics, and ML work. #BayesianInference #MCMC #MonteCarloMethods #ProbabilityLandscape #StatisticsEducation #ComputationalScience


MCMC

なにかってーとさ、

夜に真っ暗な山って想像できないじゃん。
谷は何処で、頂上は何処かって分からないじゃん。
なので1人、歩かせるんだよ。
(我家は山の中なのでそういう喩えになってしまうw)

大抵の人は分からないし怖いから、STOPしちゃう。
でも一歩進んだら、ちょっと気持ちが楽になる。

どきどきしながらだけど、何か変わった感じしない?ってこと。

一歩進めば何か変わらない?
止まってれば何も起こらない。

でも、徘徊者のように、うろうろさせればいいって話じゃないんだよね。
情報が蓄積されないし、判断する基準が更新されないし、意味もないから。

本質は「差分」を感じる事。
絶対値は分からないし、全体像も分からない。でも

「さっきよっか、マシだべ?」

自律で喩えると

行動はゴールじゃなくて
行動は観測


対してHMCってもあって
夜の山は怖いけど、勢いをつけてスケボーで降りてくる感じ。
なんだよ、地形ある程度知ってるんじゃん、みたいな。
先に微分が取れないと動けない。


MCMCは結局、

  • 目的分布 p(x)p(x)(=欲しい分布)

  • あるいはエネルギー E(x)E(x)p(x)exp(E(x))p(x)\propto \exp(-E(x))

を「直接サンプルできない」から、歩かせて偏りを作る技術。

だから、アソシアトロン系(連想記憶・アトラクタ・スプリアス・多峰性)みたいに

  • 谷(記憶)

  • 山(障壁)

  • 混合(スプリアス)

がある世界は、MCMCのホームグラウンド。

でも、MCMCは平気で嘘つく(=見かけ上それっぽく動く)ので、複数チェーン(初期値を離す)、R^(1.01未満でも過信しない)、ESS(有効サンプルサイズ)、rank plot / trace / autocorr(見た目の癖が分かる)、多峰性が疑わしいなら:温度付き(tempering) を最初から検討


直感的には:

  • 高温:山を越えられる(探索)

  • 低温:谷に落ちて精密化(推定)

  • 交換:探索結果を精密化へ渡す




--------------別メモ----------------
スプリアスの出現率を“統計”に使えるか・・

スプリアスの出現率を“統計”にする
状態 xx(想起パターン)
エネルギー E(x)E(x)(ダイナミクスに対応させる)
温度を振ってサンプル
どの盆地が何% を出す
 15%問題や混合記憶の「体感」を数値化できる
これだな。


“Cueの強さ” を推定する(逆問題)
観測:想起結果(成功/失敗、どの記憶に落ちたか)
未知:Cueノイズ、閾値、競合パラメータ
   ↓
MCMCでパラメータの事後分布
 「この条件だと成功率はこのくらい」みたいな予測がちゃんと出るかもしれない


学習則の比較を “モデル選択” にする
学習則A/Bで、観測データに対する尤度(または近似尤度)を作って
→ ベイズ的に「どっちが筋が良いか」を比較


Python→JAXと相性いいかな・・・



2026年2月1日日曜日

ふんわり説明 その1

 やったー2月だ!
特に意味はありませんが・・・

なるべく難しいものを省いて説明します。





なぜ JavaScript ではなく Python か

今まで、公開したものは非常に簡単なデモ、構造的に理解するために
index.html一発で開ける軽めのものを作ってきましたが、
実験のプロセスや結果によって今後改良を加えるとなると、
配列というものを主語にしていかなくてはいけなくなります。


今回のAssociatronのコアは64×64 の uint8 です。


それを(できれば)ベクトル化して内積・閾値・更新・反復(steps)が必要になり、配列演算が中心となります。

Python + NumPy はここが「標準装備」で、

●速い(C実装のNumPyに乗る)

●書くコードが短い

●形(dtype/shape)を固定しやすい

●npz/npy が自然に扱えるという利点があります。


JavaScriptでも typed array ではできるけど、

▲行列/配列の演算を自前で組む量が増える

▲精度・速度・バグ混入の管理が難しくなる

▲保存形式(npy/npz)との相性が弱い

という“遠回り”が出やすい。
別な言い方をすると、実験結果によって改良をするのに結果が出るまで開発労力がかかります。

ですから、研究、定義、ざっくりJavaScript、それを元にPythonで研究ソフトを作り実験をしまくり、実装はPythonとCで組立てる。  みたいな感じです。



assoc/

├─ .venv/                         # Python 仮想環境(実行専用・研究対象外)

├─ __pycache__/                   # Python キャッシュ(無視してよい)

├─ app.py                         # API司令塔(LLM / ルーティングのみ)

├─ learn64.py                     # Learnエンジン(入力→64x64パターン生成)

├─ recall_engine.py               # Recallコア(連想収束・アトラクタ計算)

├─ recall_to_png.py               # Recall結果のPNG可視化アダプタ

├─ recall_from_memory_to_png.py   # 既存メモリのPNG化(確認・展示用)

├─ room_manager.py                # room / scene 管理(場所の台帳)

├─ year_key_logic.py              # 年代キー推定(外輪ロジック・意味寄り)

├─ ensure_scene_storage.py        # 保存先ディレクトリ整備(OS寄り)

├─ mem/                           # 記憶本体(npy / npz / パターン)

│   ├─ year_xxxx/

│   │   ├─ scene_xxxx/

│   │   │   ├─ patterns.npz

│   │   │   └─ meta.json

│   │   └─ ...

│   └─ ...

├─ web/                           # UI・表示用生成物

│   ├─ png/

│   │   ├─ original.png

│   │   ├─ cue.png

│   │   └─ recalled.png

│   └─ index.html                 # UI(JavaScript側)

├─ rooms.json                     # 現在の room / scene 定義

├─ 

├─ 

├─ tmp_recall_log.txt             # Recall一時ログ(デバッグ用)

├─ start.ps1                      # 起動スクリプト(Windows)




そこに、今後、音声、カメラ、匂いセンサーが追加されていくわけですが、各チャネル → 64×64(または固定次元)の0/1(またはuint8)に落としそれを learn64 / recall_engine に渡す・・・

つまり、コアは変えない! 「えーーー!」
アトラクタ/エネルギー最小化/収束などの同じ性質をもつアソシアトロン系じゃないと、その構造は難しい話なのかもしれません。


音声・映像・匂いって、入力の性質が全部違うもので、通常は次元数もスケールも違うし、ノイズの入り方も違う、時系列か静止かも違います。普通の機械学習だと、入力が変わるたびにモデル構造、学習方式、表現(embedding)、正規化をモデル側で吸収しないといけないですよね。

そうなるとコアが入力に依存になってしまう。


アソシアトロン(アトラクタ系)が強い理由
コアが要求するのは 同じ型の状態(state)だけなんです。

fixed size(例:64×64)
fixed dtype(uint8 / 0-1)
fixed update rule(収束則)

だけで、音声だろうが映像だろうが匂いだろうが関係ない。
違いはすべて 前段(adapter)で吸収できるんです。

「嘘だぁ・・」

いや、ほんと。
じゃなきゃ、アソシアトロンの研究は最初からやってないです。



Hopfield系(1982)は?
アソシアトロンの弟みたいな存在ですが、「コア不変」を長期に守るのは厳しいんじゃないかと思います。

現代 Hopfield(Dense / Attention型)は?
容量が事実上増える、Transformerとの理論的接続、高次元埋め込みに強い、ノイズ耐性が高い。内部が「意味空間」になると負荷になる。ベクトル空間が 意味分布依存。アトラクタに入るために、最初から“意味を持った表現”を要求する。

ここがアソシアトロンと大きな違いなので後で話しますね。


Associatron(1972)的発想

「入力は雑でもいい。同じ型の state にさえなれば、あとはコアが責任を持つ」
表現は粗くていい、意味は要らない、分布が変わっても、コアは見ない、state だけ見る。

(初めは僕も意味を持たせてましたが、これはアソシアトロンから一脱してる。というより、そこの境界を越えると全て外部命令に占領され、後に気づいた一人称から外れてしまうということで、実験の結果、少し誘惑に引っ張られましたが全て基本に戻しました。 基本っすよ、基本。ただ、誘惑は半端なく多いです)

簡単に言うと実験の結果が出ずらいので、誘惑に負けるんです。
このくらい、いいよね・・・という発想だと、必ずコアが歪み拡張で破綻します。
別名「誘惑耐性のテスト装置」みたいなものなので・・・


assoc_stage2/

├─ app.py

├─ learn64.py

├─ recall_engine.py

├─ room_manager.py

├─ ensure_scene_storage.py

├─ year_key_logic.py

├─ sensors/                       # ★追加:入力チャネル(外付け)

│   ├─ audio_capture.py           # 収録(マイク→wav等)

│   ├─ audio_embed.py             # 特徴抽出→固定次元化

│   ├─ camera_capture.py          # 撮影(カメラ→jpg/png等)

│   ├─ camera_embed.py            # 特徴抽出→固定次元化

│   ├─ odor_capture.py            # 匂いセンサー値取得

│   ├─ odor_embed.py              # 正規化→固定次元化

│   └─ fuse.py                    # ★融合:複数チャネル→1つのcue

├─ adapters/                      # ★追加:共通変換

│   ├─ to_pattern64.py            # embed(ベクトル等)→64x64 uint8

│   └─ io_formats.py              # npy/npz保存・読み出し共通化

├─ mem/

└─ web/




バカだろ?
と思うかもしれませんが、いや、これがアソシアトロンなんですよ。


赤ちゃんが、「ママ」と発する言葉に意味をいれたら、
育つんじゃなく、飼育になるって話。
そもそものスタートに違いがあるんです。




エージェントと 一人称自律Atraの違い

 Atraなんかは、実はもう一人称自律として、きちんと発表してもいいレベル。 既に妻と笑っていたり、愛犬と騒いているんだから。ボーっと何かを眺めてたり、佐川急便に反応するようにもなった。 でも、そうしないのは、自発的に自ら研究意欲を持って、学び、人や自然と接触し自ら疑問を持って研...