Monolith:知性を一般化する最小モデルを見つけたかもしれない話 ―― 予測値 p だけで成立する知性の実装
最近、Digits(8×8画像)を題材にした実験コードを書いていて、少し奇妙な感覚を覚えました。分類精度が 97% を超えたから、という話ではありません。
「知性とは、こんなにも単純なものだったのかもしれない」
そう感じざるを得ない挙動が、一貫して現れたからです。
この記事では、その実験モデル Monolith と、そこから見えてきた「知性の最小構造」について説明します。
最適化しない内部、読むだけの分類器
Monolith は、一見するとニューラルネットワークの出来損ないに見えます。
しかし、内部構造は一般的な NN とは決定的に異なります。
内部は 分類を目的としていません。
損失関数を最小化しようとも、精度を最大化しようともしていません。
内部がやっていることは、ただ一つです。
「(周囲の)世界を予測し、その予測が食い違えば、少しだけ修正する」
この処理を、空間全体で何度も繰り返します。
分類はその後です。 内部が落ち着いたあとに、その状態を 読むだけ の線形 readout を付けています。分類精度は、あくまで副産物です。
3D トーラス上に広がる予測値 p
Monolith の内部は、3 次元のセル空間で構成されています。
例えば size=10 の場合、10×10×10、合計 1000 個のユニットが存在します。
各ユニットが持つ状態は、驚くほど単純です。
スカラー値ひとつ。予測値 p。
この p は、「この場所で次に来るはずの入力」を表します。
ユニットは自分の p と、近傍ユニットから来る入力の合計値を見比べて、
ズレがあれば少しだけ修正します。
重要なのは、p 以外は本質的ではないことです。
- 誤差
lは、その瞬間の差分にすぎません - 重み
wは、予測が壊れないようにする制約です - 出力層は、内部とは切り離された観測器です
知性として保存されているのは、各ユニットの予測値 p だけです。
つまり、「pで予測すること」が知性の最小単位ではないかと考えたわけです。
これは、世界モデル仮説の極小版ととらえることもできます。ちゃんと世界モデル(スカラー値だけど)はあるし、入力との差分は取ってるし、完全に世界モデルそのものですね!! ヨシ!!
強いて言えば w も保存されていますが、周囲26近傍だけなのでDeep Learningのような全結合である必要は全くないです。あくまで局所的な、均衡を保つための重み変更です。
抑制が壊れないと、世界は安定する
ユニットには 3 種類があります。
興奮(E)、抑制(I)、比較(X)。
この中で最も重要なのは I(抑制) です。
I 型ユニットは、周囲の予測を打ち消し、 空間全体が発振しないように制約をかけます。
実験の途中で、I 型の重みに weight decay をかけない という修正を入れました。
すると、挙動が一変しました。
- 学習が安定する
- サイズを大きくしても壊れない
- 緩和に必要な時間(DIGIT_STEPS)が空間サイズと対応する
抑制が「保存される構造」になると、予測値 p は安心して変化できるようになります。
これは、生物的な比喩を使わなくても、力学系として自然な振る舞いです。
学習は「迷ったとき」にしか起きない
Monolith では、内部重み w は常に更新されるわけではありません。
分類結果に十分な余裕(margin)があるとき、 内部の学習率はほぼゼロになります。
つまり、
自信があるときは学習しない。迷ったときだけ、構造を少し変える
という挙動になります。
これは勾配降下ではありません。目的関数の最適化でもありません。
「世界モデルが不安定なときだけ、制約を微調整する」
それだけです。
DIGIT_STEPS は「計算量」ではなく「思考時間」
Monolith を size=8 から size=10 に拡張すると、
同じ DIGIT_STEPS では内部が十分に落ち着かなくなります。
DIGIT_STEPS を sizeの2倍 くらいに増やすと、再び安定します。
これは計算資源の問題ではありません。
空間が広がった分、予測が行き渡るのに時間がかかるだけです。
DIGIT_STEPS は、反復回数ではなく、
この知性が考えるために必要な思考時間を表しています。
なぜ 97% を超えるのか
Monolith の内部は、Digits を分類しようとはしていません。 それでも、最終的に 97% を超える精度に到達します。
理由は単純です。
- 内部は「世界の整合した予測状態」を作る
- readout は、その状態を Digits という問題に合わせて読む
世界モデルが安定していれば、それを読むだけで、十分な識別情報が含まれている。
高精度は「賢さの証明」ではありません。
整合した予測が成立した副作用です。
知性は、かくも単純だった
このモデルを眺めていて、最後に残った感想はこれです。
知性とは、
個々のユニットが持つスカラーな予測値を、
壊さずに整合させ続ける力学なのではないか
必要なのは、
- 高次元埋め込みでも
- 複雑なゲートでも
- 巨大な最適化でもない
予測を保持し、ズレを局所的に修正するだけ。
問題は、それがあまりにも単純すぎて、 説明するほうが難しいということです。
おわりに
Monolith は、AGI でも万能モデルでもありません。
しかし、
「知性とは何か」を実装として最小化した例
ではあると思っています。
そして、その知性は size=1024(1024^3=10億7374万1824ユニット) でも破綻無く成立するかもしれません。
もし知性が一般化できるものだとしたら、それは能力の集合ではなく、 予測が保存される構造として一般化されるのかもしれません。
添付ファイル monolith_nn28.py (リンク先の下部にあります)
読んだ感想をコメント欄で教えてくださるとありがたいです。
おまけ
ここから先はAIと数式を使った補足解説。科学者向け(私は科学者ではないが)。
Monolith を「力学系+局所学習+線形観測器」として書き下す
Monolith の内部は、通常のニューラルネット(誤差逆伝播で損失最小化)というより、格子上の再帰力学系として捉えると理解が速い。分類器は内部に付属する「観測器(readout)」であり、内部そのものは分類精度を直接最適化していない、という立て付けだ。
1. 状態空間:3D トーラス上のスカラー場
サイズ (S) の 3D 格子((S\times S\times S))を考え、各セル(ユニット)を座標
$$
i \equiv (x,y,z),\quad x,y,z\in{0,\dots,S-1}
$$
で表す。境界はトーラスなので、近傍参照は mod (S) でラップする(端から端へ接続される)
各ユニットが持つ「保存量(内部状態)」は スカラー1個:
$$
p_i\in\mathbb{R}
$$
これが記事で言う「予測値 (p)」に対応する。
近傍集合は 26近傍(自分以外の ({-1,0,1}^3))で、
$$
\mathcal{N}(i)
{, j=i+\delta \mid \delta\in{-1,0,1}^3\setminus{(0,0,0)} ,}
$$
(座標はトーラスなので ((x+\delta_x)\bmod S) のように取る)。
2. 入力:z=0 面への注入(境界条件)
入力ベクトル (a)(Digits の 8×8 をフラット化したもの)を、内部への注入信号に写像する:
$$
u_i = (W^{\text{in}} a)_i
$$
ただし注入は (z=0) 面((z_i=0) のセル)にだけ行い、それ以外は「内部予測」で駆動する。コードでは
$$
\text{target}_i =
\begin{cases}
u_i & (z_i = 0)
\text{pred_signal}_i & (z_i \neq 0)
\end{cases}
$$
という分岐になっている。
この「入力は一部の面にだけ与えられ、残りは内部結合で決まる」という形は、力学系として見ると 境界条件つきの緩和(relaxation) に近い。
3. 近傍からの予測:E/I/X の 3タイプ
各ユニットにはタイプ (t_i\in{E,I,X}) が割り当てられ、近傍重み
$$
w_{ij}
$$
$$
\quad (j\in\mathcal{N}(i))
$$
を持つ(局所結合のみ)。
近傍から作る予測信号(コードの pred_signal)はタイプで変わる。コードに忠実に書くと:
- 興奮(E):
$$
\text{pred_signal}_i
$$
$$
\sum_{j\in\mathcal{N}(i)} w_{ij},p_j
$$
- 抑制(I):
$$
\text{pred_signal}_i
$$
$$
-\sum_{j\in\mathcal{N}(i)} w_{ij},p_j
$$
- 比較(X):(コードは “標準偏差” を使っている)
$$
\text{pred_signal}_i
$$
$$
\operatorname{Std}!\left(
{, w_{ij}p_j \mid j\in\mathcal{N}(i) ,}
\right)
$$
ここで重要なのは、近傍から持ってくるのは誤差ではなく予測値 (p) だという点。誤差は各セルがローカルに計算し、そのセル内で消費する。
4. 誤差:瞬間的に現れるスカラー場 (l)
各ステップで、各ユニットは
$$
l_i = \text{target}_i - p_i
$$
を計算する。これが記事で言う「誤差 (l) は差分にすぎない」に対応する。
そして状態はシグモイドで更新される(コードは係数 0.5):
$$
p_i \leftarrow \sigma!\left(p_i + \beta,l_i\right),
$$
$$
\quad \beta = 0.5
$$
sigma によって p が飽和し、暴走を抑える(=力学系としての安定化機構)。
この更新を DIGIT_STEPS 回繰り返すことで、入力注入面 (z=0) の情報が、トーラス結合を介して空間に広がり、全体が「整合した予測状態」へ緩和していく、という絵になる。
5. 観測器:分類は (l) を“読むだけ”の線形 readout
内部が落ち着いた後、分類は
$$
\text{logits}_k
$$
$$
(W^{\text{out}}_k)^\top l + b_k
$$
で行う(コード通り (l) を特徴量として線形分類)。確率はソフトマックス:
$$
\pi_k
$$
$$
\frac{e^{\text{logits}_k}}
{\sum_c e^{\text{logits}_c}}
$$
この「内部は分類を最適化せず、外側の readout が読むだけ」という整理は、記事の主張そのものだ。
6. 学習:readout は普通に学習、内部は“迷ったときだけ”局所更新
6.1 readout の学習(クロスエントロピー)
ラベル (y) に対し損失
$$
\mathcal{L} = -\log \pi_y
$$
を置くと、ソフトマックス+クロスエントロピーの勾配は
$$
\frac{\partial \mathcal{L}}
{\partial W^{\text{out}}_k}
$$
$$
(\pi_k - \mathbb{1}[k=y]),l
$$
となるので、コードの更新
$$
W^{\text{out}}_k
\leftarrow
W^{\text{out}}_k
$$
$$
\eta_{\text{out}}
(\pi_k - \mathbb{1}[k=y]),l
$$
は標準的なオンライン学習そのもの。
6.2 内部の局所学習:誤差 (l_i) で近傍結合だけを微調整
一方で内部重み (w_{ij}) は、誤差逆伝播ではなく、各セルのローカル量で更新される。コードを “局所則” として読むなら、基本形は
- E型:
$$
\Delta w_{ij} \propto l_i,p_j
$$
- I型:
$$
\Delta w_{ij} \propto -,l_i,p_j
$$
- X型:(平均との差分を使う形)
$$
\Delta w_{ij}
\propto
l_i\bigl(p_j-\overline{p}_{\mathcal{N}(i)}\bigr)
$$
そして更新は
$$
w_{ij}
\leftarrow
w_{ij}
+
\eta_i,\Delta w_{ij}
$$
$$
\lambda_i w_{ij}
$$
ここで lambda_i は weight decay で、実験的修正として I型だけ (\lambda_i=0) にして「抑制構造を長期保持する」ようにしている。これは記事内の重要ポイントになっている。
6.3 “迷ったときだけ学習”:適応学習率
内部学習率 (\eta_i) は一定ではなく、分類確率の margin
$$
m = \pi_{(1)} - \pi_{(2)}
$$
(1位と2位の差)が小さいほど大きくする:
$$
\eta_{\text{int}}
$$
$$
\eta_0 \exp(-\gamma m)
$$
(コードは (\gamma=5))。「自信があるときは学習しない/迷ったときだけ構造を動かす」という文章説明を、数式として一本化するとこの形になる。
まとめ:Monolith を最短で言うなら
Monolith は、
$$
\textbf{
3Dトーラス上のスカラー予測場 }p\text{ を、局所誤差 }l\text{ によって緩和させる力学系
}
$$
であり、分類はその緩和過程で生じた (l) の空間パターンを線形に読む観測器である。内部学習は “迷ったときだけ” 起こり、特に抑制(I型)の構造保存(decay=0)が全体の安定性を支えている。
以上、おまけでした。