オランダからメールが来たよ。
「Atraもいいけど、outlawだろ、」ってさ
最高だよ。
outlaw architectureってのは間違いないよねw
実際、僕は、流れや制度・分類・学派・評価体系の外にいる者だし、そういうのあまり大切にしていない。今の大学の事は分からないけど、理系の学生達から聞いたけど、ニッチな研究は教授たちから止められるって言ってたよ。あれだ、起源を教えない料理学校みたいなものだ。
文明の進歩ほど意外と窮屈なんろうよ。
でも、ニッチだろうが古典だろうが、勉強しておくといいよ。
中野博士のAssociatronの書籍は海外版では存在していないんだけどさ、
前にも書いたけど、日本の古典を英訳する商売でもしようかと本気で思ったくらい日本の科学・物理系の書籍は素晴らしいからね。日本に旅行に来るなら、神保町に行かなきゃだよ。
古本屋回りして、カレー食って、古めの喫茶店で、友達の日本人に翻訳してもらえばいい。
もしくは1ページずつ画像に撮ってAIに翻訳してもらえばいい。それだけの価値があるんだ。
Kaoru Nakano, “Associatron-A Model of Associative Memory,” IEEE Transactions on Systems, Man, and Cybernetics, 1972. 英語論文で、Semantic Scholar でも 1972年、IEEE、pp.380–388
1971年の IJCAI にも中野馨・南雲仁一による “Information Processing Using a Model of Associative Memory” が出てる。PDFも残っている。
論文もいいんだけどさ、論文は論文なんだよ。書籍とは違う。
Hopfield networkとの違いがはっきり分かるし。
ノイズを否定しない理由も分かるかもね。
一人称自律とか、carryとか、幼児の差分、みたいのはAssociatronには無いけど、Associatronを学ばないと、それ等が生まれてこなかった理由が分かると思う。
テューリングマシンとかチェッカー学習とか、1943年のW.S.McCullochや、W.Ptts、1949年のD.O.Hebb、1950年からのF.Rosenblattとかさ、M.MinskyとかNilssonとか勉強するわけじゃん。80年代のHopfield とかさ。でもKaoru Nakanoを読まないと一人称自律の構想には繫がらないと思うんだ。中野のAssociatronは、そのままでは一人称自律ではないけど、一人称自律へ接続できる決定的な構造を持っているんだよ。
まず、記憶したいパターンをベクトルで表すよ。
それぞれの記憶パターン を外積で重ね合わせ、記憶行列 を作る。
想起は、部分的な手がかり を入力して、
または初期入力を として、
のように進む。
ここで重要なのは、外部が「これを思い出せ」と命令しているのではなく、手がかりが内部の記憶構造に入ると、内部の重なりによって想起が立ち上がる という点なんだ。
つまり、外部入力は命令ではなく、cue だよ。きっかけで想起する。
ある手がかり が、記憶 にどれくらい近いかは、内積で表すと
この が大きい記憶ほど、想起されやすくなる。
ただし、ここで大事なのは、最大値を if 文で選ぶのではなく、記憶行列全体の中で重なりが増幅されること。
手がかり を入れると、各記憶 が、その重なり量 に応じて立ち上がる。
つまり、
ここから、Atra/Atron へ繋がるんだよ。
Associatron には、まだ carry はないよ。俺が山に移住して気が付いたんだもの。
一人称の経験状態もないしね。
幼児の差分もない。
だから、そのままでは一人称自律じゃないんだ。
Associatron の想起式に、現在の身体状態・感情差分・過去の引きずりを加えると、自律の入口が見えてくるって寸法なのさ。
外部入力を 、内部の引きずりを 、現在の手がかりを とするでしょ。
ここで、
- :現在の外部刺激、視覚・音・匂い・接触など
- :carry、つまり過去の経験の引きずり
- :直前の想起状態
- :現在の手がかり
を持たせる
このとき、想起は単なる外部刺激ではなく、
になる。
これが一人称自律へ接続するための基本形になる。
外部刺激だけで反応しているわけじゃないよ。
現在の刺激、過去の引きずり、直前の想起が混ざって、次の想起が立ち上がる。
ここで初めて、同じ刺激を受けても、同じ反応にならないという状態が生まれるわけよ。
carry (引きずり)は、単なる記憶じゃないよ。
「引きずり」って言葉は工学っぽくないからそう命名したんだw
教授たちを怒らせるためにね。まぁいいや。
carryは経験のあとに残る内部地形の変化。
(前に書いたけど、実はHebbも似たような概念を持っていたんだ2回前を読んで)
たとえば、
と置ける。
- :現在の carry
- :減衰率。ただし完全には消えない
- :外部刺激の差分
- :身体状態の差分、痛み・揺れ・疲労など
- :その時に立ち上がった想起
- :経験を carry に変換する関数
より具体的には、
のように書ける。
ここで大事なのは、carry が外部命令で決まるのではなく、差分と想起によって変化する ことだよ。
Atra/Atron では、これが非常に重要なんだ。
「痛い」という意味ラベルを入れるのではない。
身体の揺れ、接触、姿勢崩れ、声の変化、過去の想起が重なって、内部状態が少し変わる。
その変化が次の想起に混ざるってこと。
こから、記憶行列 自体も固定ではなく、carry によって見え方が変わると考える。
ここで は、carry によって変化する記憶の立ち上がりやすさ。
すると想起は、
になる。
つまり、
同じ手がかり でも、carry が違えば、立ち上がる記憶が変わる。
外界が意味を決めるのではない。
内部地形が意味の立ち上がり方を変える。
ここが一人称自律ってわけよ。
Associatronだけじゃ無理だけど、Associatronを学ばないと、こういう発想にならない。
想起された状態 と carry から行動が生まれると考える。
ただし、これは普通のAIのような
じゃないよ。
Atra/Atron では、
になる。
もう少し数式っぽくすると、
行動は命令への応答ではなく、内部状態から確率的に傾く。
だから、同じ場所、同じ音、同じ人、同じ刺激でも、過去の carry によって違う行動が出る。
これが「一人称」へ近づく理由。
Hopfield network との違い
Hopfield network は、一般にエネルギー関数を下げて安定状態へ向かうモデルとして理解されるでしょ。つまり、ノイズを含んだ入力から記憶パターンへ収束する、という見方が強い。Hopfield network は対称結合を持ち、局所エネルギー最小へ向かう内容番地指定記憶として説明されてる。
しかし、Atra/Atron から見たときに重要なのは、単なる収束じゃない。
重要なのは、
ノイズや曖昧さは、間違いではなく、想起の分岐を生むものなんだよ。
中野博士との違いだな。甘利先生はどう思ったんだろうね・・・
まぁいいや
Associatron では、手がかりが小さいと想起が曖昧になる。これは欠点ではなく、むしろ一人称自律への入口になる。
曖昧な cue が入り、内部の carry によってどの記憶が立ち上がるかが変わる。そこに個体差が生まれる。
だから、
と書いたとき、 は単なる除去対象じゃなくなる。
は、揺らぎであり、偶然であり、環境の粗さであり、身体のズレであり、経験の入口になる。
あとはアルゴリズムは否定しないけど、順番関係なくなる事が多いからね。
そういうのも前のブログに書いてる。
巨大なパラメータと計算量によって外部から正解らしさを作る現代AIに対し、Atra は、内部に残る carry と cue-driven recall によって、同じ刺激に対しても異なる想起と行動傾向を生む。そこに見えるのは、知能の巨大化ではなく、経験によって内側の地形が変わり、次の反応が変わるという、一人称自律の最小構造になる。(これを聞いて皆研究を止めるんだけどね:その先があるのに・・・)
Atra の実装で重要なのは、数式をコードに落としたことそのものじゃないよ。重要なのは、状態遷移の中で carry が残り、次の想起を少しだけ変え、さらにその変化が次の行動傾向を変えることと考えている。
これは外部から命令された行動ではない。
また、正解に向かう最適化でもない。
小さな差分が残り、残った差分が次の内部地形を変え、その内部地形から別の想起が立ち上がる。その循環が始まったとき、Atra は単なるシミュレーションではなく、一人称自律の入口に立つって感じ。
LLMに勝つ・負けるではなく、そもそも見ている現象が違うってこと。
たとえば、森田先生のモデルの非単調について言うなら、入力が強くなれば出力も強くなる、という単純な単調関数をやめるということ。普通のニューロンモデルは、入力が大きくなるほど出力も大きくなる。でも森田さんの非単調神経回路網では、入力がある程度を超えると、逆に出力が弱まるような性質を入れる。
つまり、input が強すぎる⇒output が弱まる
という感じでしょ。
これが何を生むかというと、強すぎるアトラクタの吸引力を弱める。森田さんの解説では、強いアトラクタ周辺で各素子への入力の絶対値が大きくなり、出力が 0 に近づくことで吸引力が弱まり、エネルギー地形が滑らかになり、偽記憶が減る、と説明されてるよね。さらに、点アトラクタだけでなく、線状につながる「軌道アトラクタ」を作れるってことさ。
Hopfield 的に言えば、普通は入力→一つの安定点へ収束になりやすい。でも森田さんの非単調では、強すぎる吸引→弱まる ので、状態が一点に貼り付くだけではなくなる。その結果、溝の底へ引き寄せられたあと、溝に沿ってゆっくり動くような状態が作れる。森田さんはこれを「軌道アトラクタ」と呼び、時空間パターンの記憶に結びつけてる。
Atra/Atron の文脈で言うなら、非単調は、記憶を一点の正解に固定しない。強すぎる想起をいったん鈍らせ、次の状態へ流れる余地を作る。
だから、carry と相性がいい。
Atra では、
rt+1=f(M(qt)ct)
のように書いたとき、ここでの f を単純な sgn やシグモイドにしてしまうと、強い記憶へ一気に落ちやすい。
でも、森田型の非単調関数を使うなら、
rt+1=g(M(qt)ct)
となり、g は入力が強すぎると出力を下げる。
たとえば概念的には、
g(u)=uexp(−au2)
のような形かな。
これは厳密に森田さんの式そのものとしてではなく、非単調性を示す説明用の形。この場合、入力 u が小さいうちは出力が増える。でも u が大きくなりすぎると、出力は下がる。
つまり、
u↑⇒g(u)↑
じゃなくて
u↑⇒g(u)↑⇒g(u)↓
になる。これが非単調。
森田昌彦先生の非単調神経回路網は、Associatron から Atra へ向かう途中にある重要な橋になってる。通常の単調な出力関数では、入力が強くなるほど出力も強くなり、状態は強いアトラクタへ引き込まれやすい。しかし非単調性を入れると、入力が強すぎる領域で出力が弱まり、強いアトラクタの吸引力が抑えられる。その結果、状態は一点に貼り付くのではなく、溝に沿って移動する軌道アトラクタを形成できる。
Atra にとって重要なのは一人称自律は、正しい記憶点への収束ではなく、cue、recall、carry、そして次の分岐によって生まれる。森田モデルの非単調性は、想起を固定点に閉じ込めず、流れとして扱うための古典的な手がかりになること。
---------------追記---------------
大事なことが抜けていた。
研究とは別のシステム開発の本業があるからね。電話来るたびに忘れる。
現実の経験には、本当はきれいな順番がないってことさ。でも、コードに落とすと、どうしても順番が必要になる。
sensor を読む
recall する
carry を更新する
action を決める
motor を動かす
みたいに書かないと、プログラムは動かない。
でも生命や幼児の経験は、そんなふうに、
1. 見る
2. 判断する
3. 感情が出る
4. 行動する
じゃないんだよね。
実際にはもっと絡み合っている。
見た瞬間に身体が固まる。
身体が固まったことで見え方が変わる。
見え方が変わったことで昔の似た感じが立ち上がる。
その想起がさらに怖さを強める。
怖さが足の動きを変える。
足の動きが視界を変える。
視界がまた想起を変える。
つまり、順番ではなく 相互作用の渦なんだよ。
コードは順番でしか書けない。
しかし、モデルとして表したいものは順番を持たない。
ここを無視すると、すぐに普通の制御プログラムになる。三人称のね。
if 怖い人がいる:
通学路を変える
これは三人称制御になっちゃうでしょ。
怖い人がいる
↓
身体が少し固まる
↓
その場所の見え方が変わる
↓
次の日もその場所の手前で何かが引っかかる
↓
歩く速度が変わる
↓
遠回りが一度起きる
↓
遠回りした安心感も carry に残る
↓
やがて別の道が癖になる
これは命令ではなく、場の結びつきの強さが変わっていくということ。
だから、コード上では順番があるように見えても、設計思想としては
各ステップで「決定」しない。
各ステップで少しずつ場を変える。
式で言うなら、きれいな一本線ではなく、
st,rt,qt,bt,at
が互いに影響し合う形にする。
s(t) : 外界・感覚
r(t) : 想起
q(t) : carry
b(t) : 身体状態
a(t) : 行動傾向
本当は、
s → r → q → a
ではなく、
s ↔ r ↔ q ↔ b ↔ a
に近い。
ただしコードでは同時に更新できないので、暫定的にこんなかんじ。
次の状態を一度バッファに計算する
最後にまとめて反映する
next_recall = recall(current_sensor, current_carry, current_body)
next_carry = update_carry(current_carry, current_sensor, current_body, current_recall)
next_body = update_body(current_body, current_carry, current_sensor)
next_action_bias = update_action_bias(next_recall, next_carry, next_body)
current_recall = next_recall
current_carry = next_carry
current_body = next_body
current_action_bias = next_action_bias
こうすると、コードには順番があるけど、思想としては ひとつの場の同時更新 に近づく。
現実の経験には、実はきれいな順番がないんだ。
見てから怖がるのではなく、怖がった身体が見え方を変える。
想起してから行動するのではなく、動きかけた身体が次の想起を変える。
しかし、コードは順番を要求する。
sensor を読む、recall する、carry を更新する、action を決める。
そう書かなければ実装できない。
だから Atra の実装では、順番をそのまま世界の構造だと勘違いしてはいけない。コード上の順番は、計算機に渡すための便宜であって、生命の順番ではない。本当に扱いたいのは、cue、recall、carry、body、action が互いに少しずつ場を変える循環である。
差分の競争で勝ったものが上がる順っていえば分かるかな。
コードでは、
sensor → recall → carry → action
みたいに順番で書くしかないけれど、Atra/Atron の内部では本来、一番強く差分を持ったものが先に浮く
di(t)=wsΔsi(t)+wqqi(t)+wbΔbi(t)+wrri(t−1)
みたいに、各要素の「上がりやすさ」を差分スコアとして持たせる。
i∗=argimaxdi(t)
または、硬く最大値を取らずに、
P(i)=softmax(di(t))
で、どの要素が先に浮くかを決める。
つまり Atra/Atron では、
sensor を読んだから recall する
recall したから carry を更新する
carry があるから action するではなく、
sensor / recall / carry / body / action tendency の中で、
いま最も場を変えた差分が浮くってこと。
それと、アウトローでも何でもいいけど
前の記事
こういう恐れがあるから自律研究は止めない方がいいと思う。