2026年3月23日月曜日

ノート2  AssociatronとHopfield networkの初合体 怪我をする疲れる眠るということ。

 PCが落ちた。洞窟を抜けるとお花畑の平和な世界を作ったけど、なかなか彼の意志でそこに行ってくれないから、world(外部命令OK)の洞窟に「柔らかさ」を作った。外から「はやく新しい世界に行ってくれよ!」と言い続けながらも僕は寝てしまった。


そんな事をしているうちにPCが落ちていた。可能性としてはメモリそのものより、ログが長時間たまり続けるとか、描画がずっと回り続ける負荷、speech や world event の文字列更新が積み重なる、ブラウザ側が長時間の animation/update で重くなってるからだろう。
そう、今の彼は疲れない。それがおかしい。
ライオンは獲物を追うことをセンサーで受け取り認知はしているがcarryに対して刻まれていない。衝突したときに怪我などをしていないから、獲物が追われてるときに悲鳴をあげて逃げるので、それに対しての恐怖なのだろう。なのでシーンを重ねるとcarryは動かなくなる。
場に慣れ、状態に慣れるということ。

なのでロボットに怪我をさせる。
 今までボロっと側(記念に残しておく)にアルゴリズムは極めて少なく作成していた。例えばworldに入った時の開始位置程度で、「こうなった時はこうする」みたいのは入れていなかった。が、将来現実の世界のロボットの身体に関して神経の伝達についてはアルゴリズムは必要だと考えている。というか、その辺でホップフィールドやバックプロパゲーション、NNが入ってくる。
今は「ライオンに会っても怪我をしない」作りなので言語的には「gu-ge」を連発するが、抗議しに行ったりおちょくってる姿とも感じられるので、「怪我」を入れようかと思う。あまり残酷なことは赤ちゃんなのでまだ早いかな。

それで何が変わるかというと、恐怖が増すか、carryに変動が起こるか見てみたい。
いわゆる「疲れ」という指標条件を入れるのではなく、疲れが起きる仕組み。
なんか、書いていてアルゴリズムになってきた。
そう、いつもこの誘惑と戦っている。




今はライオンが近くても「逃げて消耗する」より、「見続けて想起が立つ」側に寄りやすい。さらに carry はかなり厳しい条件でしか残らないようになっていて、attractorDepth >= 0.34、recall.activation >= 0.18、さらに差分や baseline ずれが必要だと考えている。これは「深く残るものだけ残す」という思想としてはきれいなんだけど、疲労のような日々の蓄積とは別物なので意外と難しい。いまは疲れが carry の中に居場所を持っていないから、緊張が長引いても“消耗”になりにくい構造になってる。

人間の情報整理のため。
こう考えるとAtronの負荷が減るのかも。


疲れは carry そのものではなく、carry に影響する別の身体層にする・・・とか・・
(危険なので、別ファイルの検証版で実験君するか)
つまり fatigue か sleepPressure を robot 側に新設して、sensor や recall の副産物としてじわじわ増えるようにする形です。carry は「深く残る場の変形」、fatigue は「身体が沈んでいく圧」と分けてみる。


消えるもの
その場の反応の尖り。
一時的な alert、瞬間的な speech pressure、今まさに見えている focus への過集中は、睡眠でかなり下げてよいかと・・・。これは「記憶を消す」のではなく、「起きて反応し続ける圧を下げる」を意味している。いまも recall や speech は毎tick固定ではなく、その時の圧から立っているから、ここを睡眠時に沈めるのは筋が通のかと思う。

圧縮するもの
trace の扱い部分。
いま traces は最大40件で、印象差が立ったときだけ残している。ここは睡眠時に全部消すのではなく、同系統の弱い断片を薄める、あるいは“直近の雑音的な学習”を少しだけ整理する、という方向。深いものだけ残し、浅い反応の散らばりは圧縮する感じ。

残すもの
baseline と深い carry 。
村や洞窟の繰り返しで育つ baseline.calm / soft / safe / warm / sparse は、睡眠で消しちゃ、まずい。これは生活圏の“基盤”だからね。carry も全消去ではなく、ゆっくり減衰で十分。いまの baseline は安定場が disturbance を上回ると少しずつ育つ設計なので、睡眠はむしろ baseline を壊さず守る側に置くべき。

