なぜコンテキスト長のスケールは難しいのか
コンテキストウィンドウを長くするのは単純なつまみのように聞こえます。その裏では、テキストより速く増えるコストと、薄く広がる注意とが戦っています。
コンテキストウィンドウとは、言語モデルが一度に取り込めるテキストの量、つまりプロンプト、文書、これまでの会話のことです。大きいほうが明らかに良いです。余地が広いほど、レポート全体、長いコードベース、会話履歴の全体を、何も省かずにモデルに与えられます。ではなぜ、すべてのモデルのウィンドウを巨大にしないのでしょうか。内部では、長さは無料のパラメータではないからです。長さは、これらのモデルを機能させているまさにその仕組みと戦い、そのコストはテキストよりも速く増えます。本稿は、コンテキストのスケールが単により多くのメモリを割り当てる問題ではなく、本当に難しい理由についてです。
実際には二つの問題が重なっています。コストの問題と、品質の問題です。両方を解かねばならず、両者は異なる方向へ引っ張ります。
長さを高価にする仕組み
ほとんどの現代の言語モデルは**注意(attention)**の上に作られています。これは各トークンが他のトークンを見て何が関連するかを見極められるようにする仕組みです。注意こそがこれらのモデルに力を与えるものです。入力のどの片も、原理的には他のどの片とも関係しうるのです。
その一句、つまり「どの片も他のどの片とも」が、トラブルの源でもあります。注意の標準的な形では、作業量はトークンのペアの数に比例して増えます。入力の長さを倍にすると作業は倍にならず、おおよそ4倍になります。ペアの数が長さの2乗で増えるからです。これが有名な注意の2次コストであり、長いコンテキストが高価である中心的な理由です。
直観は単純です。N個のものがあって、それぞれが他のすべてを考慮しなければならないなら、計算すべき関係はおおよそNかけるN個あります。Nを10倍にすると関係は100倍に増えます。10倍長いウィンドウは、処理に10倍をはるかに超えるコストがかかりえます。注意において、長さは線形の費用ではありません。
計算の問題の上に乗るメモリの問題
コストは計算だけの話ではなく、メモリの話でもあります。テキストを効率的に処理し、とりわけ生成するために、モデルはすでに見たトークンの中間表現を保持します。しばしばキー・バリュー・キャッシュと呼ばれる動的な蓄えです。このキャッシュは、新しいトークンごとにすべてをゼロから再計算するのをモデルが避けることを可能にします。
落とし穴は、この蓄えがコンテキストの長さとともに増えることです。ウィンドウが長いほど、モデルが一度に高速メモリに保持しなければならない量が多くなります。非常に長いコンテキストでは、このメモリのフットプリントが拘束的な制約になりえます。計算への我慢が尽きる前に、コンテキストを保持する場所が尽きるのです。ですから長いコンテキストは、二つの希少な資源を同時に圧迫します。すべてを関係づける計算と、すべてを保持するメモリです。長コンテキストのシステムを設計することは、おおむね両戦線での戦いです。
より静かな問題:注意が薄く広がる
コストを支払ってウィンドウを巨大にしたとしましょう。第二の、より微妙な問題が現れます。それは費用ではなく品質についてです。注意は入力全体に焦点を分配することで機能します。注目すべきものが少ししかないとき、焦点は集中します。非常に多くあるとき、その焦点はそれらすべてに広がらねばならず、本当に関連する片が無関係なものの海の中で薄められてしまいます。
ですから長いコンテキストは、重要な一つの細部が技術的にはそこにあっても、モデルがそれを見つけて使うのをより難しくしうるのです。情報はウィンドウの中にありますが、ウィンドウの中の他のすべてと注意を奪い合っています。より大きな干し草の山は針を見つける助けにはならず、むしろ針を埋めてしまいます。
これが、非常に長いウィンドウを持つモデルが自動的にそのウィンドウをうまく使うわけではない理由です。長い入力を収められることと、それを効果的に推論できることの間には実質的な違いがあります。前者は容量についてであり、後者は、考慮すべきものがこれほど多いときに注意がなお重要なものを選び出せるかについてです。
中盤での迷子
この品質問題の特によく知られた版は、長いコンテキストの中で情報がどこに位置するかによって、モデルがそれを不均一に使う傾向です。長い入力の冒頭近くと末尾近くの素材は、中盤に埋もれた素材よりしばしば確実に使われます。決定的な事実を長い文書の中央に置くと、モデルはそれを読んだにもかかわらず実質的に見落とすかもしれません。
このパターン、ときにモデルがコンテキストの中盤で弱いと表現されるものは、長いウィンドウが一様で完璧な記憶ではないことを思い出させます。それは独自の強みと弱点の地理を持つ、注意の一区間です。これを知ることは長コンテキストの使い方を変えます。どの位置も等しいと仮定するのではなく、最も重要な素材をモデルが最もよく注意する場所に置くことは、根底の振る舞いから直接導かれる実践的なレバーです。
なぜ単により長いテキストで訓練できないのか
解決策は単に、扱えるようになるまで非常に長い例でモデルを訓練することだと思うかもしれません。それは役立ちますが、無料では済みません。長い系列での訓練は同じ2次コストを引き継ぐので、まさに長いコンテキストを使うことが高価なのと同じ仕方で高価です。そして主に短いテキストで訓練されたモデルは、訓練で見たどれよりもはるかに長い入力を突然見せられると、優雅に汎化しないかもしれません。位置と関連性の感覚が、馴染みのある長さを超えると劣化しうるのです。ですからコンテキストの拡張は、切り替えるスイッチではありません。訓練と提供の両方で、意図的に作り上げ、対価を払わねばならない性質なのです。
この分野はどう限界を押し広げるか
障害は実在するので、長コンテキストの作業の多くは、力ずくで突破するのではなくルールを変えることについてです。その方向性は、数式なしでも直観的です。
- より安価な注意。 大きな研究努力が、全ペア計算を避けることで、注意のコストを長さに対して2次ではなく線形に近く増えるよう近似することを目指しています。少しの厳密さを多くのスケーラビリティと引き換えにするのが繰り返されるテーマです。
- メモリのフットプリントを縮める。 キー・バリュー・キャッシュを圧縮または節約する技術により、より長いコンテキストが同じメモリに収まるようになり、問題のメモリ側を攻めます。
- すべてを保持せず取ってくる。 コーパス全体をウィンドウに詰め込むのではなく、関連する片だけを取ってきてそれを与えます。これは実際のコンテキストを小さく保つことで長さの問題を回避します。検索拡張型アプローチの背後にある戦略です。
どの道も取引をします。より安価な注意は精度をいくらか諦め、圧縮は忠実度をいくらか諦め、検索はすべてが一度にそろっている保証を諦めます。ただ飯はなく、異なる取引があるだけです。
まとめ
コンテキスト長のスケールが難しいのは、これらのモデルの背後にある支配的な仕組みである注意が、入力の2乗で増える作業を要し、効率的に動かすのに必要なキー・バリュー・キャッシュも長さとともに増えるからです。だから長いウィンドウは、テキストが増えるより速く計算とメモリの両方を圧迫します。そしてその対価を払ったとしても、長いコンテキストは注意をより薄く広げ、中盤をあまり確実に使えないので、より多くのテキストを収めることは、それをうまく推論することと同じではありません。フロンティアは取引を変えることで進みます。より安価な注意、よりスリムなメモリ、あるいは重要なものだけの検索。それぞれが到達距離のために何かと引き換えにします。より大きなウィンドウは決して単なる大きな数字ではありません。複利で増えていくコストとの戦いなのです。
