【物語編】論理ゲートだけで言語モデルを作って Transformer を超えるまで 3 回散った話
GPU を一切使わず、AND・OR・XOR などの 論理ゲートだけ で言語モデルを作って、
Transformer (PPL 4.86) を 0.13 上回る PPL 4.73 を出すまでに何があったかを、時系列で書きます。
3 回散ってます。記事中の数字は全部、実際に出たものです。
- 動画: https://www.youtube.com/watch?v=nzr18PUjy-Y
- リポジトリ: karumaru-kakikukekodoumei/boolean-attention
- 詳細ドキュメント: GitHub Pages
- コード解説編: コード解説
動機 — float って本当に必要?
AI 推論は GPU の並列 float 積和で動いてます。仮に AND/OR/XOR だけで言語モデルが作れたら:
- CPU で動く(GPU 不要)
- 消費電力が桁違いに減る
- マイコンや組み込みでも巨大 LM が走る可能性
- ゲートを見れば回路が読める(ブラックボックス感が薄れる)
「重み」「埋め込み」「アテンション」を、論理回路で書けないか。動機はそれだけです。
一度目: DLGN flat — 学習はできた
Petersen et al. (2022) の DLGN を素直に使いました。2 入力ブール関数は 16 種類しかないので、16 ゲートを softmax で混ぜて勾配を流す手法です。
4 段積んで TinyShakespeare 80KB で char-LM 学習:
| PPL | |
|---|---|
| DLGN flat | 11.83 |
| Transformer (比較) | 4.86 |
論理回路で言語学習ができることは確認。ただし TF には届かず。この時点では「あ、何か工夫すればいけるな」と思っていました。まだ希望があった頃です。
二度目: LoopedDLGN — 構造的に詰む
DLGN flat の表現力不足を、深さ方向の反復で補えると考えました。Universal Transformer の発想 + バナッハの不動点定理で理論武装。
| 版 | Hard PPL |
|---|---|
| v1 | 754.31 |
| v2 (PE あり) | 312.4 |
| v3 (容量倍) | 286.1 |
754。TF の 4.86 と比べて 155 倍。最初は「バグだろ」と疑ったんですが、何回確認しても再現。原因は構造的でした:
ε_total ≈ Σ_t ‖f_hard(x⁽ᵗ⁾) - f_soft(x⁽ᵗ⁾)‖
ハードコラプス後、各反復で生じる量子化誤差が深さ方向に蓄積する。容量を倍にしようが、Positional Encoding を入れようが、本質は変わらない。
反復系と Boolean 量子化は相性が最悪。 1 週間分の作業がほぼ無になって、ちょっと諦めかけました。
三度目: HBA — 入れる場所を変える
コーヒー飲みながら、ふと思いました。
「Boolean を深さ方向に入れるからダメなんだ。じゃあどこに入れる?」
Attention は抽象的に 2 ステップに分けられます:
- ルーティング: Q, K から「どこを見るか」を決める
- 値の集約: 注意重みで V を加重平均
(1) のルーターだけ Boolean、(2) は float のまま。これなら量子化誤差は深さ方向に伝播しない。
これが HBA (Hierarchical Boolean Attention) の発想です。
| HBA v1 | Best PPL |
|---|---|
| Ep12 | 5.40 |
TF 4.86 まで 0.54 差。LoopedDLGN の 754 と比べたら別世界。
ただし後半で過学習。安定化テクニックを 4 点入れた v2:
- Best checkpoint 保存(best val PPL でリストア)
- Early stopping (patience=5)
- Hard threshold calibration(推論 τ を val で再校正)
- 温度の
warm_holdパターン
| HBA v2 | Soft PPL | Hard PPL |
|---|---|---|
| 結果 | 5.32 | 6.54 |
Hard PPL 6.54。LoopedDLGN 比 115 倍の改善。「あ、勝てるかもしれない」と思った瞬間です。
蒸留で逆転 — 4.73 vs 4.86
残り 0.46 差。これは中身を変えるより、学習方法を変えた方が早い。Hinton 流の知識蒸留で:
$$\mathcal{L} = \alpha \cdot \mathrm{CE}(p_S, y) + (1-\alpha) \cdot T^2 \cdot \mathrm{KL}(p_T^{(T)} | p_S^{(T)})$$
$\alpha=0.3$, $T=8$。
| PPL | |
|---|---|
| Teacher (TF) | 4.86 |
| Student (HBA distilled) | 4.73 |
| 逆転幅 | -0.13 |
論理回路ベースの生徒が、Transformer の教師を 0.13 上回りました。
これは born-again networks (Furlanello et al. 2018) として知られる現象。教師のソフトラベルが実質的なデータオーグメンテーションとして働き、生徒が教師を逆転することがあります。理屈は知っていたけど、自分の手で起きるのを見るのは別の体験 でした。
油断して挑んだ ChatHBA、跡形もなく崩壊
研究で TF 越えできたので調子に乗りました。「会話モデル作れるんじゃね?」
英語 Q&A を 5,377 件自前で作って、HBA を fine-tune。PPL は 6.46 と悪くない値。
REPL で:
Q: What is the capital of France?
A: It is Otewkia.
Q: How are you today?
A: ::: h.
Q: Tell me a joke.
A: The is the is the is the is the...
Otewkia って何の国だよ。
完全に崩壊しました。原因は 3 つほど:
- char-LM の context 64 文字では
France → Parisのような長距離概念連鎖を学べない - 5,377 件は容量に対してデータ規模が中途半端、汎化ではなく丸暗記
- 蒸留なしの fine-tune は HBA 単体の表現力に依存しすぎる
研究で TF 越えできたのは蒸留があったから。 fine-tune は別の戦いだと、この失敗で確認しました。
まとめ — 何が分かったか
| 主張 | 確認した数値 |
|---|---|
| Boolean 回路で言語モデルが作れる | DLGN flat PPL 11.83 |
| 反復 Boolean は誤差が爆発する | LoopedDLGN PPL 754 |
| Router だけ Boolean なら誤差は伝播しない | HBA v2 Hard PPL 6.54 |
| 蒸留で Boolean モデルが TF を超える | Student PPL 4.73 (TF 4.86) |
| char-LM 単体で会話は無理 | ChatHBA で Otewkia 出力 |
応用としては、HBA は Speculative Decoding のドラフトモデル など、軽量・高速ルーティングが必要な特化用途で実用の見込みがあります。そのへんは次のフェーズで。
おわりに
実装の途中で何回散ったかは、他の誰かの研究の役に立つかも、と思って書きました。
PPL 754 で爆死した夜と、4.73 が出た朝の間には、3 週間あります。
- 動画: https://www.youtube.com/watch?v=nzr18PUjy-Y
- リポジトリ: GitHub
- ドキュメント: GitHub Pages
- 参考: Petersen et al. (2022) "Deep Differentiable Logic Gate Networks"
- 参考: Hinton et al. (2015) "Distilling the Knowledge in a Neural Network"
- 参考: Furlanello et al. (2018) "Born Again Neural Networks"