成長するもの
「どこで眠れたか」の地の学習。
sleep そのものより、「眠りに落ちた場所」が何だったかが成長すべきかな。洞窟、村、静かな花畑の外れなどで眠れた回数が重なると、その場の safe / calm / sparse / quiet の結びつきが強くなる。すると次第に“眠くなるとそこへ寄る”傾向が生まれる。(勝手な予想)

これは外部命令ではなく、場の引き込みだからね。洞窟や村の基準場が少しずつ育つ今の baseline 設計とも相性がいいと思う。


(PCから現実社会のロボットへダウンロードしたとき、記憶データベースのログじゃないからbaseline と深い carry で何処まで戻るかは別実験中。人間も退院すると差異が出るっしょ?あれ。忘れてるなら忘れてていい:こういうスタンス)



睡眠が carry に与える影響
ここは全消去ではなく、分化させる。

  • adrenaline / noradrenaline / tension は睡眠で比較的大きく下げる
  • dopamine は少しだけ残す(調整が難しい、ドクターに聞こう)
  • serotonin は安全な場所で眠れた時だけ少し育つ


いま carry には dopamine / noradrenaline / adrenaline / serotonin / tension があり、深い attractor の説明用にも使ってるからこれを使う。睡眠を入れるなら、これらを一律に減らすのではなく、「緊張系は落ちる」「安堵系は眠りの質で少し残る」と分けた方が、眠りに意味が出る。なので、そこはアルゴリズムにしたら自律から詰むので、決して誘惑に負けず、頑固に頑固に状態に落とす仕掛けを考える。

何を見て眠るか
「夜だから寝る」だけだと外部条件になる。
眠りに寄る条件は、次の重なり。

  • 長く動いた
  • 緊張が続いた
  • 同じ対象に何度も反応した
  • いまの場が quiet / sparse / cave / village 寄り
  • 近くに大きな速い対象がいない

つまり、疲れの増加は危険でも安心でも起きるが、眠りに落ちるのは安全寄りの場だけとは限らないが経験の積で安全な場所に寄っていく。
world にはすでに昼夜があり、prey や lion にも sleep があるので、robot 側にも「夜は眠りへ寄りやすい」から・・・と補助を入れるのは不自然だ。
そうではなくrobot 自身の疲れであるべき。


3人称のworld側の調整
NPCの人間は夜もペチャクチャ喋らせないで眠らせる。
夜は眠る という状態を何度も見せる。
村や草陰は calm / safe の繰り返し学習の核になりやすく、夜の sleep とも相性がいい。
worldB(洞窟に触れると花畑と小動物の居る安全な世界に入る)もそっち側に寄せるとか。


危険時の対応が無いと疲れが立たない


いまは lion がいても、world は robot に何も命令せず、robot 側も危険から距離を取る身体動作をまだほぼ持っていない。だから「危険→退避→心拍維持→消耗」という流れが無く、「危険→注視→興味・緊張」になりやすい。

ただし、ここで「ライオンなら逃げる」と決め打ちすると自律ロボットは詰む。
しかも今はライオンという認識を持っていない。彼の認識では「物体gu-deとかgu-de-gu」
なので必要なのは、“逃げる命令”ではなく退避したくなる身体場を加える

たとえば、

fear + alert + tension が高い
近距離の size_large + speed_fast + teeth_claw_impression が重なる
しかも自分の baseline.safe から大きく外れる

この時にだけ、前進より「向き変化が大きくなる」「今いる場から離れる drift が強くなる」「cave / village の方へ戻る圧が少しだけ増す」
これなら 3人称制御ではなく、場の結びつきの強さ。いまの sensor には teeth_claw_impression、speed_fast、size_large などがすでにあり、impression にも tension と baselineGap があるので、土台がある。

でも、やっぱりアルゴリズムだ(笑)
なんか、嫌だなぁ・・・。



そこで「怪我を命令ではなく、Hopfield 的な場の歪みとして入れる数式」にする。
どういうこと?って思うでしょ。

アソシアトロンとホップフィールドは元は同じだけど、
ここをアソシアトロンにすると

「怪我」という記憶が勝つ/負ける
「痛い想起」が選ばれる
「傷ついた記憶」が1候補になる
身体の歪みではなく記憶内容に見えてしまうんだよ。


怪我を recall pattern の1つとして入れると、

xi(t+1)=f(jWijxj(t)+ui(t))x_i(t+1)=f\Bigl(\sum_j W_{ij}x_j(t)+u_i(t)\Bigr)

