ハクソク

世界を動かす技術を、日本語で。

トランスフォーマー内でのプログラム実行による指数関数的に高速な推論

Hackerたちの意見

これは解釈可能性にとってすごく面白い道のように思えるね。特にモデルの動作の大部分が擬似的にシンボリックに行われるなら。ツールをモデルの主要な計算経路に統合するアイデアは考えてたけど、バニラのトランスフォーマーだけで効率的にできるとは思わなかった。本当に、アテンションがあれば全てが揃うって感じかな。
AIを使ってプロジェクトをまとめることのデメリットが見えてくるね。流暢な文は見えるけど、メッセージが伝わってこない。> 「これは機能するけど、実際の実行はモデルの外で行われた。」モデルが計算を指定して、その後外部システムに実行を待たせているんだ。> 「私たちのトランスフォーマーもプログラムを出力するけど、外部ツールを待つ代わりに、そのプログラムを自分自身で、ステップバイステップで実行する。」そのメリットは何なの?スピードなの?ベンチマークはどこにあるの?この計算を通してバックプロパゲーションできるの?実際にやってるの?「モデルの内部」にあることがいいのは何なの?ただ優雅で素敵にするためだけ?ツールはすでに全体のハイブリッドシステムの「内部」にあったのに。実際の問題は何なの?
> 「AIを使ってプロジェクトをまとめることのデメリットが見えてくるね。流暢な文は見えるけど、メッセージが伝わってこない。」なんで嫌いなものをAI生成って呼ぶことにこだわるのかよくわからないけど、あまり良くないね。テキストについて言いたいことがあるなら言えばいいし、根拠のない非難はやめてほしい。> 「そのメリットは何なの?スピードなの?ベンチマークはどこにあるの?」これはかなりイデオロギー的なことだと思う。ある人たちは「何らかのシンボリックロジックが必要だ」としっかり信じてる。記事からの引用だけど、「計算できないシステムは、計算が何であるかを真に内面化できない。」興味深いことはそれ自体で面白いこともある。これはその一つだと思う。上記の点について著者には同意しないけど、彼らが共有してくれたことには感謝してる。とにかく、すごく興味深い読み物だよ。
正直言って、ここで一番面白いのは、2Dヘッドだけで有用な計算ができるってことだね(少なくともインタープリタをシミュレートするのには十分だし)。それに、2Dヘッドでargmaxアテンションを計算するO(log n)のアルゴリズムがあるってこと。特定の決定論的な操作を行ういくつかの凍結されたレイヤーを持つ効率的な擬似シンボリックLLMが作れるかもしれないし、他のレイヤーは学習されるものもある。
AIの特徴って何だろう?私が見つけた唯一のものは冗長性だけど、これは一般の人にもわかりやすくしようとしているから納得できるね。素晴らしいポイントがある(このアプローチの利点が説明されていない)けど、それは人間がよく犯すミスだと思う。
重要な違いは、モデルが実行しながらプログラムを書くことができるってことだね。以前はコードを書いて、外部のプログラムに実行させる必要があったけど、ここでは実行中に考えを変えることができる。まるでCoTの「アハ」な瞬間で観察されたことみたいだね。
> スピードなの? > この計算を通してバックプロパゲーションできるの?実際にやってるの?敬意を表して言うけど、この記事を読んでいないかもしれないね。> 「実行トレースはフォワードパスの一部なので、全プロセスは微分可能なままです。計算自体を通して勾配を伝播することもできます。」これは外部ツールとは根本的に異なるんだ。直接大きなモデルに統合できるトレーニング可能な計算基盤になる。> 「ネストされた凸包を通じてポイントを保存することで、デコーディングコストはO(k+log n)になります。」> 「最終的な能力の上限に関係なく、すでに大きなモデルを加速するための強力なシステムの原始的なアイデアを示唆しています。」だから、はい、そうです。> 「ベンチマークはどこにあるの?」何を基準にベンチマークすべきかは明確ではないね。通常のKVキャッシュとスピードを比較しているよ。パフォーマンスについては…もし実際に100%の成功率で数独ソルバーを実行しているなら、100%未満の成功率のモデルを見つけるのはかなり簡単だと思う。ここでデータを見たいのは確かにいいけど、同意するよ。個人的には、この方法が通常のモデルとMoEスタイルで組み合わせられるかどうかを見るのがすごく面白いと思う。ルーターモジュールは、特定の問題のサブセットに対して決定論的に正しいトークンを予測することをすぐに見抜くはずだし。プロローグソルバーのような一般的なソルバーをモデルに直接埋め込むアイデアも好きだよ。実際、WASMに直接行くことは考えもしなかったから、VMを直接埋め込むのは面白い選択だね。でも、ここで「小さな」インタープリタがどんなふうに役立つか考えると興味深い。
まず、外部ツールの呼び出しを排除することで、モデルは一定のセキュリティを得られるんだ。LLMが呼び出すツールが壊れる可能性があるから、壊れたツールは呼ばれないってわけ。
人々がAI生成テキストについて文句を言うのに費やすエネルギーの半分でも、実際に何かをすることに使ってくれたら、18ヶ月前にはエネルギーに基づく存在に進化してたはずだよ。
これはただの計算よりもずっとクールに思えるね(計算はツールに任せるのが簡単で、そうすることで予測可能性も高いし)。ここでの広いポイントは、モデルがトークン数の対数にスケールするアテンションに動的に切り替えられるってことだね。2D空間で凸包を探るだけで。確かに能力が劣るアテンションだけど、プログラムの実行をレジスタやスタックのテキスト表現で追跡できる能力がある。これは意味のある柔軟性のレベルで、多くの人間にとっては信頼性を持って行うのが難しいことだよね!「フォーカスモード」に入ってトークンを超高速で生成できるLLMがあったら、何ができるだろう?大規模なパスや仮説を探って絞り込む推論トークン生成フェーズは、定義がしっかりしていればどれだけ強力になるんだろう?これがマルチモーダルモデルや空間的推論にどんな影響を与えるんだろう?論文が示唆するように、> 「これらのモデルは、専用の高速パスとして、より遅い一般的なモデルと組み合わせて使ったり、単一のシステム内での高速/低速ハイブリッドアーキテクチャの一部として使ったり、あるいは通常のアテンションモデルがそれを検証して受け入れる間にトークンを迅速に提案する投機的実行モデルとして使ったりできるかもしれない。」最終的な能力の上限に関係なく、すでに大きなモデルを加速するための強力なシステムの原始的なアイデアを示唆しているね。
これには可能性がある気がするけど、今のままじゃほとんど役に立たないね。重みが公開されてないのは残念だし、実際に計算の原始をモデルの重みに合成するために使った「コンパイラ」ツールもないし。低予算の実験に向いてる「小さなモデル」システムって感じで、このアプローチがどこまで進むのか見てみたいな。基本的な前提には同意できないけど、古い神経シンボリックのゴミを再表現してるだけだと思う。でも、あらかじめ定義された計算の原始をLLMに埋め込むことには、何かしらの使い道があるかもしれないね。
小さなプログラムをトランスフォーマーの重みにハードコーディングして実験したいなら、ALTAを試してみるといいよ: https://arxiv.org/abs/2410.18077v2
「古い神経シンボリックのゴミ」って何?
> 「全体のプロセスは微分可能なままです。計算自体を通じて勾配を伝播させることもできます。」これが外部ツールとは根本的に違うところだね。これは大きなモデルに直接統合できる訓練可能な計算基盤になる。私の意見では、この技術が従来のインタープリターに対して不公平なアドバンテージを持つポイントはここだと思う。微分可能性があるって、どれだけ破壊的なのかな?私にとっては、LLMプログラムのトレーニング中にちょっとした調整ができるってことだと思う。例えば、定数を変えたり、関数呼び出しを別の関数に切り替えたり。こんな広い空間の中で効果的に勾配降下できるのかな?学習したプログラムのプールからツールを呼び出すのとどう違うんだろう(古典的な言語で書かれたLLMプログラムのためのGitHubみたいな感じ)?
初期の考えだけど、これはすごく面白いし、革命的かもしれないね。もし彼らがトランスフォーマーの中でメモリを持つコンピュータを確実にエミュレートできているなら、研究のための全く新しい世界が開けるよ。あまり早く言い過ぎたくはないけど、かなりワクワクしてる。
で、私が理解しようとしてるのは、記事の中にその明確な情報が見当たらないんだけど、彼らはどうやって例えば数独ソルバーをトランスフォーマーの重みに「コンパイル」したのかな?手動でやったの?手書きの数独ソルバーのソースを取って、彼らのコードから重みへのコンパイラに通して、コードをトランスフォーマーの重みにコンパイルしたの?それとも、昔ながらのディープラーニングのやり方で、例から「100%正しい」数独ソルバーを学習させたのかな?もし後者なら、トレーニングの詳細はどこにあるの?何を使ってトレーニングしたの?何に対してトレーニングしたの?どうやってトレーニングしたの?などなど。この記事は詳細が薄いね。
彼らの凸包アテンションメカニズムは新しくて一般的に使えるものなのかな?モデルの形をかなり制限するから、もちろん普遍的な解決策ではないけど、かなり厄介な制約を克服しているように見えるね。
これ、めっちゃ可能性あるよね。特に、コンパイルされた「コード」が同じアーキテクチャのモデル間で効率よく共有できるなら、LoRaやファインチューニングを簡単に超えると思う。
この論文、肝心なところを隠してる気がする。 > 「重要な技術的な鍵は、ルックアップヘッドを次元2に制限することで、支配的な取得/更新操作をシーケンスの長さに対して対数時間で計算できるデコーディングパスを可能にすることです(この構造化エグゼキューターレジームのために)。」編集: hullkvの仕組みが分かった。すごく賢いね。でも、なんでこの戦略が「コードトークン」にしか適用できないのかは理解できない。最後に、wasmがいいターゲットなのかも分からない。確か、wasmはあんまり効率的じゃない気がする(コードではなく表現力の面で)。これがLLMの高次の計画能力を制限してるのかな(常に小さなことを考えさせられるから)。
> 「トランスフォーマーの仕組みは結構理解してるけど、これは全然意味が分からなかった。あと、なんでこの戦略が「コードトークン」にしか適用できないのかも理解できない。」確かに、ここには詳細が全然足りないし、この記事の主張には懐疑的でいるべきだと思う。言語も、個人的には標準的じゃないし、真剣な研究なら普通はこの言語だけで説明することはないと思う。典型的なスケールドドットプロダクトアテンションの式を示すシンプルな方程式があって、例えばどの行列(または挿入された射影行列)がどこかで次元2を持っているかを示す次元の表記/詳細が必要だと思う。さもなければ、主張は理解不能だよ(編集: 編集を見て)。トレーニングの詳細や損失関数の詳細もないし、これらはこの種のものをエンドツーエンドでトレーニング可能にするためには必要不可欠(ほぼ確実に非常に新しい)だと思うから、これも赤信号だね。編集: 重要な行は「gate, val = ff_in(x).chunk(2, dim=-1)」あたりと関連コード、さらに「注意: d_model = 36 で n_heads = 18 はヘッドごとにちょうど2Dを与える」という行だけど、やっぱりこれは非常に不明瞭で標準的じゃない。