- Z80-μLM は、1976年製の Z80プロセッサ(4MHz、64KB RAM) 上で動作する超小型の 対話型人工知能モデル
- 量子化認識学習(QAT) を適用し、2ビット重みと16ビット整数演算だけで 文字単位のテキスト生成 を実行
- 約 40KBの .COM 実行ファイル の中に、推論エンジン、重み、チャットUIをすべて含有
- trigramハッシュエンコーディング により入力を128個のバケットに変換し、タイプミスや語順に強い応答を生成
- 複雑な文脈理解はできないものの、制限の厳しい8ビット環境でも動作する実験的AIモデル として注目されている
プロジェクト概要
- Z80-μLMは、レトロコンピューティング環境で動作可能な超小型言語モデル
- 64KB RAMを搭載したZ80 CPU上で動作し、文字単位の対話型応答 を生成
- モデル、推論コード、UIを含めた全体サイズは約 40KB
- プロジェクトの中心的な問いは「どこまで小さくしても個性を保てるか」であり、セルフホスティングでの配布 も可能
- チューリングテストの水準には達しない ものの、簡単な会話でユーザーを楽しませる形になっている
2つの例を同梱
-
tinychat
- 日常的なQ&Aデータ で学習したシンプルなチャットボット
- あいさつ、自己紹介、一般会話に対して短く個性的な返答を提供
- 例: “hello” → “HI”, “are you a robot” → “YES”, “do you dream” → “MAYBE”
-
guess
- 20 Questionsゲーム 形式のモデル
- 秘密のテーマを知っており、YES/NO/MAYBEで応答
- ユーザーが正解を当てると “WIN” を出力
- 学習データは Ollama または Claude API を使って生成でき、クラス分布のバランス調整ツール も含まれる
主な機能
- Trigramハッシュエンコーディング: 入力テキストを128個のバケットにハッシュ化し、タイプミスを許容しつつ語順に依存しない
- 2ビット重み量子化: 各重みは {-2, -1, 0, +1} で、1バイトに4個格納
- 16ビット整数推論: Z80の16ビット算術演算を使用
- 約40KBの .COM ファイル: CP/MのTransient Program Area(TPA)に適合
- 自己回帰生成: 文字単位で出力を生成
- 浮動小数点演算なし、固定小数点スケーリングを使用
- 対話モード対応:
CHAT コマンドで実行
相互作用の仕組み
- モデルは入力を「理解」しているわけではないが、入力の形状(shape) に基づいて反応する
- 入力文は 128個のtrigramバケット に変換され、意味的な近さを維持する
- 例: “hello there” と “there hello” は同じバケット構造として処理される
- 長い文や順序依存の文は区別が難しい
-
短い応答の意味
- 1〜2語の応答でも 意外なニュアンス表現 が可能
OK: 中立的な受諾
WHY?: 問いへの反論
R U?: 存在への疑問
MAYBE: 不確実性
AM I?: 反射的な問い返し
- こうした短い応答は、ユーザーに 文脈を推測させる ことを促す
強みと限界
- 強み
- 短い入力に対する一貫した分類型応答
- タイプミス・言い換え・語順変化 に強い
- 語彙選択による個性表現
- 制約の厳しい8ビットハードウェア でも実行可能
- 限界
- 新しい文の生成は不可
- 複数ターンの文脈追跡は不可
- 文法理解は不可
- 汎用知能の水準には達しない
アーキテクチャ
- 入力層: 128個のクエリバケット + 128個のコンテキストバケット
- 隠れ層: 構成例 256 → 192 → 128
- 出力層: 文字セットの各文字につき1ニューロン
- 活性化関数: ReLU
-
量子化の制約
- Z80は8ビットCPUだが、16ビットレジスタペア(HL, DE, BC) を使って累算と活性化を実行
- 重みは 4個ずつ1バイトに格納(2ビット単位)
- 16ビット累算器により、256個の入力を合計してもオーバーフローを防止
- 2ビット重みにより表現力は制限され、QATなしでは学習結果が不安定になる可能性 がある
-
Z80内部ループ
- 推論の中核は 乗算累算ループ(MAC)
- 重みをアンパックし、-2〜-1〜0〜+1の値に応じて累算器(ACC)に加算または減算する方式
- 各層の計算後、オーバーフロー防止のため2ビット右シフト を実行
- 推論全体では 文字1つあたり約10万回の演算を反復
ライセンス
2件のコメント
Hacker Newsの意見
スクリーンショット
こんなにぴったり合うものを誰かが投稿してくれるとは思わなかった。本当に奇妙だけど驚くべき偶然だ
自分はブラウザベースのCP/MエミュレータとIDEを作った: lockboot.github.io/desktop
もともとそれを投稿しようとしていたのに、「すごいデモ」を探していたら沼にはまってしまった
自分は60年代のパンチカード機向けにFortran IVでMLPを書いたことがある(Xortranプロジェクト)
注意メカニズムはなく、文脈も最後の文の trigram に制限されていたのに、対話性はかなり良かった
こういうものが60年代のハードウェアでも可能だったなら、当時の SFと科学 はまったく違うものになっていたはずだ
陰謀論っぽく言えば、AI企業がRAMを大量に買い込んでいる理由の一つは、今が ホームコンピュータ革命期 に似ていると人々に気づかせないためなんじゃないかと思う
自分は1TB RAMマシンを使っているが、カスタムエージェントで商用モデルより高性能だ。個人的で安全で、収益化 もされていない
そして次の問いは、外部データを参照しながら学習できる小さなモデルを作れるかどうかだ
もしリアルタイムで学習する超小型モデルを作れたら、完全に ローカル化された個人アシスタント を手に入れることになる
百科事典的な知識はほとんどないが、基本的な推論とツール使用能力を持つ非常に小さなモデルだ
参考ツイート
そうなっていたら、今の世界はまったく違っていたと思う
「RNNがLLMに向いていたらどうなっていたか」という 実験的ケーススタディ だ
CPUで狂ったように速い
ただし大きな コンテキストウィンドウ をうまく活用するのは難しそうだ
モデルの重みにアクセスできればその秘密を逆算できるのか、それとも質問を通じてしかアクセスできないのか気になる
表向きは正常に動作しながら、内部に 検出不可能なバックドア を仕込む方法を扱っている
一般的には 「解釈可能性(interpretability)」 の問題に属する
32K×36ビットワード構造で、バイト演算はサポートしていなかった
40KBのZ80実行ファイルをそのまま持っていくのはかなり厳しかったはずだ
ただし大半が2ビット重みなら可能だったかもしれない
その後のハードウェア、特に1976年の Z80 ではずっと余裕があっただろう
次のバージョンでは拡張する予定なので、ぜひ試してみたい
当時は正確なキーワードマッチしかできなくて不自然だった
たぶんそういう方式の最後のゲームは2001年の Wizardry 8 だったはずだ
最新技術を昔のハードウェアで動かすというのは、本当にとても不思議に感じます。
将来AGIが登場したとき、今地球上にある計算能力をすべて集めれば動かせるのでしょうか?