xix_i 側に「injury pattern」が混ざる。
だって、怪我は怪我じゃん。「ん~怪我じゃないかも・・」なんて言わないっしょ。
なので自律としてアルゴリズムから離れるときは場合によってはホップフィールドを使ってみる。厳密に身体の神経伝達までどうしても今、ここでやると言うのなら

のように、後ろから前へ効いてくる backpropを使うとか。
ただ「正解との差を微分して返している」のではなく、
結果として生じた歪みや痛みが、前段の結合を変えてしまう」
ことなので
性質としては、誤差逆伝播よりも損傷逆流とか過敏化の逆流とか調整圧の逆流に近い。

たとえば前向きの場が

r(t)=F(s(t),B(t))r(t)=F(s(t),B(t))
a(t)=G(r(t),I(t))a(t)=G(r(t),I(t))

だとして、行動の結果として身体に負荷 d(t)d(t) が出る。

d(t)=H(a(t),s(t),impact(t))d(t)=H(a(t),s(t),\text{impact}(t))

この d(t)d(t) が injury を更新する。

I(t+1)=ΛI(t)+Γd(t)I(t+1)=\Lambda I(t)+\Gamma d(t)

ここまでは普通。

でもさらに、これが前段へ返る。

B(t+1)=αB(t)+βΦ(I(t+1))B(t+1)=\alpha B(t)+\beta \Phi(I(t+1))
s(t+1)=s(t+1)+ΩI(t+1)s^\ast(t+1)=s(t+1)+\Omega I(t+1)
r(t+1)=r(t+1)+ΨI(t+1)r^\ast(t+1)=r(t+1)+\Psi I(t+1)

つまり、傷んだ結果が次の sensor の感じ方を変え、次の recall の立ち方を変え、次の action の偏りを変えるとなる。

なので機械学習の厳密なバックプロパゲーションというより、損傷や結果が後段から前段へ返って、感受性・結合・場の傾きを変える逆向き伝播かな。


なのでホップフィールドの方が使いやすい。
あれだよ、アソシアトロン好きな僕がホップフィールドを始めて組み込もうとする瞬間だ。



まず、怪我を 1 個のスカラーではなく、身体の歪みベクトルに変更。

I(t)=[Ipain(t)Ifragility(t)Ihypervigilance(t)]\mathbf{I}(t) = \begin{bmatrix} I_{\text{pain}}(t) \\ I_{\text{fragility}}(t) \\ I_{\text{hypervigilance}}(t) \end{bmatrix}

意味はたとえばこうだ。

  • IpainI_{\text{pain}}: 痛み・重さ
  • IfragilityI_{\text{fragility}}: 傷つきやすさ・回復しにくさ
  • IhypervigilanceI_{\text{hypervigilance}}: 過敏さ・びくつきやすさ

これはゲームの HP ではなく、その後の attractor 地形を歪める内部状態

RPGゲームに自律いれようね(そのうち)



話飛んだ、

怪我入力

いまの robot には

size_large
speed_fast
teeth_claw_impression
unpleasant
tension
baselineGap

などが already ある。

なので、まず危険入力を

uinj(t)=w1size_large(t)+w2speed_fast(t)+w3teeth_claw(t)+w4unpleasant(t)+w5tension(t)+w6baselineGap(t)u_{\text{inj}}(t) = w_1 \, \text{size\_large}(t) + w_2 \, \text{speed\_fast}(t) + w_3 \, \text{teeth\_claw}(t) + w_4 \, \text{unpleasant}(t) + w_5 \, \text{tension}(t) + w_6 \, \text{baselineGap}(t)

と置く。

ただしこれは「逃げろ」の命令ではなく、
身体にどれだけ傷が入りやすい exposure だったかの量

怪我の時間発展

いちばん単純で使いやすい形。

I(t+1)=ΛI(t)+bϕ ⁣(uinj(t)θinj)r(t)\mathbf{I}(t+1) = \Lambda \mathbf{I}(t) + \mathbf{b} \, \phi\!\left(u_{\text{inj}}(t) - \theta_{\text{inj}}\right) - \mathbf{r}(t)


  • Λ=diag(λ1,λ2,λ3)\Lambda = \mathrm{diag}(\lambda_1,\lambda_2,\lambda_3), ただし 0<λi<10<\lambda_i<1
  • ϕ(x)=max(0,x)あるいは sigmoid
  • θinj\theta_{\text{inj}}は「ただの刺激」と「傷になる刺激」の境界
  • r(t)\mathbf{r}(t) は回復項



