※本記事は、Afshine Amidi氏とShervine Amidi氏によるStanford University CME295「Transformers & Large Language Models」の2025年秋学期Lecture 3の内容を基に作成されています。講義の詳細情報およびシラバスは https://cme295.stanford.edu/syllabus/ でご覧いただけます。オリジナルの講義動画は https://www.youtube.com/watch?v=Q5baLehv5So で視聴可能です。本記事では、講義の内容を詳細に記録しておりますが、要約や解釈による誤りがある可能性もありますので、正確な情報や文脈については、オリジナルの講義動画をご視聴いただくことをお勧めいたします。
登壇者紹介: Afshine Amidi氏は、Stanford Universityの非常勤講師(Adjunct Lecturer)です。Shervine Amidi氏も、Stanford Universityの非常勤講師(Adjunct Lecturer)です。両氏は本講義シリーズを共同で担当しています。
Stanford Universityの大学院プログラムに関する詳細情報は https://online.stanford.edu/graduate でご確認いただけます。
1. イントロダクションとTransformerベースモデルの復習
1.1 講義の概要と前回の振り返り
Afshin: こんにちは、皆さん。CME 295の講義3へようこそ。今日は非常にエキサイティングな日です。なぜなら、ついに大規模言語モデルを紹介するからです。その前に、いつものように、いくつかのお知らせから始めたいと思います。
一部の皆さんから、授業の前にスライドが欲しいというリクエストがありました。注釈を付けるためにスライドを使いたい場合は、今現在ウェブサイトに公開されていますので、自由にダウンロードしてください。Shervinと私で、毎週木曜日の夕方に定期的にウェブサイトに公開するよう努めますので、ダウンロードして注釈を付けることができます。
それでは、始めましょう。いつものように、先週のエピソードを振り返ります。覚えていると思いますが、講義1と講義2は、Self-Attentionの概念を紹介し、それをTransformerの構造に結びつけることに焦点を当てていました。前回の講義では、世の中に存在するすべてのタイプのモデルと、それらがすべてTransformerに基づいていることを見てきました。
モデルには3つのカテゴリ、3つの主要なカテゴリがあります。最初に見たのはEncoder-Decoderモデルで、これは基本的にTransformerに依存しています。TransformerのEncoderとTransformerのDecoderを持っています。典型的に、そこでのタスクは入力テキストです。つまり、テキストを入力し、テキストを出力します。一例としてT5とそのすべてのバリエーションを見ました。
2番目のタイプのモデルは、TransformerからDecoderを取り除き、Encoder-Onlyモデルを得るものです。典型的なEncoder-OnlyモデルであるBERTについて、より深く掘り下げました。BERTが持っているのは、エンコードされた埋め込みが入力を非常に意味があり表現力豊かにするという素晴らしい特性です。分類や感情抽出の例を見ました。特に、CLSトークンのエンコードされた埋め込みを考慮に入れました。実際の生活では、BERTは文書やセンテンスをエンコードするために使用されます。これらのモデルがどのように有用であるかは、後ほどクラスで見ていきます。
そして最後になりますが、3番目のカテゴリのモデルがあります。それはDecoder-Onlyです。Transformerのデコーダ部分のみを保持します。ここでも少し修正を加えます。Cross-Attentionを削除します。なぜなら、もうEncoderを持っていないので、それは必要ないからです。
この種のモデルは、テキストを入力し、テキストを出力します。GPTは、このようなモデルの非常に良い例です。実際、最近のほとんどのモデルは、Decoder-Onlyです。これらが、世の中で見ることができる3つの主要な種類のモデルです。ここまで、皆さん大丈夫ですか?それでは、LLMという用語を紹介したいと思います。
2. 大規模言語モデル(LLM)の定義と特徴
2.1 LLMとは何か:3つの「大規模」の側面
Afshin: LLMは大規模言語モデル(Large Language Model)の略です。では、大規模言語モデルとは何でしょうか?まず第一に、大規模言語モデルは言語モデルです。言語モデルとは、トークン列に確率を割り当てるモデルのことです。この場合、私たちのモデルは常に次のトークンの確率を予測します。その意味で、これは言語モデルです。しかし、大規模言語モデルは「大規模」でもあります。
なぜ大規模なのでしょうか?これらのモデルは、実際にサイズの観点でスケールアップされていることがわかります。まず、モデルサイズの観点からです。最近では、数千億パラメータのオーダーのモデルを目にすることは珍しくありません。しかし、通常、LLMと言うとき、少なくとも10億のオーダーと言います。
これらのモデルは、膨大な量のデータで訓練されています。データ量というのは、事前学習に使用されたトークン数で定量化します。これは数千億トークン、あるいは数兆トークンのオーダーです。最大のものは、数十兆トークンのオーダーだと思います。つまり、巨大な訓練セットです。そして、それらが大規模である理由は、多くの計算を必要とするからでもあります。典型的には、それらを機能させるために多数のGPUが必要です。
ただし、最近では、コンシューマーベースのGPUで動作させるための多くの最適化が行われています。それについては後ほど見ていきます。しかし、LLMはこれらのカテゴリーに従って大規模なのです。
もう一つ指摘したいのは、これらの用語はすべて比較的新しいということです。2018年、2019年には、LLMの明確な定義はなかったと記憶しています。実際、誰もLLMについて話していなかったと思います。最初の頃、おそらく人々がLLMについて話したとき、BERTを含めていました。しかし、BERTはテキストを生成しないEncoder-Onlyモデルです。したがって、現在確立されているLLMの定義では、BERTはテキストを生成しないため、LLMとは見なされません。
ここでは、テキストからテキストへの変換を行う言語モデルのみを考えます。それらは、サイズ、訓練に使用されたデータ量、そして計算の観点から非常に大規模です。そして、前に見たように、これらのモデルはDecoder-Onlyです。ここでやることは、Encoderを削除し、Masked Self-Attention、Feedforward Neural Network、そして加算と正規化のみを保持します。これだけを保持します。そして、これがLLMのバックボーンです。
GPTが良い例だと述べましたが、それだけではありません。他にもたくさんのモデルがあります。MetaのLLaMA、GoogleのGemma、DeepSeek、Mistral、Qwenなど、聞いたことがあるかもしれません。リストは長いです。大まかに言えば、現代のLLMの90%以上は、すべてDecoder-Onlyです。これは覚えておくべきことだと思います。これで、LLMが何でできているかわかりました。
3. Mixture of Experts(MoE)の基礎概念
3.1 MoEの動機と基本アイデア
Afshin: しかし、最近では人々がこれらのモデルに導入している他の要素があります。それについて少し見ていきましょう。これらのモデルは、サイズが非常に大きく、再度言いますが、典型的には数千億パラメータです。したがって、1回の推論を計算するだけでも、またこれらのモデルを訓練するためにも、多くの計算が必要です。
しかし、皆さんは疑問に思うかもしれません。単純な予測を行うために、順伝播中にこれらのパラメータすべてを常に活性化する必要が本当にあるのでしょうか?少し比喩を用いましょう。部屋に入ったとします。その部屋には、数学者、物理学者、化学者、歴史学者がいます。つまり、このクラスに入ると、自分の専門分野のエキスパートである人々がたくさんいます。
そして、質問があります。数学の質問があるとします。私からの質問は、誰に質問しますか?数学者に聞きますか?化学者に聞きますか?全員に聞きますか?現在、私たちは全員に聞いています。生成の計算に関与するよう、モデルのすべてのパラメータに依頼しています。
ここでのアイデアは、入力が与えられたとき、計算に全員が関与する必要はないかもしれないということです。つまり、次のトークン予測の計算に、モデルのサブセットだけを関与させるというアイデアです。専門家というこのアイデアを紹介しているだけです。
次の表記を導入するとしましょう。n個の専門家がいるとしましょう。数学者、化学者、歴史学者、その他何でも構いません。これらがあなたの専門家です。アイデアは、入力xが与えられたとき、出力の生成に誰が関与すべきかを自問するということです。別のネットワークを持つことになります。
それをGate(ゲート)のようにGと呼びますが、Router(ルーター)とも呼ばれることがあります。推論にどの専門家が関与すべきかを教えてくれるゲートがあるとしましょう。それがある場合、ここでゲートが「実際には専門家2番があなたの質問に答えるのに適している」と教えてくれたとします。ここでのアイデアは、入力はその専門家だけに流れ、他の専門家には流れないということです。
これには名前があります。Mixture of Experts(専門家の混合)と呼ばれます。MoEと表記されます。誰もがMoEについて話しています。これらはMixture of Expertsです。よく見る式はこれです。出力y、y hatと表記されるものは、専門家の出力にある量を掛けたものの和です。その量とは、ゲートの出力で、各専門家の出力がどれだけ重要かを教えてくれます。
学生: Gをどうやって訓練するのですか?Eをどうやって訓練するのですか?
Afshin: 素晴らしい質問です。質問は、Gをどう訓練するか、Eをどう訓練するかです。典型的には、それらを共同で訓練します。おそらく後ほど見ることになりますが、通常の訓練と同じように考えることができます。順伝播を行い、損失を計算し、逆伝播します。
実際、これは興味深い質問です。なぜなら、MoEの訓練に伴ういくつかの課題があり、それをすぐに見ていくからです。
別の学生: これらのEとは何ですか?これらのEのアーキテクチャは何ですか?
Afshin: 今のところ、何らかのネットワークであるとしましょう。今は具体的に指定していませんが、すぐに見ていきます。今のところ、何らかのネットワークであるとしましょう。
私は、全員を活性化しないとしたらどうか、サブセットを活性化したらどうかと言いました。しかし、この式は実際には、すべての専門家の出力を考慮していることを前提としています。ここで2種類のMoEを区別したいと思います。
4. Dense MoEとSparse MoE
4.1 Dense MoEの特性
Afshin: Dense MoEと呼ばれる種類があります。Dense MoEは、実際には関与する専門家の数に制約がありません。これらの重みは、0から1の間のどこにでもあり得ます。それらを確率分布として考えてください。しかし、他の専門家と比較して、いくつかの専門家により大きな重みを置くだけです。
先ほどの例に戻りましょう。数学の質問があるとします。数学者、化学者、歴史学者に尋ねるつもりです。おそらく、歴史学者が言うことよりも、数学者が言うことに高い重みを付けるでしょう。これがアイデアです。
しかし、興味深いのは、活性化される専門家の数を制約する場合です。なぜなら、ここで前述したように、私たちが興味を持っているのは、全員を関与させないこと、つまり計算量を節約することだからです。
4.2 Sparse MoEの特性と計算効率
Afshin: Sparse MoEと呼ばれる2番目の種類のMoEがあります。これが行うのは、いわゆる「Top k」の専門家のみを選択することです。kは1に等しくすることができます。つまり1つの専門家、あるいは2つでも構いません。選択するハイパーパラメータです。ここで、出力の表現は、選択されたすべての専門家についてのG(x)×E(x)の和になります。
ここまでで大丈夫ですか?もちろん、もっと多くのことがあります。興味がある場合は、スライドの下部にあるリソースを自由に参照してください。
1つ言いたいことがあります。これらのモデルが各パスで生成する計算量の測定単位があります。FLOPSという用語を見ることになります。FLOPSという用語を見たことがある人はいますか?あまりいませんね。これはFloating-Point Operations(浮動小数点演算)の略です。どれだけの演算が関与しているかを定量化します。加算や乗算と考えてください。例えば順伝播に関与するものです。基本的に、タスクがどれだけ計算量が多いかを定量化します。
典型的には、Dense MoEではなくSparse MoEを通過するとき、FLOPSの量が少なくなると言います。これが、見ることになる測定単位です。
4.2 Sparse MoEの特性と計算効率
Afshin: 先ほどの質問に戻りますが、これらの専門家とは何でしょうか?覚えていると思いますが、10分前に、LLMはDecoder-Onlyモデルだと言いました。皆さんに質問があります。LLMにいくつかのMoEを配置したいとしましょう。どこに配置しますか?
ここには3つの選択肢があります。Masked Self-Attention層があります。Feedforward Neural Networkがあります。そして正規化があります。皆さんへの質問ですが、これをどこに配置すると思いますか?ネットワークの最も複雑な部分はどこだと思いますか?多くの演算があるのはどこですか?
学生: Feedforward?
Afshin: そうです。素晴らしい答えです。実際、それはFeedforward Neural Networkです。その理由は、Shervinが講義1で言及したと思います。Feedforward Neural Networkを覚えていると思いますが、それは入力があるネットワークで、D次元の入力ベクトルです。そして、これがD_FF次元空間に投影されます。そしてD次元空間に戻ります。
D_FFは典型的に、入力の次元よりも大きいです。入力と言うとき、ここのことです。典型的により大きいのです。そのFeedforward Neural Networkに持っているパラメータの量は、D_model×D_FF×2にいくつかのバイアスを加えたもののオーダーです。基本的にこれがオーダーの大きさです。
Attention層を覚えていると思いますが、基本的には投影行列で構成されています。投影行列の次元は何でしょうか?D_model×Keyの次元×Queryの次元×Valueの次元です。この次元は典型的にはるかに低いです。100分の1のオーダーと考えてください。D_modelは典型的に100分の1のオーダー、1000分の1のオーダーです。そして、ここでの投影、D_FFは1000分の1のオーダー、10000分の1のオーダーです。
これで、Mixture of Expertsを配置するのに良い場所であることを納得できましたか?はい?では、これが実際にどのように行われているかです。現代のLLMでは、次のトークン予測の計算に全員を関与させないというこのアイデアは、Feedforward Neural Networkがある場所にMixture of Expertsを配置するというものです。典型的にはSparse Mixture of Expertsを持つことになります。
質問に戻りますが、これらの専門家は実際にはFeedforward Neural Networkです。訓練できる複数のネットワークがありますが、1つだけを活性化します。典型的にkは1に等しくなります。2に等しくすることもできますが、サブセットのみです。それが私の言いたいことです。
5. ルーティング崩壊問題と対策
5.1 ルーティング崩壊の課題
Afshin: このルーティングはトークンレベルで行われます。Decoderを覚えていると思いますが、基本的に入力として何かを受け取ります。つまり、複数のトークンです。ここで私が言っているのは、各トークンは、他のトークンとは異なる可能性のある専門家によって処理されるということです。
ここでのルーターは、トークンの表現を入力として受け取り、このトークンがどの専門家に流れるのが最適かを判断します。このアイデアは理解できますか?後で少し図解がありますので、それが役立つことを願っています。
では、モデルをどのように訓練するかという質問に戻りましょう。ルーターを別々に訓練しますか?専門家を別々に訓練しますか?人々が抱える1つの課題は、これらのMoEベースのモデルを訓練するとき、すべての専門家が重みを持っていること、使用されていることを確認することです。
なぜなら、モデルを訓練して、なぜか1つか2つの専門家だけが常に活性化されるということが十分にあり得るからです。そして他の専門家は、常に非アクティブです。計算に関与することはありません。この問題はRouting Collapse(ルーティング崩壊)と呼ばれます。なぜルーティング崩壊と呼ばれるのでしょうか?それは、ルーターが常にいくつかの専門家を選択するが、他の専門家は選択しないからです。これが課題です。
5.2 損失関数による解決策
Afshin: 人々がこの課題を軽減しようとする方法は、損失関数を変更し、ここに書かれている追加の項を加えることです。基本的には、ハイパーパラメータαに専門家の数nを掛け、トークンが特定の専門家iに行ったかどうかに依存する量の和に、すべての専門家にわたって和をとったものです。
この式がどのように機能するかを完全に理解することは、それほど重要ではありません。このスライドから得るべき唯一のことは、この追加の損失によって、これらの量がより均一な分布に収束することを可能にするということだと思います。
念のため、これらの量とは何でしょうか?f(i)は、専門家iにルーティングされるトークンの割合です。P(i)は、専門家iの平均ルーティング確率です。すべての専門家が同じように使用されるべきだと言うとき、私が言っているのは、この確率が専門家間で均一であってほしいということです。
学生: これらの量をいつ計算するのですか?
Afshin: 質問は、これらの量をいつ計算するかですね。通常の訓練プロセスとして考えることができます。ミニバッチを実行し、モデルを通過させ、これらすべての量を計算します。そして逆伝播をそれに基づいて行います。覚えておいてほしいのは、これがルーターの選択の確率を専門家間でより均一にすることを奨励するということです。これは、このルーティング崩壊現象を軽減するものです。
5.3 その他の技術
学生: Dropoutを使用できますか?
Afshin: もちろんです。他の技術と常に組み合わせることができます。人々は、これが非常に役立つことを発見しただけです。他の技術について言えば、私が話していない、Dropoutのアイデアに非常に似たものがあります。Noisy Gating(ノイジーゲーティング)と呼ばれます。
Noisy Gatingは基本的に、ゲートからの予測がありますが、それにノイズを加えます。基本的に、純粋な偶然によって、他の専門家が計算に関与することを可能にします。これも他の技術です。たくさんの技術があります。しかし、Dropoutは確かに過学習のようなものに非常に有用です。そして、そのアイデアは異なる設定で再利用できます。
学生: 微分可能にするにはどうしますか?導関数をどう取りますか?
Afshin: 質問は、導関数をどのように取るかですね。懸念をもう少し説明していただけますか?平均ルーティング確率について言えば、それはゲート出力の関数です。それが1つです。P(i)についてです。質問はf(i)についてですね。f(i)については、今すぐに良い答えを持っていませんが、人々はいくつかの技術を持っていると思います。最近では、手作業でこれを行う必要さえありません。組み込みのものがあります。f(i)については後でフォローアップできるかもしれません。
しかし、P(i)については、これは非常にきれいです。ゲートからの確率の平均に過ぎません。基本的に、ゲートからの出力確率は、ベクトルがnの空間に投影されるものと考えることができます。nは専門家の数に対応します。そしてSoftmaxを通過します。出力は基本的に1に合計されます。
これらの各次元は、どの専門家iが使用されるかに対応する値を表します。例えば、最初の次元は専門家1用、2番目の次元は専門家2用、というようになります。これの平均を取るだけで、これはすべてのパラメータから表現できます。その点については問題ないはずです。
別の学生: MoEの数を増やすと、モデルパラメータの数が増えますか?
Afshin: 素晴らしい質問です。実際、これはMoEベースのモデルの背後にあるアイデアの1つです。推論時に大幅に多くの計算コストを負担することなく、モデルをスケールできるということです。容量、人々が容量と言いますが、モデルの容量を増やすことができますが、制御された量のアクティブパラメータを維持します。アクティブパラメータとは、順伝播に使用されるパラメータです。
人々はそれを使用します。パラメータの数を増やすだけです。だからこそ、数千億パラメータのオーダーだったものよりもさらに大きなMoEベースのモデルがあるのです。兆単位のパラメータのオーダーさえあります。
例えば、ここで推奨する読み物の1つは、Switch Transformerです。これは1兆以上のパラメータにスケールアップしました。確かにもっと多いです。しかしそうは言っても、論文を読むと、これらのモデルは、彼らがSample Efficient(サンプル効率的)と呼ぶものであることもわかります。
より少ないパラメータ数のモデルと同じくらい良くなるまでの時間が短いのです。訓練時間の関数として訓練曲線を描くと、これらのモデルが典型的により多くのサンプル効率的であることがわかります。
学生: すべてがトレードオフですね。
Afshin: そうです。すべてがトレードオフです。まさにその通りです。
5.2 損失関数による解決策
Afshin: 人々がこの課題を軽減しようとする方法は、損失関数を変更し、ここに書かれている追加の項を加えることです。基本的には、ハイパーパラメータαに専門家の数nを掛け、トークンが特定の専門家iに行ったかどうかに依存する量の和を、すべての専門家にわたって合計したものです。
この式がどのように正確に機能するかを完全に理解することは、それほど重要ではありません。このスライドから得るべき唯一のことは、この追加の損失によって、これらの量がより均一な分布に収束することを可能にするということだと思います。
念のため、これらの量とは何でしょうか?f(i)は、専門家iにルーティングされるトークンの割合です。P(i)は、専門家iの平均ルーティング確率です。すべての専門家が同じように使用されるべきだと言うとき、私が言っているのは、この確率が専門家間で概ね均一であってほしいということです。
学生: これらの量をいつ計算するのですか?
Afshin: 通常の訓練プロセスとして考えることができます。ミニバッチを実行し、モデルを通過させ、これらすべての量を計算します。そして、それに基づいて逆伝播を行います。覚えておいてほしいのは、これが確率、つまりルーターの選択を専門家間でより均一にすることを奨励するということです。これは、このルーティング崩壊現象を軽減するものです。
5.3 その他の技術
学生: Dropoutを使用できますか?
Afshin: もちろんです。他の技術と常に組み合わせることができます。人々は、これが非常に役立つことを発見しただけです。他の技術について言えば、私が話していない、Dropoutのアイデアに非常に似たものがあります。Noisy Gating(ノイジーゲーティング)と呼ばれます。
Noisy Gatingは基本的に、ゲートからの予測を持っていますが、それにノイズを加えます。基本的に、純粋な偶然によって、他の専門家が計算に関与することを可能にします。これも別の技術です。たくさんの技術があります。しかし、Dropoutは確かに過学習のようなものに非常に有用です。そして、そのアイデアは異なる設定で再利用できます。
学生: 微分可能にするにはどうしますか?
Afshin: 質問は、導関数をどのように取るかということですね。懸念をもう少し説明していただけますか?平均ルーティング確率について言えば、それはゲート出力の関数です。それが1つです。P(i)についてです。質問はf(i)についてですね。
f(i)については、今すぐに良い答えを持っていませんが、人々はいくつかの技術を持っていると思います。最近では、手作業でこれを行う必要さえありません。組み込みのものがあります。f(i)については後でフォローアップできるかもしれません。
しかし、P(i)については、これは非常にきれいです。ゲートからの確率の平均に過ぎません。基本的に、ゲートからの出力確率は、ベクトルがnの空間に投影されるものと考えることができます。nは専門家の数に対応します。そしてSoftmaxを通過します。出力は基本的に1に合計されます。
これらの各次元は、どの専門家iが使用されるかに対応する値を表します。例えば、最初の次元は専門家1用、2番目の次元は専門家2用、というようになります。これの平均を取るだけで、これはすべてのパラメータから表現できます。その点については問題ないはずです。
6. LLMにおけるMoEの実装
6.1 MoEの配置場所の選択
Afshin: 先ほどの質問に戻りますが、これらの専門家とは何でしょうか?覚えていると思いますが、10分前に、LLMはDecoder-Onlyモデルだと言いました。皆さんに質問があります。LLMにいくつかのMoEを配置したいとしましょう。どこに配置しますか?
ここには3つの選択肢があります。Masked Self-Attention層があります。Feedforward Neural Networkがあります。そして正規化があります。皆さんへの質問ですが、これをどこに配置すると思いますか?ネットワークの最も複雑な部分はどこだと思いますか?多くの演算があるのはどこですか?
学生: Feedforward?
Afshin: そうです。素晴らしい答えです。実際、それはFeedforward Neural Networkです。その理由は、Shervinが講義1で言及したと思います。Feedforward Neural Networkを覚えていると思いますが、それは入力があるネットワークで、D次元の入力ベクトルです。そして、これがD_FF次元空間に投影されます。そしてD次元空間に戻ります。入力と言うとき、ここのことです。
D_FFは典型的に、入力の次元よりも大きいです。典型的により大きいのです。そのFeedforward Neural Networkに持っているパラメータの量は、D_model×D_FF×2にいくつかのバイアスを加えたもののオーダーです。基本的にこれがオーダーの大きさです。
Attention層を覚えていると思いますが、基本的には投影行列で構成されています。投影行列の次元は何でしょうか?D_model×Keyの次元×Queryの次元×Valueの次元です。この次元は典型的にはるかに低いです。100分の1のオーダーと考えてください。D_modelは典型的に100分の1のオーダー、1000分の1のオーダーです。そして、ここでの投影、D_FFは1000分の1のオーダー、10000分の1のオーダーです。
これで、Mixture of Expertsを配置するのに良い方法、良い場所であることを納得できましたか?はい?では、これが実際にどのように行われているかです。現代のLLMでは、次のトークン予測の計算に全員を関与させないというこのアイデアは、Feedforward Neural Networkが基本的にここにある場所にMixture of Expertsを配置するというものです。典型的にはSparse Mixture of Expertsを持つことになります。
質問に戻りますが、これらの専門家は実際にはFeedforward Neural Networkです。訓練できる複数のネットワークがありますが、1つだけを活性化します。典型的にkは1に等しくなります。2に等しくすることもできますが、サブセットのみです。それが私の言いたいことです。
6.2 トークンレベルでのルーティング
Afshin: このルーティングはトークンレベルで行われます。Decoderを覚えていると思いますが、基本的に入力として何かを受け取ります。複数のトークンです。ここで私が言っているのは、各トークンは、他のトークンとは異なる可能性のある専門家によって処理されるということです。
ここでのルーターは、トークンの表現を入力として受け取り、このトークンがどの専門家に流れるのが最適かを判断します。このアイデアは理解できますか?後で少し図解がありますので、それが役立つことを願っています。
では、モデルをどのように訓練するかという質問に戻りましょう。ルーターを別々に訓練しますか?専門家を別々に訓練しますか?人々が抱える1つの課題は、これらのMoEベースのモデルを訓練するとき、すべての専門家が重みを持っていること、使用されていることを確認することです。
なぜなら、モデルを訓練して、なぜか1つか2つの専門家だけが常に活性化されるということが十分にあり得るからです。そして他の専門家は、常に非アクティブです。計算に関与することはありません。
学生: 専門家がどこに行くかを誰が決めるのですか?
Afshin: すべてはゲートによって決定されます。これがその量です。すべてはゲートによって決定され、ゲートは訓練可能な重みを持っています。これを、入力xからn次元空間への投影と考えることができます。nは専門家の数です。
学生: 推論中のどの時点でそれが決定されるのですか?
Afshin: 推論時だとしましょう。どのように機能するか説明します。xがあります。このAttentionメカニズムがあります。Decoder-Onlyであることを考えると、過去のすべてのトークンと相互作用します。マスクのようなものです。ここに行きます。
Feedforward Neural Networkブロックの開始時、トークンはもちろん文脈化されています。これらの他のトークンからの情報を持っています。なぜなら、Attentionが行われているからです。そしてここに行きます。xはまずGに入ります。Gはすべての専門家にわたってこの確率分布を計算します。
ここではSparse MoE設定にいることを考えると、Top kのみを選択します。Top 1だとしましょう。最も高い確率だけです。そして、どの専門家がこれになるかわかります。その結果として、入力が選択された専門家の出力値のみを計算します。
学生: もう少し詳しく説明していただけますか?
Afshin: 正確にどの時点でかですか?Self-Attention層の後です。
学生: 異なるヘッドに対して異なる分類がありますか?
Afshin: いいえ。ルーターは1つだけです。質問を理解していると思います。質問は、ヘッドで並行して行われている異なるAttention計算があることを考えると、何をするかということですね。
Attention層を覚えていると思いますが、これらの異なるヘッドを持っています。しかし最終的に、各ヘッドからのすべての結果を連結し、D_modelスペースに再度投影します。
別の学生: 異なるGがありますか?
Afshin: 唯一言えることは、Gはレイヤー固有だということです。レイヤー固有です。訓練可能です。基本的にこれらすべての入力を処理する方法を学習します。質問に対して唯一言えることは、Gはレイヤー固有になるということです。Gは、最初のレイヤーに1つのG、2番目のレイヤーに別のG、というようになります。そしてそれが訓練されます。
時間を見ると、他に質問はありますか?大丈夫ですか?完璧です。
6.3 推論時のルーティングプロセス
Afshin: 推論時だとしましょう。どのように機能するか説明します。xがあります。このAttentionメカニズムがあります。Decoder-Onlyであることを考えると、過去のすべてのトークンと相互作用します。マスクのようなものです。ここに行きます。
Feedforward Neural Networkブロックの開始時、トークンはもちろん文脈化されています。これらの他のトークンからの情報を持っています。なぜなら、Attentionが行われているからです。そしてここに行きます。
xはまずGに入ります。Gはすべての専門家にわたってこの確率分布を計算します。ここではSparse MoE設定にいることを考えると、Top kのみを選択します。Top 1だとしましょう。最も高い確率だけです。そして、どの専門家がこれになるかわかります。その結果として、入力が選択された専門家の出力値のみを計算します。
学生: もう少し詳しく説明していただけますか?
Afshin: 正確にどの時点でかですか?Self-Attention層の後です。
学生: 異なるヘッドに対して異なる分類がありますか?
Afshin: いいえ。ルーターは1つだけです。質問を理解していると思います。質問は、ヘッドで並行して行われている異なるAttention計算があることを考えると、何をするかということですね。
Attention層を覚えていると思いますが、これらの異なるヘッドを持っています。しかし最終的に、各ヘッドからのすべての結果を連結し、D_modelスペースに再度投影します。
別の学生: 異なるGがありますか?
Afshin: 唯一言えることは、Gはレイヤー固有だということです。レイヤー固有です。訓練可能です。基本的にこれらすべての入力を処理する方法を学習します。質問に対して唯一言えることは、Gはレイヤー固有になるということです。Gは、最初のレイヤーに1つのG、2番目のレイヤーに別のG、というようになります。そしてそれが訓練されます。
時間を見ると、他に質問はありますか?大丈夫ですか?完璧です。
7. MoEの利点と実験結果
7.1 モデル容量の拡大
学生: MoEの数を増やすと、モデルパラメータの数が増えますか?
Afshin: 素晴らしい質問です。実際、これはMoEベースのモデルの背後にあるアイデアの1つです。推論時に大幅に多くの計算コストを負担することなく、モデルをスケールできるということです。容量を増やすことができます。人々が容量と言いますが、モデルの容量を増やすことができますが、制御された量のアクティブパラメータを維持します。アクティブパラメータとは、順伝播に使用されるパラメータです。
人々はそれを使用します。パラメータの数を増やすだけです。だからこそ、数千億パラメータのオーダーだったものよりもさらに大きなMoEベースのモデルがあるのです。兆単位のパラメータのオーダーさえあります。
例えば、ここで推奨する読み物の1つは、Switch Transformerです。これは1兆以上のパラメータにスケールアップしました。確かにもっと多いです。しかしそうは言っても、論文を読むと、これらのモデルは、彼らがSample Efficient(サンプル効率的)と呼ぶものであることもわかります。
より少ないパラメータ数のモデルと同じくらい良くなるまでの時間が短いのです。訓練時間の関数として訓練曲線を描くと、これらのモデルが典型的により多くのサンプル効率的であることがわかります。
学生: すべてがトレードオフですね。
Afshin: そうです。すべてがトレードオフです。まさにその通りです。
7.2 超大規模モデルの実現
学生: 各Attentionヘッドが専門家の数を持つのですか?
Afshin: 実際にはAttentionヘッドとは関係ありません。Attentionヘッドは、独立した何か別のものと考えることができます。専門家の数はそれとは独立しています。理解できますか?
学生: すべてのブロックが専門家の数を持つのですか?
Afshin: 答えはイエスです。典型的にそれらの重みは共有されません。実際に例を見ていきます。レイヤー1では専門家3番が選ばれたかもしれませんが、レイヤー2では専門家1番が選ばれる、というようなことが十分にあり得ます。すべて自由です。訓練可能です。
7.3 Sample Efficiency(サンプル効率)
Afshin: 例えば、ここで推奨する読み物の1つは、Switch Transformerです。これは1兆以上のパラメータにスケールアップしました。確かにもっと多いです。しかしそうは言っても、論文を読むと、これらのモデルは、彼らがSample Efficient(サンプル効率的)と呼ぶものであることもわかります。
より少ないパラメータ数のモデルと同じくらい良くなるまでの時間が短いのです。訓練時間の関数として訓練曲線を描くと、これらのモデルが典型的により多くのサンプル効率的であることがわかります。
学生: すべてがトレードオフですね。
Afshin: そうです。すべてがトレードオフです。まさにその通りです。
学生: 各Attentionヘッドが専門家の数を持つのですか?
Afshin: 実際にはAttentionヘッドとは関係ありません。Attentionヘッドは、独立した何か別のものと考えることができます。専門家の数はそれとは独立しています。理解できますか?
学生: すべてのブロックが専門家の数を持つのですか?
Afshin: 答えはイエスです。典型的にそれらの重みは共有されません。実際に例を見ていきます。レイヤー1では専門家3番が選ばれたかもしれませんが、レイヤー2では専門家1番が選ばれる、というようなことが十分にあり得ます。すべて自由です。訓練可能です。
7.4 Mistralチームの視覚化実験
Afshin: では、Mistralチームが論文の1つで示していたと思われる素晴らしいものをお見せしたいと思います。彼らがここで示していたのは、特定のテキストに対して、各トークンがどの専門家にルーティングされたかを示すことでした。
前に述べたように、専門家はレイヤーごとに異なります。ここではレイヤー0について、つまり特定の1つのレイヤーについてだと思います。おおよそ、これらのトークンが概ね均一な量の専門家を活用していることがわかります。見たくないのは、すべてのトークンが同じ色になることです。
しかし幸いなことに、そうではありません。これは、ルーティングがどのように行われているかを表現する1つの素晴らしい方法です。入力テキストを持ち、各トークンがどの専門家に行ったかを表現するだけです。
さて、今見たのは、現代のLLMがアーキテクチャを変更する1つの方法でした。モデルをスケールしたいが、1回の順伝播での計算複雑度を増やしたくないという事実を取り入れるためです。それをMoEで見てきました。
世の中には多くのMoEベースのLLMがあります。これで、LLMを持っていることを知った上で、焦点を当てていきます。心配しないでください。レスポンスがどのように生成されるかに焦点を当てていきます。
8. レスポンス生成とデコーディング戦略の基礎
8.1 次トークン予測の基本プロセス
Afshin: 現代のLLMについて話したとき、それらが行うことは、テキストを入力として受け取り、テキストを出力することだと言いました。典型的に、これらは次トークン予測のタスクです。トークンを入力します。例えば、Beginning of Sentence(文の始まり)があり、LLMを通過させると、次の単語、つまり次のトークンを生成します。Aとなり、次にAを取り、teddyに進みます。そしてteddy bear is、というように続きます。
しかし、これまで、次のトークンを正確にどのように選択するかについては、実際には掘り下げたことがありませんでした。今からやることは、次のトークンをどのように生成しているかを正確に見ることです。
ご存知のように、ここでのLLMは単なるDecoder-Onlyアーキテクチャです。ここにあるのは、入力がここにあり、出力がそこにあるDecoderです。少しの間、中間で起こっていることすべてがあると仮定しましょう。そして、このような出力確率を取得しているとします。
トークンまたはトークン列を入力として与えると、次のトークンがA、airplane、fluffyなどに等しくなる可能性をモデルが考える尤度を表す出力確率分布があります。これがあなたが持っているものです。
では、皆さんに質問です。入力としていくつかの系列があり、次のトークンを選択したいと言ったら、そしてモデルが実際に確率分布を出力していると言ったら、これに基づいて次のトークンをどのように選択しますか?
学生: 最大確率のトークンです。
Afshin: 素晴らしい。最大確率のトークンです。はい、最初のアイデアです。最も高い確率のトークンを取りましょう。これは非常に自然なアプローチです。しかし、ChatGPTやGeminiのようなものを使っているかどうかわかりませんが、何かを尋ねるたびに、常に少し異なる何かで応答します。
最も高い確率のトークンを常に選択する場合、ここでの計算は、これから見るように、すべて決定論的であることを考えると、これが意味することは、同じ入力に対して常に同じものを生成するということです。それが1つの制限です。あまり多様ではありません。
8.2 確率分布からのトークン選択
Afshin: 2番目の問題は、反復的に最も高い確率のトークンを選択する場合、局所的には最適ですが、必ずしも全体的に最適ではないということです。どういう意味でしょうか?考えてみてください。私たちの目的は、高い確率を持つ出力トークン列を生成することです。しかし問題は、常に最も高い確率のトークンを選択する場合、必ずしも最も高い確率の系列を得られるわけではないということです。
この主張を納得していますか?例を挙げましょう。次のトークンがあり、1つのトークンが0.8、もう1つが0.7だとします。そして0.8で進むことを選択します。いや、実際には0.7ではありません。なぜなら、合計が1にならなければならないからです。だから0.2としましょう。
0.8で始まる系列で進む場合、他のすべてのトークン確率が非常に低いとしましょう。基本的に、例えば、他の経路よりも低い確率を持つ出力系列を持つことになります。その他の経路は、後のステップでより高い確率予測を持つとしましょう。これについてはすぐに見ていきます。しかし、これがアイデアです。
最も高い予測確率を選択する場合、それは良い最初のアイデアです。しかし、局所的には最適ですが、必ずしも全体的には最適ではありません。これが、k個の最も確率の高い経路を追跡することについての2番目の方法がある理由です。Beam Searchについて聞いたことがある人はいますか?それがBeam Searchが行うことです。
ここでkは、Beam Size(ビームサイズ)またはBeam Width(ビーム幅)と呼ばれることがあります。これらの用語を聞いた場合、これらは追跡する経路の数に与えられた名前に過ぎません。
9. Greedy DecodingとBeam Search
9.1 Greedy Decoding(貪欲デコーディング)
Afshin: 最大確率のトークンです。はい、最初のアイデアです。最も高い確率のトークンを取りましょう。これは非常に自然なアプローチです。しかし、ChatGPTやGeminiのようなものを使っているかどうかわかりませんが、何かを尋ねるたびに、常に少し異なる何かで応答します。
最も高い確率のトークンを常に選択する場合、ここでの計算は、これから見るように、すべて決定論的であることを考えると、これが意味することは、同じ入力に対して常に同じものを生成するということです。それが1つの制限です。あまり多様ではありません。
9.2 局所最適と全体最適の問題
Afshin: 2番目の問題は、反復的に最も高い確率のトークンを選択する場合、局所的には最適ですが、必ずしも全体的に最適ではないということです。どういう意味でしょうか?考えてみてください。私たちの目的は、高い確率を持つ出力トークン列を生成することです。しかし問題は、常に最も高い確率のトークンを選択する場合、必ずしも最も高い確率の系列を得られるわけではないということです。
この主張を納得していますか?例を挙げましょう。次のトークンがあり、1つのトークンが0.8、もう1つが0.7だとします。そして0.8で進むことを選択します。いや、実際には0.7ではありません。なぜなら、合計が1にならなければならないからです。だから0.2としましょう。
0.8で始まる系列で進む場合、他のすべてのトークン確率が非常に低いとしましょう。基本的に、例えば、他の経路よりも低い確率を持つ出力系列を持つことになります。その他の経路は、後のステップでより高い確率予測を持つとしましょう。これについてはすぐに見ていきます。しかし、これがアイデアです。
最も高い予測確率を選択する場合、それは良い最初のアイデアです。しかし、局所的には最適ですが、必ずしも全体的には最適ではありません。
9.3 Beam Searchの導入
Afshin: これが、k個の最も確率の高い経路を追跡することについての2番目の方法がある理由です。Beam Searchについて聞いたことがある人はいますか?それがBeam Searchが行うことです。
ここでkは、Beam Size(ビームサイズ)またはBeam Width(ビーム幅)と呼ばれることがあります。これらの用語を聞いた場合、これらは追跡する経路の数に与えられた名前に過ぎません。
これがどのように機能するかを見ていきましょう。Beginning of Sentenceトークンから生成を開始するとしましょう。次のトークンが何かを把握したいと思います。ここに、この例では非常に基本的な例として3つのトークンがあるとしましょう。そして、最も確率の高い2つのトークンがAとtheだとしましょう。
k=2の場合、これら2つの分岐を追跡することになります。それが最初の反復です。2番目の反復では、これら2つのトークンに対する次トークン予測のすべての確率を見ます。そして、常に最も確率の高い2つの経路を保存します。
例えば、ここで、theの後にfluffyがあり、Aの後にcuteがあるとしましょう。前に言っていたことに戻りますが、最も高い確率のトークン経路に沿って進む経路、つまりtheを選択していた場合、その後の最も高い確率のトークンが、Aの後のものよりもはるかに低い確率である可能性が十分にあります。
これがBeam Searchが試みることです。より全体的に最適な解を持とうとします。
9.4 Beam Searchのプロセス
Afshin: それを続けるとしましょう。そして最終的には、いくつかの潜在的な選択肢、k個の潜在的な選択肢を得ます。そして、最も高い、つまり最も高い確率を持つ系列を選びます。
人々が典型的に行うことは、トークンの確率の対数の和を取ることです。彼らが言うのは、系列の対数確率は各次トークン予測の対数確率の和であるということです。つまり、BOSが与えられたときのAの対数確率、そしてBOSとAが与えられたときのcuteの対数確率、というように続きます。
しかし、このアプローチの1つの制限を指摘したいと思います。それは、トークンを生成すればするほど、最終的な系列確率が低くなるということです。考えてみてください。これらの確率はすべて0と1の間です。掛け算の意味で考えてください。
全体の系列の確率があるとしましょう。それは次のトークンの確率の掛け算に過ぎません。1未満の確率を追加すればするほど、この量は0に近づきます。このメソッドは、そのままでは、より短い系列を優先することになります。
そのため、Beam Searchには、その効果に対抗する追加の項があります。トークン数分の1の何乗かのオーダーのものです。実際には、物事が比較的うまく機能することを確認するための技術があります。
これらすべてを把握したとしましょう。問題は、この最も確率の高い経路を追跡する必要があるということです。このすべての保存などを行う必要があります。そして多くの計算が必要です。
9.5 Beam Searchの制限
Afshin: もう1つは、まだ最も確率の高い経路に興味を持っているということです。これは基本的に、モデルが非常に可能性が高いと考える系列につながります。しかし、時には出力がより多様であったり、より創造的であったりすることを望む場合があります。
だからこそ、Beam Searchは実際には人々が典型的に使用するものではありません。人々は機械翻訳のようなもののためにBeam Searchを使用します。そこでは、実際に非常に可能性が高いものに近い何かが必要です。
しかし実際には、人々は3番目の方法を使用します。この方法はSampling Method(サンプリング法)とも呼ばれます。次のトークンが何であるべきかについて、トークンに対する確率分布があると言いました。人々が行うことは、その確率分布を使用して次のトークンをサンプリングすることです。
これは理解できますか?この例では、fluffy、gentle、kind、そしてsmartは、例えばairplaneよりも高い確率で選ばれます。airplaneは発生確率が低いです。ゼロでない確率ですが、発生する確率はあります。
ここまでで何か質問はありますか?
学生: これは訓練用ではなく、推論用ですよね?
Afshin: そうです、正しいです。レスポンス生成と考えてください。訓練されたモデルがあるとしましょう。出力を生成したいです。何をしますか?
答えを完成させると、訓練中に行うことは、出力確率を気にして、実際のラベルと比較することです。ほとんどの場合、ハードラベルのようなものです。それが比較するものです。
これは、訓練されたLLMがあるとして、どのようにレスポンスを生成するかということです。大丈夫ですか?
10. サンプリングベースの手法
10.1 基本的なサンプリング
Afshin: しかし実際には、人々は3番目の方法を使用します。この方法はSampling Method(サンプリング法)とも呼ばれます。次のトークンが何であるべきかについて、トークンに対する確率分布があると言いました。人々が行うことは、その確率分布を使用して次のトークンをサンプリングすることです。
これは理解できますか?この例では、fluffy、gentle、kind、そしてsmartは、例えばairplaneよりも高い確率で選ばれます。airplaneは発生確率が低いです。ゼロでない確率ですが、発生する確率はあります。
ここまでで何か質問はありますか?
学生: これは訓練用ではなく、推論用ですよね?
Afshin: そうです、正しいです。レスポンス生成と考えてください。訓練されたモデルがあるとしましょう。出力を生成したいです。何をしますか?
答えを完成させると、訓練中に行うことは、出力確率を気にして、実際のラベルと比較することです。ほとんどの場合、ハードラベルのようなものです。それが比較するものです。
これは、訓練されたLLMがあるとして、どのようにレスポンスを生成するかということです。大丈夫ですか?
学生: この状況でサンプリングをどのように行うのですか?
Afshin: 実際、それは次のスライドです。しかし、直感についてだけ、全員が同じページにいることを確認したいと思います。最も高い確率はGreedy Decodingと呼ばれます。おそらく私たちが望むものではありません。
Beam Searchは少し良いです。より全体的に最適なものです。完全に全体最適ではありませんが、それに近いものです。だからより良いですが、多様性を欠いています。創造性を欠いています。だからこそ、実際に行いたいことは、各トークンをサンプリングすることです。
そして、サンプリングしたいトークンの種類を制限するいくつかの方法があります。なぜなら、これらの非常に低い確率のトークンは、理論的にはまだサンプリングされる可能性があると言ったからです。しかし、それは必ずしも私たちが望むものではありません。
10.2 訓練と推論の区別
学生: これは訓練用ではなく、推論用ですよね?
Afshin: そうです、正しいです。レスポンス生成と考えてください。訓練されたモデルがあるとしましょう。出力を生成したいです。何をしますか?
答えを完成させると、訓練中に行うことは、出力確率を気にして、実際のラベルと比較することです。ほとんどの場合、ハードラベルのようなものです。それが比較するものです。
これは、訓練されたLLMがあるとして、どのようにレスポンスを生成するかということです。大丈夫ですか?
学生: この状況でサンプリングをどのように行うのですか?
Afshin: 実際、それは次のスライドです。しかし、直感についてだけ、全員が同じページにいることを確認したいと思います。
10.3 サンプリング範囲の制限
Afshin: 最も高い確率はGreedy Decodingと呼ばれます。おそらく私たちが望むものではありません。Beam Searchは少し良いです。より全体的に最適なものです。完全に全体最適ではありませんが、それに近いものです。だからより良いですが、多様性を欠いています。創造性を欠いています。
だからこそ、実際に行いたいことは、各トークンをサンプリングすることです。そして、サンプリングしたいトークンの種類を制限するいくつかの方法があります。なぜなら、言及しましたが、これらの非常に低い確率のトークンは、理論的にはまだサンプリングされる可能性があります。しかし、それは必ずしも私たちが望むものではありません。
人々が典型的に行うことは、最も高い確率のトークンを制限し、それらからのみサンプリングすることです。この用語、Top-kサンプリングについて聞いたことがある人はいますか?少しいますね。
10.4 Top-kサンプリング
Afshin: この用語、Top-kサンプリングについて聞いたことがある人はいますか?少しいますね。行うことは、最も高い確率のk個のトークン、つまりTop k個の最も高い確率のトークンを選択し、それらからサンプリングすることです。
k=4の場合を考えましょう。最も高い確率の4つを取ります。そして、それらでサンプリングするだけです。
10.5 Top-pサンプリング(Nucleus Sampling)
Afshin: そして、アイデアが非常に似ている他のものがあります。Top-pと呼ばれます。Top-pは、累積確率が閾値pを超えるような最も高い確率のトークンに自分自身を制限するというものです。
再び、同じことを行います。最も高い確率のトークンを選択します。しかし、まだ省いた部分があります。それは、そもそもこれらの確率をどのように取得するかということです。
ここで言及したのは、確率があると仮定したということを覚えていると思います。ただ確率があり、次のトークンが何かを選択したいのです。しかし、今尋ねている質問は、これらの確率で何をするかを知った今、そもそもこれらの確率をどのように取得するかということです。
11. 温度パラメータと確率分布の制御
11.1 確率の計算方法
Afshin: Transformerベースのアーキテクチャを覚えていると思いますが、基本的に入力のエンコーダ表現を計算します。そして、図の一番上に最終層があり、それはベクトルを語彙の空間に投影することを目的としています。
なぜなら、行いたいことは、特定のトークンをサンプリングすることがどれくらい確率が高いかについて、確率の数値を持つことだからです。ここで行うことは、アーキテクチャの一番上で、入力、つまりトークンのエンコードされた埋め込みを持ち、Linear層を通過させることです。これは基本的にD_modelベクトルを次元vのサイズの空間に投影します。そしてもちろん、欲しいのは確率です。
Softmax層を持つことになります。これは基本的にすべてを確率に変換し、すべてが1に合計されるようにします。確率を計算するために、これが使用する式で、Softmax層です。
非常に重要なハイパーパラメータについてお話ししたいと思います。それは温度Tです。これが出現する場所です。次のトークンが特定の単語である確率は、その単語に関する入力の指数を温度で割ったものに等しくなります。そして、tで割った量の指数のすべての他の和でそれを正規化します。
これから、そのTが何のために使用されるか、あるいはそのTが実際に何をするかを見ていきます。それに入る前に、1つだけ質問です。レスポンス生成に関する温度について聞いたことがある人はいますか?いますね。
では、温度が出力予測にどのように影響するかについて、より良いアイデアが得られることを願っています。質問したいのは、低い温度と高い温度を持つことの影響は何でしょうか?低い温度は何の多様性に対応しますか?
11.2 Softmax関数と温度
Afshin: 非常に重要なハイパーパラメータについてお話ししたいと思います。それは温度Tです。これが出現する場所です。次のトークンが特定の単語である確率は、その単語に関する入力の指数を温度で割ったものに等しくなります。そして、tで割った量の指数のすべての他の和でそれを正規化します。
これから、そのTが何のために使用されるか、あるいはそのTが実際に何をするかを見ていきます。それに入る前に、1つだけ質問です。レスポンス生成に関する温度について聞いたことがある人はいますか?いますね。
では、温度が出力予測にどのように影響するかについて、より良いアイデアが得られることを願っています。質問したいのは、低い温度と高い温度を持つことの影響は何でしょうか?低い温度は何の多様性に対応しますか?
学生の応答があり、議論が続く
Afshin: すぐにそれについて説明します。低い温度は?温度を上げる?温度を下げることとそれが何をするかについての説明に戻りましょう。提案する答えはありますか?低い温度の場合、何が起こりますか?
長い話を短くすると、低い温度はスパイク分布を作り出し、高い温度は均一な分布を作り出します。正しい直感を持っていたと思います。もう少し数学的な用語で書いてみましょう。
11.3 低温度の数学的分析
Afshin: 確率があるとしましょう。それはexp(x_i/T)を、exp(x_j/T)の和で割ったものです。数学的に、ここで何が起こっているかを実際に証明できます。最も高いx_iのインデックスがあるとしましょう。それをkと呼びましょう。
私が行うことを仮定しましょう。この量で因数分解します。実際、ここにはスペースがありません。ここでやりましょう。exp(x_k/temperature)となります。そして、ここではすべてのjについてのexp(x_j/T - x_k/T)の和があります。
私が行ったことは、分子と分母にexp(x_k/T)を掛けただけです。分子と分母を掛けました。もちろん、それらは相殺されます。しかし、ここに持っているのはx_i - x_k/Tです。そして、ここではx_j - x_k/Tです。
i=kの場合、この項は0です。温度に関係なく、正確に0です。そして、ここでx_j - x_kは常に負またはゼロです。ここで、i=kの場合、0/Tがあります。ここでは1です。そして、1プラス何らかの量があります。x_j - x_k/Tで、これは負になります。
Tがゼロに近づきます。それは、マイナス無限大に近づきます。マイナス無限大の指数は0です。最終的に得られるのは、i=kの場合、ゼロでない確率を持つことです。しかし、i≠kの場合、0を0でない何かで割ったものを持つことになり、それは0です。
数学的に、exp(x_k/T)で因数分解すると、kが最も高い値、つまり最も高いロジットまたは最も高い活性化ベクトルのインデックスである場合、小さな温度に対して、最も高い値のインデックスのみがスパイクを伴って最も高い確率になることを実際に示すことができます。
11.4 高温度の数学的分析
Afshin: そして、高い温度を持つ場合、基本的に均一な分布のように見えます。なぜなら、これらすべての量、Tがプラス無限大に近づくとき、これは0に近づきます。0の指数はeです。すみません、eではなく、1です。1です。
つまり、1をjの数で割ったものです。1です。語彙のすべてのトークンにわたる均一な分布です。
学生: 小さい温度をガウス分布として解釈できますか?
Afshin: 質問は、小さい温度をガウス分布として解釈できるかということだと思います。ちょっと難しいです。なぜなら、ガウス分布では、x軸に連続的な量があるからです。ここでは、トークンがあります。離散的です。そして、順序付けできるものではありません。
おそらく、小さい温度は非常にスパイクであると解釈します。特定のトークンのセットが最も高い確率であり、より多く出現します。そして、高い温度を持つ場合、基本的に、最も高い確率であるはずではなかったトークンでさえ、実際に調整された確率がより高くなります。ある種のスケーリングとして考えることができます。
11.5 温度の実用的影響
Afshin: 要するに、お伝えしたいことは、小さい温度を持つ場合、次のトークンが最も高い確率のトークンに向かうことを促進するということです。そして、高い温度を持つ場合、確率の分布は、温度を本当に大幅に上げると、均一に近くなります。出力はより創造的になります。通常は選ばなかったであろうトークンが選ばれることになります。
実際にこれが何を意味するかというと、お気に入りのLLMを使っているとします。非常に創造的な何かを書きたいとしましょう。低い温度を使いますか、それとも高い温度を使いますか?
学生: 高い温度?
Afshin: そうです。より決定論的なもの、非常に高品質だと思うものにより近いものが欲しい場合は、より低い温度を使用します。
ここで1つ注意したいことがあります。厳密に正の温度を持つ場合、入力に対してモデルを実行するたびに、異なる出力を得ることになります。指摘したいことは、Transformerアーキテクチャには確率的なものは何もないということです。すべて決定論的です。
決定論的でない唯一のものは、次のトークンをサンプリングする方法です。決定論的でないのはそれだけです。では、決定論的な出力を得るには何をしますか?T=0にします。T=0の場合、出力が1つだけであることが確実にわかります。それ以外はありません。まあ、それが理論的な性質です。
しかし実際には、計算で起こっていることがあり、非決定論的な操作を導入します。これはこのクラスの範囲をはるかに超えています。このクラスの範囲をはるかに超えています。ただ指摘したいのは、実際には、T=0は、この種の実用的な部分のために、異なる結果につながる可能性があるということです。
11.6 決定論性と非決定論性
Afshin: ここで1つ注意したいことがあります。厳密に正の温度を持つ場合、入力に対してモデルを実行するたびに、異なる出力を得ることになります。指摘したいことは、Transformerアーキテクチャには確率的なものは何もないということです。すべて決定論的です。
決定論的でない唯一のものは、次のトークンをサンプリングする方法です。決定論的でないのはそれだけです。では、決定論的な出力を得るには何をしますか?T=0にします。T=0の場合、出力が1つだけであることが確実にわかります。それ以外はありません。まあ、それが理論的な性質です。
しかし実際には、計算で起こっていることがあり、非決定論的な操作を導入します。これはこのクラスの範囲をはるかに超えています。このクラスの範囲をはるかに超えています。ただ指摘したいのは、実際には、T=0は、この種の実用的な部分のために、異なる結果につながる可能性があるということです。
推奨することがあります。完全にオプションですが、興味がある場合の推奨読み物があります。LM推論における非決定論を打ち負かすことに関する非常に最近の記事があります。興味がある場合は、読むことをお勧めします。
高レベルのアイデアは、私たちのGPU、私たちのハードウェアが、これらの操作のいくつかを削減するとき、時には本当に異なるスケールの数値を削減しているということです。これらの操作が起こる順序は、実際には非常に重要です。
アイデアは、これらの操作が異なる順序で起こる場合、異なる結果につながる可能性があるということです。理論的には正確に同じであるべきでも、実際には同じではないかもしれません。この記事は、直感を説明する素晴らしい仕事をしています。興味があれば、完全にオプションです。
12. Guided Decoding(誘導デコーディング)
12.1 構造化出力生成の課題
Afshin: 少し遅れていることはわかっていますが、最後に言いたいことがあります。非常に特定のフォーマットで出力を生成したいとしましょう。JSON形式だとしましょう。
非常にナイーブなアプローチは、LLMに「JSONで生成してください」と伝えることです。そして、何かを生成します。そして、それが有効なJSONかどうかを確認しようとします。そうでない場合は、繰り返します。うまくいくまで再度生成するよう伝えるだけです。それが最初のナイーブなアプローチです。
12.2 Guided Decodingの手法
Afshin: しかし、Guided Decoding(誘導デコーディング)と呼ばれる2番目のアプローチがあります。それが行うことは、生成プロセス中に、無効な次トークンと呼ばれるものをフィルタリングすることです。
ここで、このJSONを生成したいとしましょう。最初のトークンは、これを開くものでなければならないことが確実にわかります。英語の単語を忘れましたが、括弧を開くだけです。
学生: 括弧を開く。
Afshin: そうです。括弧を開く。これだけを持つことができ、次にプロパティ名だけを持つことができます、というように続きます。そして時には、許可される次トークンが複数ある場合があります。その場合、次トークン戦略に戻ります。
12.3 実装技術
学生: 他のトークンをどのように制限するのですか?
Afshin: それについて詳しく説明する論文がたくさんあります。ここではカバーしません。しかし、いくつかの指針を与えることができます。Finite State Machine、FSM、Context-Free Grammarとタイプするだけです。それを行う論文がたくさんあります。ここではそれをカバーしません。
それで、これで、Shervinと第2部に移ります。
13. プロンプティング戦略の基礎
13.1 コンテキスト長の概念
Shervin: ありがとう、Afshin。では、一緒に異なるプロンプティング戦略を見ていきましょう。レスポンスがどのように生成されるかを見てきましたので、レスポンスを得る方法と、素晴らしいレスポンスを得る方法を見ていきます。
お気に入りの例、かわいいテディベアについて戻りましょう。語彙を1つ紹介したいと思います。何らかの入力があるとき、入力の長さをトークン数で測定します。文献では、これが異なる名前を持つことができることがわかります。Context Length(コンテキスト長)、Context Size(コンテキストサイズ)、Window Size(ウィンドウサイズ)と呼ばれることがあります。
最新のツール、Cursorやその他のコード支援ツールでコーディングする場合、より多くContext Lengthと呼ばれていると思いますが、これらすべての用語は同等で、同じことを示しています。
では、ここでのオーダーの大きさについて議論する時間を取りたいと思います。現代のLLMは、数万、数十万、または数百万の入力トークンを入力として受け取る傾向があります。これが受け取ることができる入力の種類です。時々、新しいLLMがいくつかの数値を宣伝するのを聞くことがあります。そのコンテキスト長の数値はまさにそれです。つまり、単一のパスでどれだけのトークンを収容できるかということです。
13.2 現代LLMのコンテキスト長
Shervin: では、ここでのオーダーの大きさについて議論する時間を取りたいと思います。現代のLLMは、数万、数十万、または数百万の入力トークンを入力として受け取る傾向があります。これが受け取ることができる入力の種類です。
時々、新しいLLMがいくつかの数値を宣伝するのを聞くことがあります。そのコンテキスト長の数値はまさにそれです。つまり、単一のパスでどれだけのトークンを収容できるかということです。
素晴らしい。そして、これらのモデルの広告を見たことがあるかもしれません。Geminiや他のモデルで、百万の領域にあるものがあると思います。それは、すべてが素晴らしくきれいだということを意味するのでしょうか?より多くのコンテキスト長があれば、すべてを解決するのでしょうか?実際にはそうではありません。
13.3 コンテキスト腐敗(Context Rot)現象
Shervin: 今年の夏初めの論文でContext Rot(コンテキスト腐敗)と名付けられた現象があります。基本的に、著者たちはNeedle in Haystack(干し草の中の針)と呼ばれるテストで、情報の一部を取得するモデルの能力を実験しています。
基本的に、彼らは何らかの質問をします。そして、より大きく、より大きいテキストの中に答えを埋めます。そして、その答えを表面化するモデルの能力を見ようとします。
そして、コンテキスト長の増加に対して、コンテキスト内にある答えで情報を根拠付ける能力が低下することがわかります。論文は非常に興味深いものだと思います。コンテキスト内に他に何があるかに関して制御しています。
ディストラクター(気を散らすもの)という用語があり、ノイズを入れて、ディストラクターが基本的に検索能力の低下に寄与していることを確認します。つまり、コンテキスト内にあるものも重要です。このため、一般的に、検索問題があり、それを解決するためにLLMを使用したい場合、LLMが見て予測するための適切なコンテキストの部分をできるだけターゲットにすることに良いインセンティブがあります。
13.4 Self-Attentionとの関係
学生: コンテキスト長は、Self-Attentionで表示されるものと正確に同じですか?
Shervin: そうです。そして、前回見たと思いますが、Self-Attentionメカニズムの複雑度がn²にならないために使用されるトリックがある場合があります。
これが、コンテキスト長が増加するにつれて、基本的に計算の複雑度を管理するために使用されているものです。しかし、それについて素晴らしい指摘です。それはまさにそれについてのことです。
何か質問はありますか?他に質問はありますか?では、プロンプトが通常どのように見えるかを定義しましょう。
14. プロンプトの構造化
14.1 プロンプト構造の4要素
Shervin: 特定のプロンプトをどのように構造化するかについての正式な理論はありません。しかし、これらはモデルに提示されるプロンプトで通常見られる主な要素です。
コンテキストを設定する部分を区別できます。そこでは、設定を置き、モデルに対して、発行したいクエリの種類を明確にします。次に、モデルに実行させたいタスクがある場合、指示があります。そして、これらの指示は、入力として何かを受け取る関数のようなものです。だから、入力を追加します。
そして、モデルのレスポンスから欲しいものを得るために、いくつかの制約を追加したいかもしれません。ここでは、テディベアのお気に入りの例を取りました。コンテキストは、テディベアの気分は何か、基本的に、テディベアの気分は何か、テディベアを幸せにするために何をしたいのかです。そして、生成したい物語がどこにあるかについて、入力を与えます。
そして、いくつかの制約を与えます。毎日クエリするLLMで他の例が欲しい場合、コンテキストは「あなたはChatGPTです。10月10日です。午後4時44分です」のような文である可能性があります。設定をセットアップします。指示は基本的に、入力と一緒にユーザーがクエリするものです。
そして、制約はユーザーとしては見えないかもしれませんが、LLMに与えられるプロンプトに存在する可能性のあるものです。安全指示のようなものです。例えば、危害につながる可能性のあるコンテンツを生成しないでください、というようなものです。
LLMに供給される入力を見るたびに、これらの投影、これら4つの次元は、どの部分がその構造内のどの目標に対応するかを見るための良いメンタルモデルになると思います。理解できますか?素晴らしい。
14.2 Teddy Bearの例での適用
Shervin: ここでは、テディベアのお気に入りの例を取りました。コンテキストは、テディベアの気分は何か、基本的に、テディベアの気分は何か、テディベアを幸せにするために何をしたいのかです。そして、生成したい物語がどこにあるかについて、入力を与えます。そして、いくつかの制約を与えます。
14.3 日常的なLLMでの例
Shervin: 毎日クエリするLLMで他の例が欲しい場合、コンテキストは「あなたはChatGPTです。10月10日です。午後4時44分です」のような文である可能性があります。設定をセットアップします。
指示は基本的に、入力と一緒にユーザーがクエリするものです。そして、制約はユーザーとしては見えないかもしれませんが、LLMに与えられるプロンプトに存在する可能性のあるものです。安全指示のようなものです。例えば、危害につながる可能性のあるコンテンツを生成しないでください、というようなものです。
14.4 メンタルモデルとしての4要素
Shervin: LLMに供給される入力を見るたびに、これらの投影、これら4つの次元は、どの部分がその構造内のどの目標に対応するかを見るための良いメンタルモデルになると思います。理解できますか?素晴らしい。
では、LLMに私たちが望むことをさせる方法を見ていきましょう。そして、重みを調整せずにLLMに私たちが望むことをさせる方法を見ていきます。In-Context Learning(文脈内学習)と呼ばれる概念でそれを行うことができます。学習という用語は少しオーバーロードされています。なぜなら、LLMの重みに関しては実際には何も学習していないからです。しかし、望むことを行うために、コンテキストの一部として、その中にいくつかの知識を蒸留することができます。
15. In-Context Learning(文脈内学習)
15.1 In-Context Learningの定義
Shervin: では、LLMに私たちが望むことをさせる方法を見ていきましょう。そして、重みを調整せずにLLMに私たちが望むことをさせる方法を見ていきます。In-Context Learning(文脈内学習)と呼ばれる概念でそれを行うことができます。
学習という用語は少しオーバーロードされています。なぜなら、LLMの重みに関しては実際には何も学習していないからです。しかし、望むことを行うために、コンテキストの一部として、その中にいくつかの知識を蒸留することができます。
15.2 Zero-Shot学習
Shervin: In-Context Learningの2つの主要なカテゴリを区別します。1つのカテゴリは、マインドセットにおいて非常にシンプルです。Zero-Shotと呼ばれます。基本的に、入力クエリ以外には何も与えません。LLMに望むことをするよう依頼するだけです。
15.3 Few-Shot学習
Shervin: そして、Few-Shot Learningと呼ばれる別の考え方があります。そこでは、興味のある入力を尋ねる前に、LLMに入力と出力の例を与えます。
テディベアと就寝時の物語のケースでは、テディベアに名前を付けるかもしれません。Teddyと呼ばれるテディベアがいるかもしれません。そして物語を生成しました。クエリを置き、生成したい物語を置き、複数のそのような例を与えます。
そして、Bobと呼ばれる別のテディベアがいるとしましょう。そして、Bobの物語を生成したいとします。これらすべての例を置き、興味のある物語を生成するようLLMに依頼します。そして、これが基本的に私たちがFew-Shots設定と呼ぶものです。
15.4 一般的な性能比較
Shervin: では、一般的に、結果として得られるタスクのパフォーマンスを見ると、例を与えることは、興味のあるタスクにLLMをうまく誘導する傾向があります。探しているもののアイデアをモデルに与えたからです。
そして、訓練プロセス中に学んだことを使用して、点と点をつなぎ、基本的に複製することができます。しかし、もちろん、そのような例を集める必要があります。これはコストがかかります。これはコンテキストウィンドウにより多くのトークンを入れることになります。だから、より多くの計算が必要です。
15.5 Few-Shotのコスト
Shervin: しかし、もちろん、そのような例を集める必要があります。これはコストがかかります。これはコンテキストウィンドウにより多くのトークンを入れることになります。だから、より多くの計算が必要です。
15.6 最近のモデルでの興味深いトレードオフ
Shervin: しかし、最近のモデルで見られる興味深いトレードオフがあります。それらはますます多くの推論能力を獲得しているため、ここで一般的にというニュアンスをイタリック体にしました。
一般的にはFew-Shotの方が優れていますが、常にそうとは限りません。なぜなら、最近では、これらのより良いモデルで、基本的に指示をより良くすることで、In-Context Learningのパフォーマンスを、例を提供した場合と同等、あるいはそれ以上にできることが見られているからです。
基本的に、考えてみると、例を提供するとき、有限である特定の例のセットにモデルを制約します。だから、推論時に、見られていないデータの分布でタスクを実行したいとき、汎化するのが難しくなります。なぜなら、コンテキストで見たものに合わせようとするからです。
一方、指示をより推論ベースのものに変換し、自然言語でタスクの実行方法を説明すると、実際にそれを行うためにその推論能力を使用できます。これは、最近ますます見られるものです。これに関する文献は、まだ進行中だと思いますが、最近出てきたPlan and Solveのような論文があります。
LLMに自分で計画してから何かを解決するよう依頼すると、非常に良好なパフォーマンスが得られることを示しています。これは興味深い事実です。
16. Chain-of-Thought(思考の連鎖)
16.1 Chain-of-Thoughtの基本概念
Shervin: では、基本的に持っている学習の種類を見てきましたので、レスポンスの質を向上させるために何ができるかを見ていきます。Chain-of-Thought(思考の連鎖)と呼ばれる概念があります。研究者たちは、実際に答えを与える前に、何らかの答えに対する理論的根拠を考え出すようモデルに強制すると、より高いパフォーマンスが得られることを発見しました。
これが人々がChain-of-Thoughtと呼ぶものです。基本的に、答えに至ったものです。
16.2 具体例:テディベアの年齢
Shervin: 例えば、ここで、このテディベアは何歳ですか?と自問する場合、数値で直接応答するようモデルに強制すると、テディベアが特定の年齢である理由についての接続ができないかもしれません。
一方、完全な推論の連鎖を与えると、そのレスポンスに至ったものが明確になります。これがこの技術の背後にある主なマインドセットだと思います。
16.3 In-Context LearningでのCoTの使用
Shervin: 基本的に、これはIn-Context Learningで使用できるものです。Few-Shotの例を与える場合、「このテディベアは何歳でしたか?」といった例を与え、数値を与えます。そして、クエリをわずかに変更します。
そして、推論のフォーマット、そしてレスポンスに基づいて、LLMは推論とレスポンスをそれに応じて調整できます。そして、レスポンスと一緒に推論を出力するようモデルに強制します。これは基本的にメトリクスでの改善を示します。
16.4 デバッグ能力への応用
Shervin: そして、他に言いたいことがあります。タスクを実行したいとして、それをうまくやりたいとします。常にうまくいかないサンプルがあります。そして、それらに対してデバッグ能力が欲しいです。
通常、LLMでデバッグするとき、昔のようにデバッグしません。重みやLLMの内部を見ません。欲しいのは、トークンの観点から、より解釈可能なものがそこから出てくることです。
通常、これらの技術を使用すると、特定のレスポンスを出力する前にモデルが持っていた推論を見ることができます。そして、基本的に何が間違っていたかをデバッグできます。
「来年クマは何歳になりますか?」と尋ねて、Chain-of-Thoughtで「2019年です」と言う場合、コンテキストのどこかで、ああ、もしかしたら間違った日付を入れたかもしれないとわかります。だから、遡ることができます。根本原因分析を非常に簡単に行うことができます。これもそのために使用されます。
16.6 トレードオフ
Shervin: そして、まさに、トークン数を増やす他の技術と同じように、これは管理しなければならないトレードオフです。もちろん、より多くのトークンを生成する必要があるため、推論により多くの時間がかかります。しかし、典型的には、私たちはそれで問題ありません。
CoTについて何か質問はありますか?素晴らしい。では、さらに一歩進めましょう。
17. Self-Consistency(自己整合性)
17.1 CoTをさらに強化する方法
Shervin: CoTをさらに強化するために、モデルを複数回サンプリングすることができます。生成された答えを見て、そして、特定のLLMによって最も多く予測された答えを選択するために多数決投票を行います。
これが私たちがSelf-Consistency(自己整合性)と呼ぶもので、基本的に、レスポンスを複数回サンプリングし、実際の答えを解析します。基本的に、推論全体を因数分解し、答えをターゲットにしようとします。そして、多数決投票によって、より堅牢な方法で答えに到達することができます。
17.2ベンチマークとの関係
学生: より良いかどうかを知るためのベンチマークが必要ですか?
Shervin: そうです、絶対に必要です。論文は、すべての算術および数学ベースのベンチマークの上で動作していると思います。
そして、あなたの質問に接線的な質問の1つは、どのように答えを特定し、それに対して多数決投票を測定できるかということです。典型的には、コンテキストに「実際の答えを最後に置いてください」という指示を入れることができます。そうすれば、最後の部分を抽出するだけです。
人々は、それ以外では正規表現ベースの技術を使用していると思います。答えを抽出するために別のLLMを使用することさえ考えられます。だから、常に方法はあります。しかし、あなたの指摘の通り、はい、これが実際により良いことを確認するためには、ベンチマークと正解ラベルが必要です。
17.3 サンプリングの実装
学生: 同じリクエストとして送信されるのですか?
Shervin: 典型的には、並列でサンプリングします。基本的に、Afshinがちょうど言及したことを正確に行います。BOSと持っているトークンの確率分布から、次のトークンをサンプリングします。そして、それを他のいくつかのブランチで行います。そして、すべてを並列で行います。そして、最後にそれの答えを解析します。
基本的に、このプロセスのレイテンシは、並列生成の最大レイテンシにほぼ等しいです。なぜなら、これらすべてを並列で行うことができるからです。これらはどれもお互いのコンテキストに入りません。すべて並列で行われます。そして、最終的な答えを得ます。
大丈夫ですか?素晴らしい。では、いくつかのプロンプティング技術を見てきましたので、一緒に、推論時に人々が考え出したトリックをカバーしたいと思います。生成をできるだけ効率的にするためのものです。
18. 推論最適化の概要とKVキャッシュ
18.1 推論最適化の2つのカテゴリ
Shervin: 基本的に、現代のモデルでは多くのパラメータがあります。多くのトークンを生成したいです。最も効率的に可能な方法でそれをどのように行いますか?
この思考プロセスを2つの部分に分けたいと思います。厳密(Exact)なレベルで効率の向上をもたらす方法を見ていきます。つまり、実行すべきだったのとまったく同じ計算を行いますが、より効率的な方法で行います。探求する技術の種類についてのヒントをいくつか置きました。
冗長性を避ける技術を探してみましょう。メモリを最良の方法で管理するために何ができるか見てみましょう。そして、LLM内の方程式を、実際の生成を簡素化できる方法で再定式化できるかどうか見てみましょう。
次に、探求する2番目のカテゴリもあります。それは、どのような種類の近似を行うことが許容されるか、そしてより少ないコストで高品質な答えを得ることに焦点を当てますが、近似的になります。
アーキテクチャでどのような変更ができるでしょうか?埋め込みをより効率的にするために何かできることはありますか?そして、トークン予測側で、より速くするために何かできることはありますか?良さそうですか?約22分あります。ここですべてを通過しようとします。
18.2 技術の分類
Shervin: 技術のカテゴリを厳密な技術と近似的な技術にグループ化しました。しかし実際には、グループ化された方法でそれらを見ていきます。まず、Attention層を見て、そこでどのような技術が持てるかを見ます。そして、2番目の部分では、Output層を見ます。
そして、できるだけ良くするために、トークン生成のレベルで何ができるかを見ます。Attentionレベルから始めましょう。
18.3 Attention層での最適化の開始
Shervin: すべてのトークンに対して、このMasked Self-Attentionで現在のトークンが前のトークンにAttentionする必要があることを見てきました。
シーケンスを生成するとしましょう。特定のトークンにいます。「a cute teddy bear」を生成したとしましょう。そして今、「is」にいます。今、クエリ「is」を持っています。「is」のKey表現とValue表現を計算します。もちろん、それを行わなければなりません。これは現在のトークンです。
しかし、前のトークンのKey表現を計算するために行った過去の計算と、前のトークンのValue表現を再利用する方法を持ちたいです。これは目標として理解できますか?全員同意しますか?
より正確には、基本的に、KeyとValue行列を保存する方法を見つけたいです。Query部分にはアンダーラインを引いていません。なぜなら、もちろん、前のトークンに対応するQueryは現在のトークンにとって興味の対象にならないからです。KeyとValueの部分です。
18.4 KVキャッシュの概念
Shervin: KVキャッシュと呼ばれる概念があります。目標は、このKeyとValue行列をどこかに保存し、キャッシュから直接再利用することです。ここで言及したことは、特定のトークンを計算したいとき、再度計算する代わりに、キャッシュから直接KeyとValueを再利用するということです。これは基本的に、ここで言及したことの表現です。理解できますか?素晴らしい。
学生: 訓練中にKVキャッシングを行いますか?
Shervin: 訓練中には、Teacher Forcingという概念があります。そこでは、すべての入力を置いて、一度にすべてを通過させます。だから、このKVキャッシングの概念は出てきません。しかし、素晴らしい質問です。
学生: これすべてのポイントは何ですか?
Shervin: すでに行われた計算を再利用したいだけです。そして、あなたの答えはイエスです。まさにその通りです。他に質問はありますか?素晴らしい。
19. Group Query AttentionとPagedAttention
19.1 キャッシュ量の削減
Shervin: では、これらの量をキャッシュできることを見たので、他に何ができるでしょうか?先週の講義から再利用できるものはありませんか?KeyとValueのキャッシュ量を減らすような何かです。使える技術はありますか?
学生: Sparse Attention。
Shervin: そうかもしれません。しかし、ここではそうではありません。全員にAttentionしていて、KeyとValueの数に焦点を当てているとしましょう。この数を減らす方法はありますか?
振り返ると、ここで、私はMulti-Head Attentionのコンテキストで操作しています。つまり、h個のヘッドがあります。h個のQuery投影、h個のKey投影、h個のValue投影があります。この数を減らすために、先週から再利用できる技術はありませんか?
学生: Group Query Attention。
Shervin: そうです。まさにそうです。KeyとValueをグループ化する概念がありました。基本的な定式化はGroup Query Attentionと呼ばれ、これらをグループ化します。そして、極端な値hと1は、それぞれFull Multi-Head AttentionとMulti Query Attentionを示します。
現代のLLMでは、多くの論文が、適切な値でのグループを持つGQAを使用しています。これもできることです。
19.2 PagedAttentionの動機
Shervin: では、ハードウェア側に少し入っていきます。推論時に、これらすべての値のキャッシュをナイーブな方法で保存するとしたらどうでしょうか。複数のユーザーからクエリを受け取るとしましょう。私は推論サーバーだとします。クエリ1とクエリ2を受け取ります。
KeyとValue行列を保存するナイーブな方法は、コンテキスト長全体に対応するメモリの一部を最初に予約することです。なぜなら、どこで停止するかわからないからです。EOSトークンに達するまでデコードしています。だから、予約される可能性のある最大コンテキスト長のサイズのこのブロック全体を持つことになります。1つの観察は、これが多くの無駄につながるということです。
コンテキスト長がサイズ2kの場合、特定のリクエストに2kを予約し、そこにも2kがあります。任意の時点で、より多くのリクエストを取得したい、より多くのリクエストを提供したいとします。メモリは非常に速く、これらの制約やこの課題に対応するのに十分なスペースがなくなります。この制約や課題は理解できますか?
19.3 PagedAttentionの論文
Shervin: PagedAttentionと呼ばれる論文があります。それはいくつかの量を定義します。Reserved(予約)、Internal Fragmentation(内部断片化)、External Fragmentation(外部断片化)があります。
Internal Fragmentationは、基本的にリクエストを完了するためにモデルによって予約されているスペースです。Reserved Spotは、実際に使用されたトークンに対応するサブセットです。これは実際に使用されるスペースの種類です。Internal Fragmentationには何もありませんが、予約されていました。
External Fragmentationは、メモリ管理システムが必ずしも1つのブロックを次々に配置するのではなく、メモリブロックを割り当てる独自の方法を持っているということです。だから、他のギャップを残す可能性があります。
19.4 PagedAttentionのシステム
Shervin: そして、彼らはPagedAttentionと呼ばれるシステムを考え出しました。これは、vLLMと呼ばれる1つの推論パッケージを支えています。これは、固定サイズのブロックによって生成プロセスをマッピングすることで、この問題を解決します。リクエストに答えるためにメモリ全体の一部を割り当てる代わりに、より小さなチャンクに分割します。論文では16のような値を取っていると思います。
ご覧の通り、生成プロセス中にいて、特定の行を使用した場合、それ以上のスペースを無駄にすることなく、別の行の使用を開始します。そして、トークン位置インデックスを基本的にそれらのキャッシュ値にマッピングする辞書があります。管理のスマートな方法があります。そして、断片化をかなり削減することを示しています。
20. Multi-Latent Attention(MLA)
20.1 KVキャッシュの別のアプローチ
Shervin: では、このKVキャッシュで別のことをやりましょう。トークンの内部表現があり、それをQuery、Key、Valueに投影することを見てきました。そして、KeyとValueは実際に無視できない次元のものです。そして、各Transformerブロックで各コピーを保存する必要があります。
だから、追跡する必要がある多くのベクトルがあります。そして、その表現をどうにかしてよりコンパクトにする方法はありますか?これはDeepSeekがMulti-Latent Attentionと呼ばれる概念で取り組もうとしたトピックです。バニラのケースを見てみましょう。
20.2 DeepSeekの取り組み
Shervin: Multi-Head Attentionの場合、トークンの特定の表現に対して、それをKeyに変換するh個の投影行列があります。全員同意しますか?Self-Attention式の種類では、KeyのためのW_kという投影行列があり、トークン表現をKeyに投影します。そして、h個のヘッドがあります。
h個のそのような投影があり、キャッシュに保存する必要があるh個の結果埋め込みがあります。Keyに対してそれを持ち、Valueに対してそれを持ちます。保存するベクトルが多いです。そして、これらのKeyとValueも非常に長いです。より小さくできるか見てみましょう。
20.3 Multi-Latent Attentionの戦略
Shervin: Multi-Latent Attentionが行うことは、これらの投影行列を、Keyのスペースよりも低次元の中間スペースに因数分解することです。次元を削減する最初の変換があり、それを展開する別のものがあります。これが、表現をよりコンパクトにするために行った最初の操作です。
しかし、彼らは非常に賢い別のことをしました。圧縮行列をKeyとValue間で共有できると言ったのです。つまり、特定のトークン表現に対して、KeyとValueのために保存する必要があるキャッシュは同じです。
そして、展開部分には異なる行列を持ち、KeyとValueの異なる表現を実際に学習します。しかし、ここでの1つの簡素化は、KeyとValue間で共有することでした。さらに良いことに、h個のヘッド間で共有します。だから、h個のそのような埋め込みの代わりに、1つだけを持ちます。
そして、Keyに対してそれを行います。Valueに対してそれを行います。だから、最終的に、すべてのTransformerブロックに対して、トークンごとに単一の表現を持ちます。理解できますか?
20.4 実験結果
Shervin: 保存するものが少ないだけではありません。DeepSeek V2論文は、これを行うことの正則化の結果であると考えられる性能向上も示しました。だから、KeyとValue間で共有される、より有用な表現を学習します。だから、ハードウェアベースだけでない性能上の利点もあるようです。
学生: 低ランク次元を調整しますか?
Shervin: 次元自体は設計の選択です。固定されています。質問は、全員で同じ低次元かということです。次元サイズは固定で、全員で同じです。思いますが、設計の選択です。異なるものを持つこともできますが、実際には同じものかもしれません。
他に質問はありますか?素晴らしい。では、10分未満です。出力トークンレベルで動作する技術をカバーしていきます。
21. Speculative Decoding(投機的デコーディング)
21.1 出力トークンレベルでの技術
Shervin: では、10分未満です。出力トークンレベルで動作する技術をカバーしていきます。そして、Speculative Decodingと呼ばれる概念から始めます。
これは非常に興味深い方法で、より大きなモデルの生成を支援するためにいくつかの小さなモデルを使用し、出力分布をターゲットのものと一致させるスキームを使用します。小さなモデルを使用して物事を生成するトリックの組み合わせを使用し、大きなモデルのものに見える分布を得ることを確実にするために数学的特性に基づいてゲートします。
21.2 Speculative Decodingの基本アイデア
Shervin: これが講義のマインドセットです。テディベアのお気に入りの例に戻りましょう。小さなモデル、論文がDraftと呼ぶものに、次の単語を生成するよう依頼します。「my teddy bear」があります。次の単語は何でしょうか?1回のパスがあります。トークン「is」を見つけます。トークン「is」をここに再び入れます。「cute」と「smart」を見つけます。
LLMが小さいため、これは典型的に大きなLLMよりも速く実行されます。そして、これらすべてを取得したら、小さなLLMによって予測されたトークンをすべて、ターゲットのLLMへの入力として配置します。それは大きなモデル、使用するもののようなものです。それぞれの確率分布を生成するためです。
21.3 分布のマッチング
Shervin: そして、各トークンの出力分布に関するルールを持つことによって、各次トークンの確率分布をシミュレートできることがわかります。それはターゲットモデルのものに見えます。基本的にどのように機能するかはこうです。
ドラフトモデルが予測したトークンの確率を見ます。ターゲットモデルの確率が、ドラフトモデルの出力分布でドラフトモデルのものより大きい場合、トークンを受け入れます。それ以外の場合、トークンを受け入れるか拒否する受理拒否メカニズムがあります。
そして、すべてが受け入れられたとしましょう。そうすると、単一のパスではるかに多くのトークンで進むことができます。そして、失敗した場合、基本的に、その良いトークンから生成プロセスを再開します。分布のいくつかの調整を伴います。
21.4 数学的正当性
Shervin: これすべてから尋ねられる1つの質問は、これはレシピのように見えますが、なぜターゲット分布と一致するのかということです。全確率の法則から始めて、これらの量で各項を記述すると、最後にターゲット分布を見つけます。
行うことを勧める演習です。そして、ここのスライドに添付された論文は、わずか数行でそれを実証しています。非常にシンプルな証明です。そして、非常に興味深いものだと思います。理解できますか?
学生: Rejection Samplingですか?
Shervin: そうです。すでに精通している人もいるかもしれません。理解できますか?
21.5 最後のトークンの追加理由
Shervin: そして、言わなかったことの1つは、なぜ最後のトークンをここに配置したのかです。すべてのドラフトトークンを配置しましたが、予測された最後のものも配置しました。なぜなら、これらすべてのドラフトトークンで単一の順伝播を行うことによって、無料で得られるのが、その後に来るトークンの確率分布だからです。そして、Q_{k+1}からサンプリングできます。
21.6 理論的根拠のまとめ
Shervin: 理論的根拠のまとめをしましょう。単一のパスを実行することは、一度に1パスずつ実行するのと同じくらい高価です。なぜなら、推論時に、メモリバウンドだからです。言い換えれば、計算が制限要因ではありません。基本的にメモリが計算をボトルネックにします。だから、小さなモデルで実行したいのです。
そして、大きなモデルでは、これらすべての確率分布を一度に計算したいのです。理解できますか?素晴らしい。
22. Multi-Token Prediction(多トークン予測)
22.1 最後の技術の紹介
Shervin: そして、Multi-Token Predictionと呼ばれる最後の技術についてお話ししたいと思います。ちなみに、前の技術はSpeculative Decodingと呼ばれていました。
これは基本的に同じことをしています。わずかに異なることをしています。しかし、ドラフトモデルが同じモデルに埋め込まれています。これは非常に強力です。
22.2 アーキテクチャの特徴
Shervin: 基本的に、最後のデコーダの表現の上に複数のヘッドを取り付けるモデルです。ここでのプロセスは、訓練時に次の単語予測をしないということです。複数の単語予測をします。
そして、テスト時、ドラフトモデルはすべてのヘッドです。そして、メインモデルは最初のヘッドだけです。だから、すべてのドラフトトークンを持ち、それを最初のヘッドに戻して供給し、受理拒否を行います。論文ではGreedy方式で実行しています。
この式では実行しません。なぜなら、アーキテクチャと目的関数が変更されたため、次トークン予測分布を再び見つけるこの素晴らしい特性がないからです。しかし、わずかなバリエーションがあります。
22.3 Multi-Token Predictionの興味深い点
Shervin: Multi-Token Predictionの興味深い点は、目的関数の変更です。そして2番目は、ドラフトモデルとターゲットモデルが基本的に同じものに埋め込まれているという事実です。だから、2つを分離する必要がありません。
22.4 まとめ
Shervin: このスライドを覚えていますか?これらの側面のそれぞれに対処できる技術を探求してきました。関連する論文も参照することを強く推奨します。それでは、どうもありがとうございました。
Stanford CME295 Transformers & LLMs | Autumn 2025 | Lecture 3 - Tranformers & Large Language Models
For more information about Stanford’s graduate programs, visit: https://online.stanford.edu/graduate-education October 10, 2025 This lecture covers: • Definition and architecture • Mixture of experts • Context length, temperature • Sampling strategies • Prompting, in-context learning • Chain of thought • Self-consistency To follow along with the course schedule and syllabus, visit: https://cme295.stanford.edu/syllabus/ Chapters: 00:00:00 Introduction 00:01:02 Recap of Transformers-based models 00:03:43 LLM definition 00:07:37 Mixture of Experts 00:12:43 Dense & Sparse MoE 00:15:47 MoE in LLMs 00:36:35 Response generation 00:38:34 Greedy decoding & beam search 00:46:36 Sampling-based methods 00:52:24 Impact of temperature on predictions 01:04:53 Guided decoding 01:07:07 Prompting strategies 01:14:09 In-context learning 01:18:35 Chain-of-thought, self-consistency 01:25:00 Inference optimizations with KV cache 01:33:09 PagedAttention, MLA Afshine Amidi is an Adjunct Lecturer at Stanford University. Shervine Amidi is an Adjunct Lecturer at Stanford University. View the course playlist: https://www.youtube.com/playlist?list=PLoROMvodv4rOCXd21gf0CF4xr35yINeOy
youtu.be