
2026/04/16 22:16
「Show HN」:1989 年のマッキントッシュ上に構築されたハイパーカード(HyperCard)内のトランスフォーマー型ニューラルネットワーク、MacMind です
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
MacMind は、古いマッキンтоッシュハードウェア(具体的には System 7.6.1 を搭載する SE/30)上で完全な HyperTalk で実装された画期的なニューラルネットワークであり、高速フーリエ変換 (FFT) に必要な複雑なビット反転置換を成功裏に学習しました。このプロジェクトは、現代的なコンパイル済みコードや外部ライブラリを使用せず、トークン埋め込み、位置エンコーディング、自己注意機構、交差エントロピー損失、完全なバックプロパゲーション、および確率的勾配降下を含む完全なトランスフォーマーアーキテクチャを活用して、先進的な数学的構造を発見できることを示しています。5 つの HyperCard カードにわたる 1,216 のパラメータを持つこのモデルは、FFT ルーティングパターンの回復において 100% の精度を達成し、Python/NumPy 実装による参照実装によって確認された独立した Cooley-Tukey アルゴリズムの再発見を確認しています。この作業は、深層学習には巨大な計算能力が必要だという前提に疑問を投げかけ、8 MHz プロセッサを使用しながら、レガシーハードウェア上で直接学習を行い(約 1,000 ステップで数時間に収束)います。透明スクリプトエディタを通じて検査および修正が可能であり、プリトレーニング済みおよび空白のスタックは古典的なハードウェアまたは現代のエミュレーター上で動作します。Frank Rosenblatt、Vasvani、Cooley および Tukey といった研究者らの基礎理論を踏まえたこのプロジェクトは、限られたレガシーシステムにおいても深遠な AI 能力にアクセスできることを証明しています。
本文
1987 年のハイパートーク(HyperTalk)スクリプト言語だけで記述され、マッキンтоッシュ SE/30 で学習された完全なトランスフォーマー型ニューラルネットワーク「MacMind」です。
MacMind は、ランダムな例題から位相反転置換(高速フーリエ変換の最初の工程である)を学習する、1,216 パラメータを持つ単一層・単一のヘッド構成のトランスフォーマーです。このネットワークの各行は、行列計算ではなく対話式のカードスタック構築を目的として設計された 1987 年のスクリプト言語「ハイパートーク」で記述されています。それゆえ、トークン埋め込み、位置エンコーディング、スケールドドットプロダクトスコアを用いた自己注意機構、クロスエントロピー損失関数、完全な逆伝播、確率的勾配降下といった複雑な機能を備えても、コンパイルされたコードは使用せず、外部ライブラリに依存せず、ブラックボックスにはなりません。
任意のボタンをクリックして、実際にどのような計算が行われているのかを確認できます。
本プロジェクトが生まれた理由
MacMind を学習させた「順伝播 → 損失計算 → 逆伝播 → 重みの更新」という根本的なプロセスは、現在存在するあらゆる大規模言語モデルを学習させるのと同じものです。唯一の違いは「スケール」であり、「種類」ではありません。MacMind は 1,216 パラメータを持ち、GPT-4 は約 1 兆パラメータありますが、使用される数学的プロセスは完全に同一です。
私たちは、AI がほぼすべての人に影響を与えるにもかかわらず、その中身を理解できる人はほとんどいないという時代にあります。MacMind は、このプロセスが理解可能なものであることを示すデモであり、「逆伝播や注意機構とは魔法ではなく、単なる数学である」「かつ、その数学は TPU クラスタ上でも 1987 年の 68000 プロセッサ上でも同じように機能する」という事実を提示します。
すべての要素は検査可能で、すべてを変更可能です。学習率を変更したり、学習タスクを切り替えるか、モデルのサイズを変更することも、ハイパーカードのスクリプトエディタ内から行うことができます。これは「ボンネットが上げられたエンジン」そのものです。
何が学習されるのか
位相反転置換は、配列内の各位置インデックスのバイナリ表現を反転することで順序を入れ替える操作です。8 つ要素を持つ配列の場合には以下のようになります:
| 位置 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| バイナリ | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
| 反転後 | 000 | 100 | 010 | 110 | 001 | 101 | 011 | 111 |
| 対応する位置 | 0 | 4 | 2 | 6 | 1 | 5 | 3 | 7 |
したがって、入力は
[3, 7, 1, 9, 5, 2, 8, 4] から、出力は [3, 5, 1, 8, 7, 2, 9, 4] に変換されます。
この置換は計算において最も重要なアルゴリズムの一つである高速フーリエ変換(FFT)の最初の工程です。モデルにはこのルールが明示的に教えられません。自己注意機構と勾配降下によって、単に位置のパターンを純粋に発見し、巨大な規模でスケールアップされたプロセスと同じように、より大きな言語モデルが言語を理解できるように訓練されました。
学習後、カード 4 の注意マップ(アテンションマップ)からは FFT の蝶番パターンが可視化されます。モデルは独立して、コウリーとタキーが 1965 年に発表した同じ数学的構造を発見しました。
スタック構成
MacMind は 5 つのカードからなるハイパーカードスタックです:
| カード | 目的 |
|---|---|
| 1 タイトル | プロジェクト名とクレジット |
| 2 学習(Training) | モデルを学習させ、そのプロセスを実況で観測する |
| 3 推論(Inference) | 学習済みのモデルを検証するための任意の 8 桁の入力に対してテストを行う |
| 4 アテンションマップ | 8x8 の注意重み行列を視覚化する |
| 5 について(About) | モデルが行っていることに関するテキスト説明 |
学習(カード 2)
"Train 10"をクリックして 10 ステップ分の学習を行うか、"Train to 100%"をクリックしてサンプルでのスコアが完璧になるまで学習を続行できます。より深い学習を行う場合は、繰り返し "Train 10"を実行するか、再度"Train to 100%"をクリックすれば、モデルは中断した箇所からつづいて学習します。長時間の学習を行いたい場合は、メッセージボックス(Cmd-M)を開き、
trainN 1000と入力することで、連続して 1,000 ステップ分の学習を行います。
各ステップでは、ランダムに生成された 8 桁のシーケンスに対して全順伝播を行い、クロスエントロピー損失を計算し、すべての層を通じて勾配を逆伝播させ、そして 1,216 つの重みをすべて更新します。進行状況バー、各位置の精度、および学習ログはリアルタイムで更新されます。
備考: 学習ログフィールドには 30,000 文字までしか入力できません(これはハイパーカードの制約です)。およそ 900 ステップ経過後にログが満杯となり、エラーが表示されてしまいます。これをクリアして学習を継続するには、メッセージボックス(Cmd-M)を開き、以下のコマンドを入力してください:
put "" into card field "trainingLog"
その後、
trainN 500 (または希望するステップ数)で学習を再開します。
推論(カード 3)
学習後、「New Random」をクリックしてテスト用の入力を生成し、次に「Permute」をクリックして学習済みのモデルを実行します。出力行にはモデルの予測結果が、信頼度行には各位置についてどれほど確実かを表します。
結果を検証するには、手動で位相反転置換を適用してみましょう。出力は入力の位置を次の順序で再編成するはずです:
- 出力 [0] = 入力 [0]
- 出力 [4] = 入力 [1]
- 出力 [1] = 入力 [4]
- 出力 [5] = 入力 [5]
- 出力 [2] = 入力 [2]
- 出力 [6] = 入力 [3]
- 出力 [3] = 入力 [6]
- 出力 [7] = 入力 [7]
例えば、入力が
[3, 7, 1, 9, 5, 2, 8, 4] の場合は、出力 [3, 5, 1, 8, 7, 2, 9, 4] が得られるはずです。モデルが十分に訓練されていれば、各位置の予測はすべて正しく、かつ信頼度は 90% を超えるでしょう。
アテンションマップ(カード 4)
この 8x8 のグリッドは、各出力位置を生成する際に、モデルがどの入力の位置に注目しているかを可視化します。学習後、以下の蝶番パターンが見られるはずです:位置 0, 2, 5, 7 はそれ自身に注目し(置換の不動点)、位置 1 と 4 は互いに、また位置 3 と 6 は互いに注み合う(交換ペア)ことになります。
これは、コウリーとタキーが 1965 年に高速フーリエ変換について発見した同じルーティング構造です: (古典的な FFT の蝶番図を参照のこと、パブリックドメイン)
モデルは注意機構を通じて、この構造を独立して発見しました。
アーキテクチャ
| コンポーネント | 次元 | パラメータ数 |
|---|---|---|
| トークン埋め込み (W_embed) | 10 x 16 | 160 |
| 位置埋め込み (W_pos) | 8 x 16 | 128 |
| クエリ射影 (W_Q) | 16 x 16 | 256 |
| キー射影 (W_K) | 16 x 16 | 256 |
| バリュー射影 (W_V) | 16 x 16 | 256 |
| 出力射影 (W_out) | 16 x 10 | 160 |
| 合計 | - | 1,216 |
データの流れ:
- 入力数字 [8]
- トークン埋め込みルックアップ+位置埋め込み → [8 x 16]
- Q, K, V の射影 → それぞれ [8 x 16]
- アテンションスコア = Q × K^T、1/sqrt(16) でスケーリング → [8 x 8]
- 各行ごとのソフトマックス関数適用
- アテンション重み → [8 x 8]
- コンテキスト = 重み × V → [8 x 16]
- リゾリューション接続:コンテキスト+埋め込みされた入力 → [8 x 16]
- 出力ロジット = リゾリューション × W_out → [8 x 10]
- 各位置ごとのソフトマックス関数適用
- 予測結果 → [8 x 10] の数字上の確率分布
すべての重みとアクティベーションは、カード 2 の隠されたハイパーカードフィールドに区切り符(カンマ)で接続した数字として保存されます。例えば 16x16 の重み行列は、単一のフィールド内の 256 個のカンマ区切りの値です。スタックを保存して終了し、再度開くと、学習済みのモデルが依然としてそこにあります。
リアルハードウェアでの学習
MacMind は System 7.6.1 を動作させたマッキンтоッシュ SE/30 で学習され、また Apple Silicon 上で動作する Basilisk II エミュレーターを通じてテストされました。ハイパートークは解釈実行される言語であり、すべての乗算、フィールドへのアクセス、変数の参照がインタプリタを経由します。そのため、1 つの学習ステップには数秒を要し、収束までの学習(約 1,000 ステップ)には数時間を要します。
モデルはovernight の間放置され、8 MHz の乗算・累算ごとに逆伝播が行われ続けました。翌朝には、その置換関係が学習されていました。
要件
HyperCard 2.0 以降が必要です。HyperCard 1.x は算術演算を左から右に評価し、標準的な優先順位を持たないため(例:2 + 3 * 4 = 20 となってしまい、14 のはず)、モデルのすべての行列乗算や勾配計算を沈黙して壊してしまいます。HyperCard 2.0 は標準的な数学演算子の優先順位を導入しました。このスタックは HyperCard 2.1 で構築され、テストされました。
| 特徴 | MacMind リファレンス |
|---|---|
| HyperCard | 2.0 / 2.1 |
| システムソフトウェア | System 7(最低限:7.6.1) |
| RAM | 1 MB(推奨:2 MB) |
| プロセッサ | 68000 / 68030 (Mac SE/30) |
| 対応 OS | Mac OS 8, Mac OS 9, Mac OS X Classic Environment (PowerPC 版 10.4 Tiger まで) |
実際のビンテージハードウェア上では、各学習ステップで数秒を要し、完全な学習には数時間を要します。Basilisk II または SheepShaver で動作する現代のマッキン tosh 上でもパフォーマンスは同等です。ボトルネックはホスト CPU ではなく、ハイパートークの解釈実行にあります。
ご自身でも動かす方法
クイックスタート(学習済みモデル)
- Releases から
をダウンロードします。MacMind-Trained.img - System 7 からの Mac OS 9 までのマッキン tosh か、エミュレーター(Basilisk II, SheepShaver, Mini vMac)で開きます。
- MacMind スタックをダブルクリックします。
- カード 3(Inference)へ移動し、「New Random」をクリックし、次に「Permute」をクリックします。
学習過程を観察する(空のスタック)
- Releases から
をダウンロードします。MacMind-Blank.img - マッキン tosh かエミュレーターで開きます。
- カード 2(Training)へ移動します。
- 短時間の試行には「Train 10」をクリックするか、「Train to 100%」をクリックしてサンプルでのスコアが完璧になるまで学習を続けます。長時間の学習を行う場合は、メッセージボックス(Cmd-M)を開き、
と入力することで連続して 1,000 ステップ分の学習を行います。モデルは毎回中断した箇所からつづいて学習します。trainN 1000
数学的妥当性の検証(Python)
validate.py スクリプトは、正確に同一のトランスフォーマーを再実装した Python/NumPy のリファレンス実装です。同じタスクで同じアーキテクチャを使用して学習を行い、100% の精度に収束することを確認します。
pip install numpy python3 validate.py
クレジット
- Frank Rosenblatt (1958) -- ペルセプトロン:重みを調整することで例題から機械が学習できることを初めて実証したものです。
- Paul Werbos (1974) / Rumelhart, Hinton & Williams (1986) -- 逆伝播:本プロジェクトが実装している学習アルゴリズムです。
- Vaswani et al. (2017) -- "Attention Is All You Need":このモデルが実装しているトランスフォーマーアーキテクチャです。
- Cooley & Tukey (1965) -- その位相反転置換が学習タスクである高速フーリエ変換(FFT)アルゴリズムです。
MacMind は Sean Lavigne によるオリジナル実装です。
Falling Data Zone よりも他
AgentBridge -- AI エージェントをクラシックマックに接続します。Claude や他の AI エージェントをクラシックマック OS に接続するための、シンプルなテキストベースのプロトコルに基づくネイティブな System 7 / Mac OS 8 / Mac OS 9 アプリケーションです。実際のハードウェアとエミュレーターで動作します。 さらに多くのアプリは apps.fallingdata.zone でご覧いただけます。
ライセンス
MIT。LICENSE ファイルを参照してください。