足りないのは「危険の意味」ではなく、「危険や反応の継続が身体を消耗させる層」

carry は深い場の名残として残し、別に fatigue / sleepPressure を立てる。
睡眠では、反応圧は消す、浅い散らばりは圧縮する、baseline と深い carry は残す、安全に眠れた場所の結びつきは成長させる。
そして危険時は「逃げろ」ではなく、退避方向へ身体が崩れるようにする。
この形なら、命令にならず、Atron の筋を保ったまま疲れと眠りが入る。



AssociatronとHopfield networkの初めての合体になるのかな。


このブログの最初のアルゴリズムの正当化と後半のホッピーの話とでは
ぜんぜん違うね。

俺は、自分の間違いもノイズも誘惑も全部書くからね・・・。
動きがおかしかったらまた修正するよ。





いずれにしてもロボットが自分の意志で「省電力モード」や「一旦セーブして休憩」してくれたら、僕のPCは壊れくて済むって話。

内部に休息志向 Rrest(t)R_{\mathrm{rest}}(t) を作る。

Rrest(t)=aFfatigue(t)+bIpain(t)+cBstress(t)+dBfrustration(t)eBcuriosity(t)fSdanger(t)R_{\mathrm{rest}}(t) = a\,F_{\mathrm{fatigue}}(t) +b\,I_{\mathrm{pain}}(t) +c\,B_{\mathrm{stress}}(t) +d\,B_{\mathrm{frustration}}(t) -e\,B_{\mathrm{curiosity}}(t) -f\,S_{\mathrm{danger}}(t)





疲労、痛み、ストレス、フラストレーションで休息志向は上がる・・好奇心が強いと少し下がる・・近くに危険があると「今は休めない」で下がる・・・みたいな方向に向かうかどうかはテスト次第。
外部指示、順番、ラベル、評価、最適化は入れない。


危険だから即休むではなく、危険が近いとむしろ休息に入れないんじゃないかな。





---------------追記---------------

で最後に Sdanger(t) を入れると、3人称だねw
意味付けのラベル寄せだ。
無意識にこういう誘惑に進むから危険だ。


threatImpression
escapePressure
alarmBias
hypervigilanceCoupling

のように、
危険という客観意味ではなく、身体の傾きとして置くなら筋が通る。


Rest(t)=aFfatigue+bIpain+cBstress+dBfrustrationeBcuriosityfHalarmRest(t)=aF_{fatigue}+bI_{pain}+cB_{stress}+dB_{frustration}-eB_{curiosity}-fH_{alarm}

のようにして、
この H_alarm は

motion_approach
size_large
speed_fast
teeth_claw_impression
unpleasant
tension


もしくは

Rrest(t)=aFfatigue+bIpain+cBstress+dBfrustrationeBcuriosityR_{rest}(t)=aF_{fatigue}+bI_{pain}+cB_{stress}+dB_{frustration}-eB_{curiosity}
Ralert(t)=pmotionapproach+qspeedfast+rsizelarge+steethClaw+tunpleasant+utensionR_{alert}(t)=p\,motion_{approach}+q\,speed_{fast}+r\,size_{large}+s\,teethClaw+t\,unpleasant+u\,tension

そして最終的な休息傾向を

RestDrive(t)=Rrest(t)λRalert(t)RestDrive(t)=R_{rest}(t)-\lambda R_{alert}(t)

のように見る。

「大きい・速い・近づく・不快・緊張が強いので、休息場との結びつきが弱まる」

みたいな。でも、これだとアソシアトロンか・・・
自律の研究で無駄に時間がかかるのはこういうところだよね。



-------------------またまた追記----------------------------


RestDrive(t) が大きいほど
「休息状態へ入りやすくしたい」なら、

E(x)=EHopfield(x)μRestDrive(t)safety(B)E(x)=E_{\mathrm{Hopfield}}(x)-\mu \cdot RestDrive(t)\cdot safety(B)

の方がまず分かりやすいという意見が出た。

まずは実験してみるか・・・・



0 件のコメント:

コメントを投稿

アソシアトロンの想起 と Atron言語

Atron研究はね、一人称とか自律とか僕も言ってるけど、元は人間の想起なんだよ。 その想起ってのはノイズを否定しない。 アソシアトロンですよ。 何度も同じことを書いてるけど重要なんだよ。 僕は今62歳。 「80年代は楽しかったね」では何も思い出せないけど、 Hard to Say...