← 기사 목록
日本語https://qiita.com/tags/llm/feed

【物語編】論理ゲートだけで言語モデルを作って Transformer を超えるまで 3 回散った話

추출된 키워드

39
言語モデル·5論理ゲート·5HBA·5Hierarchical Boolean Attention·5Transformer·5ChatHBA·4論理回路·4DLGN·4DLGN flat·4知識蒸留·4Attention·4LoopedDLGN·4PPL·4ドラフトモデル·3Speculative Decoding·3fine-tune·3born-again networks·3ルーティング·3Boolean 量子化·3バナッハの不動点定理·3Universal Transformer·3char-LM·3TinyShakespeare·3Positional Encoding·3softmax·3AND・OR・XOR·3GPU·3Born Again Neural Networks·2Distilling the Knowledge in a Neural Network·2Deep Differentiable Logic Gate Networks·2Furlanello et al. (2018·2Hinton et al. (2015·2Petersen et al. (2022·2CPU·2マイコン·2組み込み·2Hard threshold calibration·2Early stopping·2加重平均·2

원문

6,796
【物語編】論理ゲートだけで言語モデルを作って Transformer を超えるまで 3 回散った話

【物語編】論理ゲートだけで言語モデルを作って Transformer を超えるまで 3 回散った話

GPU を一切使わず、AND・OR・XOR などの 論理ゲートだけ で言語モデルを作って、
Transformer (PPL 4.86) を 0.13 上回る PPL 4.73 を出すまでに何があったかを、時系列で書きます。

3 回散ってます。記事中の数字は全部、実際に出たものです。

動機 — 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 flat11.83
Transformer (比較)4.86

論理回路で言語学習ができることは確認。ただし TF には届かず。この時点では「あ、何か工夫すればいけるな」と思っていました。まだ希望があった頃です。

二度目: LoopedDLGN — 構造的に詰む

DLGN flat の表現力不足を、深さ方向の反復で補えると考えました。Universal Transformer の発想 + バナッハの不動点定理で理論武装。

Hard PPL
v1754.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 v1Best PPL
Ep125.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 v2Soft PPLHard 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"