固定重み×3D格子×予測誤差readout:Monolith(生成しないAI)の実験メモ
※これは個人の実験メモです(論文でも製品でもありません)。追試・関連研究の指摘・改善案、大歓迎です。
TL;DR(3行)
- 8×8×8(512ユニット)の3D格子に、26近傍の局所結合(固定重み)を張った「Monolith」を試作しました。
- 内部状態ではなく、予測誤差(loss)の“場” を特徴量にして線形分類します。
- Digitsで学習初期(〜100 epoch)に精度が急伸し、最終的に90%超を確認しました。
1. 背景:Backpropと“配線の現実”
深層学習(Backprop)は強力ですが、ハードウェア目線では「グローバルな誤差伝搬」「配線の複雑さ」「計算・電力コスト」が気になります。
一方、生体の脳は局所的な誤差(予測誤差)を手掛かりに動いているように見える——という直感があります。
そこで今回は、予測符号化(Predictive Coding)っぽい誤差の扱いと、リザーバー計算(Reservoir Computing)の固定重みを合体させて、
「局所配線だけで回る」「誤差の場で認識する」モデルを作ってみました。
2. Monolithの概要
2.1 アーキテクチャ
- 3D格子:8×8×8 = 512ユニット
- 近傍:各ユニットは26近傍
- 結合重み:固定(初期にランダム生成したものを保持)
- ユニット型:E(興奮) / I(抑制) / X(変化検出:XOR系) を混在
※配置は固定(初期配置はランダム)
2.2 ダイナミクス(ざっくり)
入力は z=0 層に投影し、内部状態を DIGIT_STEPS 回反復して落ち着かせます(内部に“波”や“反響”が出るイメージ)。
ポイントは、内部状態 p そのものを読まずに、予測誤差(loss)を読むことです。
3. 誤差readout(ここが一番言いたい)
Monolithでは「教師ラベルに対する誤差」を直接使うのではなく、局所的な“駆動(drive)”と予測のズレを 誤差(驚き)の流れとして定義します。
3.1 定義(直感版)
- 各ユニットは「近傍から流れてきた誤差(loss)の総和」を入力として受け取る
- その入力を内部予測
pで説明しようとして、説明しきれなかった分がlossになる - 最終的に分類器へ渡す特徴量は loss のベクトル
3.2 数式(最小)
近傍集合を N(i) として、
- 駆動信号(入力)
-
d_i = Σ_{j∈N(i)} loss_j(※必要なら z=0 の外部刺激も加算)
-
- 局所誤差
loss_i = d_i - p_i
分類は、反復後の loss(例:最終ステップの loss ベクトル、あるいはステップ平均)を特徴量として、線形分類します。
4. 結果(Digits)
Digitsで試したところ、
- 学習初期(〜100 epoch)で精度が急に立ち上がる(“一撃学習っぽい”挙動)
- 最終的に 90%を超える精度
という挙動を確認しました。
直感的には、固定リザーバーが入力を高次元へ射影し、さらに「誤差の干渉縞」みたいな模様が出ることで、線形分離しやすい特徴空間が得られているのかもしれません。
また、DIGIT_STEPS を層数以上にすると深層部まで信号が届き、反響(Feedback)によって数字固有の“定常波”っぽいものが出る気配がありました(Z方向の活性分布を観察)。
5. ハードウェア実装目線での嬉しさ
Monolithは(少なくとも思想として)以下がハード実装と相性が良いです。
- 局所配線:近傍通信だけで回る(配線の現実に寄せやすい)
- 固定重み:リザーバー層の学習が不要(メモリ書き換え問題を避けやすい)
- スケール:格子をタイル状に増やすだけで拡張できる
もちろん「今すぐスマホサイズの外部脳が作れる」という話ではないですが、
“データセンターで巨大に学習させる生成AI”とは別方向の、物理的に置ける知能として面白いと思っています。
6. 気になっている点(助けてほしい)
このモデルは発振・飽和に落ちる可能性があり、特に X(XOR系の変化検出ユニット)がチカチカして発振に寄る感触があります。
今後やりたい/議論したいのは以下です。
- 誤差readoutが効く理由:内部状態 readout と何が本質的に違うのか
- 寄与の切り分け:X(XOR)/ 3D格子 / 26近傍 / drive=近傍loss総和 のどれが効いているか
- トポロジー近似:斜め結合を多ホップ化(軸近傍中心)しても同様の挙動が出るか
- 発振対策:Xの出力をなまらせる(リーク/デッドバンド/ヒステリシス)などが効くか
- Digits以外の軽量タスク:音・IMU・異常検知など、生成ではない認識・検知ベンチのおすすめがほしい
7. コード(リンク)
追試用コードはnoteに置きます。
実行例:
python monolith_nn15.py
8. おわりに
Monolithは「学習で結線を変える」よりも、固定された複雑な編み目の中に“誤差(驚き)の波”を流し込むことで認識を立ち上げる、という発想の実験です。
追試報告・関連研究リンク・「それ既知だよ」も含めて、何でも歓迎です。コメント欄などで教えてください。
(元記事note: https://note.com/bluecrow/n/n1806a08c9a29 )