ファジーな関数をプログラムする新発想『Program-as-Weights』、4BのコンパイラがLLMの重みを生み出す時代
「プログラムは思った通りには動かない。
書いた通りに動くのだ。」
、これはプログラミングの世界でよく耳にする戒めですが、では最初から「思った通り」を書き表せない問題はどうすればいいのでしょう。
たとえば、重要なログを検知するルール、壊れたJSONを修復する処理、検索結果を意図に沿って並べ替える仕組み。
どれもきれいなルールベースでは書ききれず、人間の感覚や文脈に依存する“ファジーな関数”です。
近年はこうしたタスクを大規模言語モデル(LLM)のAPIに投げてしまう例が増えました。
けれども、ローカルでの再現性や応答速度、そしてコストの面ではどうしても妥協がつきまといます。
そんな折、「Program-as-Weights(PAW)」という新しいプログラミングパラダイムが提案されました。
ファジーな関数の定義を、コンパクトでローカル実行可能なニューラルネットの重みに変換してしまうというのです。
「あいまいな関数」をどうプログラムするか
あらためて考えると、私たちがプログラムで扱う問題の多くは、if文や数式だけではすっきり書き表せないものです。
要件があいまいだったり、例外ケースが無限に思えたり。
従来は、それでも人間がルールを書き連ね、あるいは機械学習モデルを個別に訓練して対処してきました。
昨今はLLMに「このログが異常かどうか判断して」と問い合わせる手もありますが、毎回巨大なモデルを動かすのは大げさですし、ネットワーク越しにデータを送るのも気が引けます。
PAWは、そんなファジーな関数の“定義”そのものを、軽量なニューラル部品にコンパイルする考え方です。
定義は自然言語で与えます。
たとえば「JSONの文法エラーを直して」とか「この製品レビューが肯定的かどうか教えて」といった指示です。
その指示をもとに、専用のコンパイラが小さなアダプタ(LoRAのような重み)を生成し、あらかじめ用意された小さなインタプリタモデルに取りつけます。
PAWの発想:関数定義を重みに変換
PAWの心臓部は、40億パラメータのコンパイラモデルです。
これは「FuzzyBench」という1000万例のデータセットで訓練されており、自然言語の仕様からパラメータ効率の良いアダプタを生み出します。
アダプタを受け取るインタプリタは、わずか6億パラメータのQwen3を凍結して使います。
この仕組みが面白いのは、関数を“定義”する瞬間だけ大きなコンパイラが動き、その後は生成された小さなアーティファクトだけで何度でも実行できる点です。
つまり、LLMを「問題解決のたびに呼び出す道具」から「再利用可能な道具を作り出す道具」へと役割を変えているわけです。
一度コンパイルしてしまえば、あとはオフラインでも、ローカルでも、気軽に使えます。
驚きの性能と軽さ
論文中の評価では、6億のインタプリタ+PAWプログラムが、320億パラメータのQwen3に直接プロンプトを与えた場合と同等の性能を示したといいます。
しかも推論に必要なメモリは約50分の1、MacBook M3上で毎秒30トークンという実用速度で動きます。
大規模モデルをクラウドで回すのとはまったく別次元の手軽さです。
自然言語であいまいに定義した関数が、手元のマシンでサクサク動く。
それでいて巨大モデルに匹敵する精度が出せるならば、機密データを外部に出さずに処理したい場面や、ネットワークが不安定な環境でも心強いですね。
単なる推論からツールビルダーへ
PAWが提示するパラダイムシフトは、ファウンデーションモデルを「入力ごとに答えを出す問題解決器」ではなく「必要に応じて専用ツールを錬成するビルダー」と捉え直すことです。
開発者は、目的に合わせた小さなアダプタを一度生成し、それをアプリケーションに組み込めばよい。
あとは呼び出すたびに安価で確定的な結果が返ってきます。
これは、従来のプログラミング言語のコンパイラと似た体験かもしれません。
ただし、ソースコードの代わりに自然言語の意図を書き、出力は重みのかたまり。
そしてインタプリタがそれを読み取って動く。
記号論とニューラルネットの境界をまたぐ、あたらしい抽象化の層が生まれつつあるように感じます。
私見:これからのプログラミングの姿
思うに、PAWのような手法は「プログラミングの民主化」をさらに押し進めそうです。
ルールとして書き下せなかったタスクが、言葉を尽くして定義すればカスタムのAI部品として手に入る。
しかも一度作れば配布も容易で、再生産性も高い。
ソフトウェア開発のあり方が、静的で明示的なコードの束から、自然言語で記述された“意図のライブラリ”へと広がっていくのかもしれません。
もちろん課題もあります。
コンパイラが吐く重みは本当にその意図を正確に反映しているのか、テストや検証はどうするのか。
自然言語の仕様があいまいなら、生成物もまたあいまいさを宿すでしょう。
それでも、コンパイラ自体がさらに洗練されれば、やがて「思い通りのファジーさ」をプログラムできる日が来る。
そんな期待を抱かせる研究です。
今日は、あいまいなタスクをプログラムする新たな形をご紹介しました。
ルールで書けないなら重みにしてしまえ、という逆転の発想が、私たちの道具箱をそっと広げてくれるかもしれませんね。