※本記事は、Stanford UniversityのCME295コース「Transformers and Large Language Models」の2025年10月3日に行われたLecture 2の内容を基に作成されています。講義の詳細情報およびコーススケジュールは https://cme295.stanford.edu/syllabus/ でご覧いただけます。本記事では、講義の内容を要約しております。なお、本記事の内容は講義内容を正確に反映するよう努めていますが、要約や解釈による誤りがある可能性もありますので、正確な情報や文脈については、オリジナルの講義動画(https://www.youtube.com/watch?v=yT84Y5zCnaA )をご視聴いただくことをお勧めいたします。
本講義の講師は、Afshine Amidi氏とShervine Amidi氏です。両氏はStanford UniversityのAdjunct Lecturer(非常勤講師)を務めています。講義では、Attentionの近似手法、MHA・MQA・GQA、位置埋め込み(通常型・学習型)、RoPEとその応用、Transformerベースのアーキテクチャ、BERTとその派生モデルについて解説されました。
スタンフォード大学の大学院プログラムに関する詳細は https://online.stanford.edu/graduate-programs をご覧ください。コースの全講義プレイリストは YouTube の「Stanford CME295: Transformers and Large Language Models」チャンネルでご視聴いただけます。
1. イントロダクションとTransformerの復習
1.1 講義の物流事項と前回の概要
講師(Afin): 皆さん、こんにちは。CME295の第2回講義へようこそ。本題に入る前に、2つの重要な物流上の連絡事項があります。まず1点目ですが、Shervinと私で第1回講義の録画を確認したところ、音声品質が最適とは言えない状態でした。そこで今回の講義では別のセットアップを使用することにしました。
ただし、この新しいセットアップには1つ問題があります。私の声が教室全体に十分に届かない可能性があるのです。そこで皆さんに質問ですが、後ろの席の方も含めて、私の声はよく聞こえていますか?
学生たち: はい、大丈夫です。
講師(Afin): 素晴らしい。それでは1点目はクリアですね。2点目は期末試験についてです。現在、期末試験は12月10日水曜日にプレースホルダーの日程として設定されています。ただし、これをもう少し早い週に移動できないか検討中です。確定次第お知らせしますが、今のところこれはまだ未定(TBD)の状態です。必ず皆さんにお知らせしますので、ご安心ください。
それでは、これらの連絡事項は以上にして、今日のトピックに入りましょう。その前に、いつものように前回の講義で学んだ内容を簡単に振り返りたいと思います。
第1回講義では、Self-Attentionの概念を紹介することに全体を費やしました。Self-Attentionとは何かを思い出してください。各トークンが、Attentionメカニズムを通じてシーケンス内の他のすべてのトークンに注意を向けるというものでした。そこにはQuery、Key、Valueという概念がありました。
基本的な考え方は、Queryが他のどのトークンが自分自身と最も類似しているかを尋ね、QueryとKeyを比較することで判断するというものです。そして、それが完了すると、関連するValueを取得します。Self-Attentionメカニズムはこの数式で表現できることを学びました。Softmax of(Query × Key transpose)over square root of d_k × Vです。
この数式は皆さんにとって馴染み深いものであることを願っています。この数式は高度に最適化されていることを知っておいてください。これらは大規模な行列乗算であり、私たちのハードウェアはこれを実行する能力に非常に優れており、非常に最適化されています。そして、これらすべてを通じて、私たちはTransformerのアーキテクチャも紹介しました。それが右側に表示されているものです。
覚えているかと思いますが、Transformerは2つの主要なコンポーネントで構成されています。左側のEncoderと右側のDecoderです。Transformerは当初、機械翻訳の文脈で導入されました。左側を入力テキストをソース言語(例えば英語)で処理するものと考え、右側を翻訳をターゲット言語(例えばフランス語)でデコードする責任を持つものと考えることができます。このMulti-Head Attention層が、Self-Attentionメカニズムが発生する場所です。
Multi-Head Attention層と呼ばれていることについて、多くの質問があったことを覚えています。複数のヘッドがあるということですが、これは何に対応するのでしょうか。Attention is All You Needという論文、つまりTransformerの論文には、実際にこれらの各ヘッドを表すこの図があります。各ヘッドは、入力をQuery、Key、またはValueに投影する1つの方法を学習する機会と考えることができます。
1.2 Self-AttentionとMulti-Head Attentionの理解
講師(Afin): もう少し明確にしましょう。QueryとKeyについて言えば、これらの小さなボックスの1つ1つが各ヘッドを表しています。つまり、これらの小さなボックスの数が基本的にヘッドの数になります。この意味をより視覚化し理解するために、論文で示されているものをお見せしたいと思います。それは、これらの各ヘッドが何をするのかを解釈する方法です。
私たちにはAttention Mapと呼ばれる概念があります。これは基本的に、各QueryとKeyの積の値を表現しようとするものです。この例では、トークン"its"が他のどのトークンと最も類似しているかを見たいと考えています。そこで、"its"を表すQueryと他のすべてのKeyの積を計算し、どのKeyがQuery × Keyの積の高い値をもたらすかを見ます。
これを行うと、基本的に論文が示しているのは、"application"と"law"という2つの単語が強調表示されることです。これらは高いAttention重みを持つものとして示されています。ここでAttention重みとは、Query "its"とこれらの各トークンのKeyとのドット積を意味します。これらを解釈する方法もあると思います。
ここで強調表示されているトークンは"law"と"application"であることがわかります。これは基本的に意味をなしています。なぜなら、トークン"its"は"law"を指しているからです。したがって、モデルは基本的にこれらの単語を以前に起こったことと関連付ける方法を学習する必要があります。また、"application"も参照しており、これもそれがそうである理由を説明する別の方法です。
そこで著者が選択したのは、これらの値をこれらの異なるヘッドの関数として示すことでした。例えば、左側では、これらは最初のヘッドの強度のようなものです。そして2番目のヘッドは、"law"に対して強度が非常に高いことを示しています。基本的に長い話を短くすると、これらのヘッドはおそらく、どの単語が重要かを把握するための異なる方法を学習する可能性があります。
学生: これらすべての計算を行っているとき、異なるMLPを通過しているのですか?
講師(Afin): 素晴らしい質問です。質問は、これらすべての計算を行っているとき、異なるMLPを通過しているのかということですね。答えは、それぞれに対して異なる投影行列を持つことになるということです。私たちには詳細な例があり、実際にそれを説明しましたが、各ヘッドは独自の投影を持ち、並列にその計算が行われます。
各ヘッドは1つの結果を持ち、それが連結され、その後、出力行列で再度投影されます。長い話を短くすると、これは高度に並列化されており、基本的には投影のようなものです。ここには行列乗算とSoftmaxがあります。理解できましたか?
学生: はい。
講師(Afin): これについて他に質問はありますか?素晴らしい。これは第1回講義で行った議論を説明する方法だと思います。これらのAttentionヘッドについて、それらが何をするのかについて質問があったことは知っています。Attention Mapを見ることが、それらの意味を理解する1つの方法です。
それでは、Transformerの論文、つまりAttention is All You Needを読むことを強くお勧めします。非常に密度の高い論文で、わずか数ページしかありません。しかし、第1回講義で見たことで、その内容を理解しやすい方法で消化できることを願っています。それでは、今日議論する実際の本題に入りましょう。
2. Position Embeddings:基礎と従来手法
2.1 位置情報の必要性とRNNとの対比
講師(Afin): 驚くべきことに、2017年に導入されたこのTransformerアーキテクチャは、実際には長年にわたって関連性を保ち続けているアーキテクチャです。わずかに変更されたコンポーネントがいくつかあり、それらがどれであるかを見ていきます。若干のバリエーションはありますが、全体として今日のモデルは、初期のTransformerアーキテクチャに基づいていることがわかります。
このクラスを2つの部分に分けてみたいと思います。第1部は私がカバーする内容で、Transformerのどの部分が重要であり、どのような変更があったかについてです。第2部では、Shervinが今日のモデルの命名法と、それらがオリジナルのTransformerとどのように関連しているかについて話します。
それでは、このアーキテクチャの最初の重要な概念から始めましょう。それはPosition Embedding(位置埋め込み)です。覚えているかと思いますが、ここでは各トークンが他のすべてのトークンと直接的な方法で相互作用できるようにしています。つまり、直接的なリンクを持っているということです。
しかし、RNNのようなものとは対照的に、RNNでは各トークンを一度に1つずつ処理する連続的な依存関係がありますが、ここでは基本的にあるトークンが別のトークンより前に処理されるという考え方を失っています。そのため、この位置情報を失うことになります。
その結果、各位置でトークンを何らかの形で定量化し、Transformerが入力を処理する際にその情報を注入する必要があります。では、どのようにしてそれを行うのでしょうか。オリジナルのTransformer論文の著者は、専用の埋め込みを持つことを選択しました。
専用というのはどういう意味かというと、各位置が1つの埋め込みを持つということです。位置1には1つの埋め込み、位置2には1つの埋め込みがある、という具合です。そして彼らが選択したのは、その埋め込みを入力トークンの埋め込みに加算することでした。
例えば、「A cute teddy bear is reading」と言う場合、位置番号1である「A」は、トークン「A」を表すトークンと、最初の位置を表す埋め込みの合計で表現されます。
学生: 位置埋め込みは学習されるものですか、それとも静的なものですか?
講師(Afin): 素晴らしい質問です。質問は、位置埋め込みは学習されるのか静的なのかということですね。答えは、両方です。両方というのは、著者が両方を試したということで、2つ目の方法は後で見ることになります。しかし、ここでは学習されると仮定しましょう。それはどういう意味でしょうか。
基本的に、各位置の埋め込みを学習する必要があるということです。このアプローチの問題点は、トレーニングセットに何があるかに非常に依存するということです。例えば、位置番号2で常に何かが起こっているようなテキストがあると、学習された埋め込みはそのバイアスのようなものを学習してしまいます。これが1つ目の制限です。
2つ目の制限は、トレーニングセットに存在する最大位置数までの位置しか学習できないということです。例えば、最大512までのシーケンスでTransformerをトレーニングしたとしましょう。その場合、その位置までの位置埋め込みしか学習できませんよね。
2.2 学習可能な位置埋め込みとその限界
学生: どのようにパラメータ化するのですか?
講師(Afin): どのようにパラメータ化するかということですが、基本的に学習可能な位置埋め込みのプレースホルダーを持つことになります。例えば、位置1から512の間といった具合です。そして、トレーニングを行う際には、これらの重みを通常の勾配降下法などを通じて学習させるだけです。これが最初の方法です。
しかし、先ほど述べたように、これには限界があります。位置埋め込みを学習できるのは、トレーニングセットに存在する最大位置までしかできないからです。例えば、推論時にトレーニングセットにあった位置を超える位置がある場合、それは学習していないことになります。したがって、その値を何らかの方法で推測する必要があります。これが2つ目の制限です。
ただし、ポジティブな面としては、モデルに学習させるだけであり、勾配降下法がデータから学習することに関して素晴らしい効果を発揮することを見てきました。これらの理由から、この方法は著者が良好なパフォーマンスを示したと述べたものであり、2つ目の方法と並んで評価されました。
2つ目の方法は異なるもので、位置埋め込みに対応する各次元に任意の数式を使用するというものです。これから見ていきましょう。最初の方法は、位置ごとに1つの埋め込みを持ち、それを学習するというものでした。
2つ目の方法は、位置ごとに1つの埋め込みを持ちますが、それを学習するのではありません。事前に決定されたものを使用します。著者が選択したのは、sineとcosineを使用した定式化でした。少し奇妙に感じるかもしれませんが、なぜこれを選択したのでしょうか。しかし、なぜそれが理にかなっているのかを見ていきます。
ここでの考え方は、与えられた位置m、例えばmに対して、サイズd_modelのベクトルを持つということです。dはトークン埋め込みの次元と一致する必要があります。なぜなら、それらを加算するからです。そして、すべてのインデックスに対して、これらの数式に関して対応する値を計算します。
これらの数式は何でしょうか。基本的には、何か×mのsineです。そして、その「何か」が何を意味するのかを見ていきます。2つ目は、何か×mのcosineです。三角関数の公式を覚えている人はいますか?素晴らしい、皆さん覚えていますね。
それに入る前に、記法を簡略化しましょう。今見た大きな量が、実際にはomegaのようなものだと仮定しましょう。omega_i × mとして、omega_iをこの量、つまり10,000の(-2i/d_model)乗として表記しましょう。このように埋め込みを構築すると仮定しましょう。
ここで、なぜそれが理にかなっているのかを考えてほしいと思います。なぜなら、考えてみると、位置を以下の事実を反映する方法で表現したいのです。近くにある単語は、遠く離れた単語よりも関連性が高い可能性が高いということです。つまり、1つの位置だけ離れた2つの単語と、10,000位置離れた2つの単語がある場合、1つの位置だけ離れた方がもう一方よりも類似していることが望ましいのです。
では、この数式が理にかなっているかどうか見てみましょう。位置mと位置nの2つの位置埋め込みがあるとしましょう。そして、この事前決定された数式からすべての値を計算すると仮定します。三角関数の公式を覚えていれば、cos(a - b) = cos(a)cos(b) + sin(a)sin(b)ですよね。
cos(omega_i × (m - n))を表現すると、これが得られることがわかります。これは私が述べた恒等式にすぎません。そして、この量は、これら2つの位置埋め込みのドット積を実行するときに現れる1つの成分にすぎないことがわかります。
なぜなら、基本的に位置mと位置nのドット積を行うとき、最初の位置を取って掛け合わせ、次に2番目の位置を掛け合わせる、といった具合に続けていき、ここに来るとsin(これ) × sin(これ) + cos(これ) × cos(これ)になります。これはまさにこの量です。
つまり、最終的に気づくのは、これらの埋め込みのドット積を実行すると、mとnの間の相対距離の関数であるcosineの和になるということです。
学生: ペアとはどういう意味ですか?
講師(Afin): そうですね。基本的に、質問は...そうですね。つまり、近いほど類似しているということです。これが直感であり、基本的にこの埋め込みの定式化方法が近似しようとしている、または模倣しようとしているものです。
これにより、基本的にmとnの関数であるドット積、実際には相対距離の関数であるドット積が得られます。念のために言っておくと、なぜドット積を気にするのでしょうか。埋め込みの世界で2つの埋め込み間の類似性を定量化しようとするとき、通常、これら2つのドット積に関係するものを行うからです。
通常、cosine類似度がありますが、cosine類似度は各埋め込みのノルムで割ったドット積にすぎません。これは基本的にドット積ですよね。だからドット積を気にするのです。そして、ここで素晴らしいのは、これが2つの相対距離の関数であることです。
特に、三角関数のクラスを覚えていれば、cos(0)は1であり、この数が大きいほど、このcosineの値は小さくなります。もちろん、これは周期的です。ですから、私が言っていることが必ずしも真実とは限りません。2πまたはπを過ぎると逆になります。
しかし、私が言おうとしているのは、mがnに等しい場合、基本的にcos(0)の和になり、これがこの量が最大になる値だということです。mがnに等しいとき、この量は最大になります。つまり、位置自体を見ている場合、それが最も類似しているということであり、これは基本的に私たちの直感と一致します。
2.3 正弦波・余弦波を用いた固定位置埋め込み
講師(Afin): それでは、埋め込みの値をプロットすると、これが得られます。このグラフでは、Y軸に基本的にすべての埋め込みを表しています。例えば50個の位置それぞれに対してです。X軸は、ベクトルの複数の次元にわたる、与えられたベクトルに沿った値を表しています。
例えば、最初の行を見ると、最初の位置、つまりベクトルのインデックス方法によっては位置番号0を見ていることになり、位置0の埋め込みのすべての値を見ていることになります。低い次元では、この値が非常に頻繁に上下することがわかります。つまり、より高周波数です。そして、次元が高い場合、値が上下するのに非常に長い時間がかかります。つまり、より低周波数です。
これは、私が述べたomega_iに関連しています。omega_iは、iの低い値、つまり次元の低い値に対しては非常に高く、iの高い値に対しては非常に低くなります。これは基本的に、cosineとsineがどれだけ速く変化するかを決定します。
これが元の著者が試したものであり、基本的に彼らが述べたこと、つまり注目したことは、この方法を使用すると、学習した方法と比較して同等の結果が得られるということでした。しかし、ここには大きな利点があります。なぜなら、トレーニング時に見たシーケンス長だけでなく、任意のシーケンス長に拡張できるからです。これが、この方法が好ましいとされる理由の1つです。
これが直感であり、著者が選択したものです。さて、2025年に早送りすると、まだこれを使っているのかと尋ねるかもしれません。答えは「ある種」です。遠いトークンが近いトークンよりも類似性が低いようにしたいというこの考え方は、まだ使用しています。しかし、彼らが行ったように埋め込みを注入しているわけではありません。
その理由を見ていきましょう。覚えているかと思いますが、気にかけているのは、Self-Attention計算でトークンがどれだけ類似しているかを決定することです。そして、Self-Attention計算はどこで行われるでしょうか。Attention層です。
しかし、ここで私が言ったことは何でしょうか。これらの埋め込みを計算して、ここで加算しましょうと言いました。しかし実際に望んでいるのは、この類似性をAttention層で反映させることです。質問がありますか?
学生: この最初の方法では、入力特徴に加算されるのですか?
講師(Afin): はい、この最初の方法では、入力特徴に加算されるのかという質問ですね。はい、その通りです。ただ加算するだけです。
しかし問題は、私たちが主にこの直感をMulti-Head Attention層で真実に保ちたいということです。これが、人々が異なるバリエーションを試した理由の1つです。特に、入力ではなく、Attention層で直接位置埋め込みを介入させるようにしました。なぜなら、基本的にここの入力で行うと、確かにAttention層に入る何かになりますが、間接的だからです。
私たちが望んでいるのは、近いトークンが遠いトークンよりも類似しているという事実を反映するように、Attention式について直接何かを行うことです。その方法は、Self-Attention層を覚えていれば、基本的にsoftmax of (Q K^T / sqrt(d)) × Vです。
私たちが望んでいるのは、そのsoftmax内に何か小さなものを追加することです。これは基本的に、あるトークンが別のトークンとどれだけ類似しているかを定量化する場所です。いくつかのトークンは、他のトークンと比較して、そのトークンに対してより類似しているはずだという事実を反映するために、何か小さなものを追加したいのです。
このバリエーションを試したいくつかの方法があります。T5論文を知っている人には、この種の相対位置バイアスを試しています。上記の式にあるバイアス項を学習することによってです。彼らが行ったのは、位置mとnの間に与えられた距離があるとしましょう。彼らのアイデアは、それを学習しましょうということでした。基本的にm - nすべてをいくつかのバケットにバケット化し、モデルにこれらの量を学習させ、それをsoftmaxに注入するのです。
学生: バイアスがここにあることで、確率に関して問題が生じませんか。合計が1にならなければならないので。
講師(Afin): m、質問はバイアスがここにあることで確率に関して問題が生じるかということですね。最終的に合計が1にならなければならないからです。しかし、softmax内で何でもできます。なぜなら、softmaxはとにかく正規化するからです。バイアスは、近くにあるものと比較して、遠く離れたものに対してより負である何かと考えることができます。
T5はそれらを学習しようと言っています。Train Short Test Long論文から別の方法があり、ALiBiと呼ばれる方法を導入しました。ALiBiはAttention with Linear Biasesの略だと思います。彼らが行ったのは、これらのバイアスを学習する代わりに、実際には決定論的な公式を持つということでした。これは、これら2つの位置間の相対的な差の関数です。
彼らはいくつかの結果を得たと述べています。これらすべての論文は常に互いに比較して、どれがより高性能かを確認しようとします。しかし現実には、今日のモデルでは、ほとんどのモデルが実際に別の種類の位置埋め込み方法を使用しており、これから見ていきます。
3. 現代的な位置埋め込み手法:T5、ALiBi、RoPE
3.1 Attention層への直接的な位置情報注入
講師(Afin): この方法は、QueryとKeyベクトルを何らかの角度で回転させることに依存しています。2次元空間でQueryとKeyがあるとすると、Queryをその位置の関数である何らかの角度で回転させ、Keyベクトルをその位置nの関数である何らかの角度で回転させることになります。
ところで、これを表示するつもりではなかったのですが、ベクトルがあって、そのベクトルを回転させたいとしましょう。直感的にこれについて話したい人のために、どのようにしてこれを行うかを推測してみてください。回転を空間で行ったことがある人はいますか?
学生: 行列乗算を使います。
講師(Afin): はい、その通りです。行列乗算です。そして回転行列と呼ばれる量を使用します。回転行列は次のように表現されます。2次元平面での2×2行列で、この角度のcosine、この角度のマイナスsine、この角度のsine、この角度のcosineとなります。
時間を見ていますが、実際にこれが機能することを示すのは非常に簡単です。しかし、時間が足りなくなるかもしれません。これが実際にベクトルを回転させる方法であることを簡単に示してほしいですか?
学生たち: はい、お願いします。
講師(Afin): わかりました。ここで念のために言っておくと、私たちが示そうとしているのは、行列乗算を使用して2次元空間でベクトルを回転できるということです。次のベクトルがあるとしましょう。xとyという2つの次元で定量化できるものです。2次元空間でベクトルをこれで表現できますよね。
しかし、ベクトルのノルムをrとし、x軸に対する角度をφとすると、vをrのベクトルとしてcosine of φとsine of φで書くこともできます。回転行列にこのvを掛けると、cosineとsine、そしてcosineの何かと何かの乗算が得られます。
この演習は皆さんに残しますが、回転行列とこのvの乗算を表現できることを示すことができます。rのcosine of (θ + φ)とsine of (θ + φ)として表現できます。これは簡単な証明です。回転行列とvの乗算は残しますが、元の三角関数の恒等式が得られ、この公式に導かれます。
これは基本的に、この行列とこのベクトルを乗算すると、基本的にベクトルをこの角度だけ回転させていることを示しています。
学生: なぜこれをやりたいのですか?
講師(Afin): 素晴らしい質問です。なぜこれをやりたいのか。これは次のスライドのテーマです。これは単なる導入です。ここでこの方法に戻ると、私たちが望んでいるのは、トークン間の類似性を定量化し、近いトークンが遠いトークンよりも類似するようにすることです。
以前の方法で抱えていた問題は、最初の方法、つまりこの学習された埋め込みでは、常にオーバーフィッティングの問題がありました。なぜなら、基本的にこれらのバイアスを学習すると、常にどのトレーニングセットを持っているかに依存するからです。おそらくデータセットは、近いトークンが類似しているという方法であるかもしれませんが、推論時に見るものとは異なる方法です。
このALiBi方法には、その学習可能なコンポーネントがありませんでしたが、これは非常に制限的でした。なぜなら、結局のところ非常に単純な公式、つまりnとmの相対的な差だけだからです。人々は、遠い位置が近い位置よりも類似性が低いという事実を反映する埋め込みを思いつくための異なる方法を試してきました。
この方法では、著者が提案したsineとcosineの世界に戻り、sineとcosine関数のレンズから類似性について考えます。これは少し導入であり、彼らの方法はRoPEと呼ばれています。聞いたことがあるかどうかわかりません。Rotary Position Embeddingsの略です。この方法を見ていきましょう。
3.2 T5の相対位置バイアスとALiBi
講師(Afin): すでに説明した内容を簡単に振り返りますと、T5論文では相対位置バイアスを学習する方法を試しています。上記の式にあるバイアス項を使用することによってです。彼らが行ったのは、位置mとnの間に与えられた距離があるとしましょう。彼らのアイデアは、それを学習しましょうということでした。
基本的にm - nのすべての値をいくつかのバケットにバケット化し、モデルにこれらの量を学習させます。そして、それらをsoftmaxに注入するのです。
学生: バイアスがここにあることで、最終的な確率に関して問題が生じませんか。合計が1にならなければならないので。
講師(Afin): 素晴らしい質問です。質問は、バイアスがここにあることで確率に関して問題が生じるかということですね。最終的に合計が1にならなければならないからです。しかし、softmax内では何でもできます。なぜなら、softmaxはとにかく正規化するからです。
バイアスは、遠く離れたものに対してより負である何かと考えることができます。近くにあるものと比較してです。T5は、それらを学習しようと言っています。
次に、Train Short Test Long論文から別の方法があり、ALiBiと呼ばれる方法を導入しました。ALiBiはAttention with Linear Biasesの略だと思います。彼らが行ったのは、これらのバイアスを学習する代わりに、実際には決定論的な公式を持つということでした。これは、これら2つの位置間の相対的な差の関数です。
彼らはいくつかの結果を得たと述べています。これらすべての論文は常に互いに比較して、どれがより高性能かを確認しようとします。しかし現実には、今日のモデルでは、ほとんどのモデルが実際に別の種類の位置埋め込み方法を使用しており、これから見ていきます。
3.3 RoPE(Rotary Position Embeddings)の詳細
講師(Afin): では、なぜこの方法を気にするのでしょうか。この方法には2つの素晴らしい点があります。1つ目は、QueryとKeyを回転させると、最終的に2つの相対距離の関数である量が得られるということです。これは非常に素晴らしいことです。だからこそ、私は黒板にこれを書きました。ちなみに見えるかどうかわかりませんが、数学的な詳細に入る時間はありません。しかし、家でこれらを表現したい場合は、これが基礎となります。
特に、Attention式を覚えていれば、Query × Key transposeがあります。Queryを角度mで回転させ、Keyを角度nで回転させると、角度θのn - mの回転行列を持つ式になります。これは素晴らしいことです。なぜなら、これは2つの位置間の相対距離の関数だからです。
さて、なぜこれを詳細に話すのでしょうか。実は、最近のほとんどのモデルがRoPEを使用していることがわかっており、だからこそこれが重要なのです。もう1つ言いたいのは、なぜそれが機能するのかという直感を得るのは少し難しいかもしれませんが、最初に説明したsineとcosineに関する説明が、その直感を構築するのに役立つことを願っています。
このことについて言えば、QueryとKeyによって与えられるAttention重みの上限は、長期的な減衰を観察するようなものであることがわかります。つまり、m - nが大きいほど、上限が小さくなっていくことを観察します。これらの小さな振動が見えますよね。完璧でもありませんが、長期的に減衰する上限に関する数学的な結果があります。
これについて質問はありますか?
学生: 相対距離は回転行列に捉えられているのですか?
講師(Afin): その通りです。質問は、相対距離が回転行列に捉えられているのかということですね。はい、その通りです。
学生: thetaは何ですか?
講師(Afin): 素晴らしい質問です。質問はthetaは何かということですね。実はthetaは固定されています。ここで話したこのomegaを覚えていますか?基本的にiとdの何らかの関数です。
実際、かなり素早く通り過ぎましたが、私が皆さんに示したのは2次元空間でのことですが、ここではdより大きい次元空間にいます。非常に素早く説明しましたが、この方法を拡張する方法は、この2次元空間をブロックごとに持つことです。しかし、thetaは基本的に固定する何かの関数ですが、iの関数です。これは次元で、1からd/2の間です。そしてdの関数でもあります。
通常、このthetaは基本的にomega_iにほぼ等しいものとして見ることになります。これがこれです。多かれ少なかれです。
学生: それは潜在次元と同じ次元を持つようにするためですか?
講師(Afin): 質問は、それは潜在次元と同じ次元を持つようにするためかということですね。ここには行列の積があります。したがって、次元が一致する必要があります。答えはそうです。理解できましたか?
学生たち: はい。
講師(Afin): それをイエスと受け取ります。わかりました。私はこれにかなりの時間を費やしました。なぜなら、これは実際に非常に重要だと思うからです。多くのモデルがこれを使用しており、直感はそれほど明白ではありません。ですから、これが役に立ったことを願っています。
これが位置埋め込みでした。
学生: このカーブはどのように得られるのですか?
講師(Afin): ああ、はい。質問はこのカーブをどのように得るかということですね。これは実際に数学的に示されているカーブだと思います。なぜなら、基本的にはかなり複雑だからです。式を書き出すつもりはありませんが、興味があれば、このRoPE論文には付録があり、そこで数学的にある量によって上限が制限されていることを示しています。これがそれを示しているものです。
学生: 素晴らしい質問です。
講師(Afin): 素晴らしいですね。位置埋め込みは、Transformerが少し変化した部分の1つであり、それがどのように変化し、なぜ変化したのかを見てきました。
4. Layer NormalizationとRMSNorm
4.1 Add & Normの基本概念
講師(Afin): それでは、Transformerの別のコンポーネント、つまり少し変化したコンポーネントを見ていきましょう。そのコンポーネントはLayer Normalizationです。Transformerアーキテクチャを覚えていれば、これも再びEncoderとDecoderで構成されており、その中にコンポーネントがあります。
「Add and Norm」と書かれているこれらのボックスがあります。これらは何を意味するのでしょうか。基本的にここで行うことは、この入力とこのサブレイヤーの出力を取り、それらを加算し、その後正規化します。これは著者が行う小さなトリックであり、実際には収束を改善し、収束をより速くすることが示されています。
アイデアは次のとおりです。ベクトルがある場合、ベクトルの成分が非常に大きい場合もあれば、非常に小さい場合もあります。ここでのアイデアは、ベクトルの成分を何らかの範囲、正規化された範囲内に正規化することです。
その方法は、ベクトルを取り、計算された平均、つまり基本的にその成分の合計である平均を引き、基本的にその標準偏差で正規化します。そして、2つの量を学習します。1つはgammaで、これは再スケーリング因子になります。もう1つはbetaで、これも別の因子、別の項であり、学習します。この2つの量をモデルに学習させます。
実際には、先ほど述べたように、これはトレーニングの安定性と収束時間に役立ちます。これはオリジナルのTransformer論文で使用された技術でした。それ以来、いくつかの変更があったことを指摘したいと思います。
サブレイヤーの入力と出力を正規化することから、正規化された入力の入力とサブレイヤーの合計を持つことに移行しました。言い換えれば、正規化が配置されている場所を変更したのです。ここでTransformer論文では、私たちが現在Post-Normバージョンと呼んでいるものでしたが、現在ではPre-Normバージョンを使用しています。
これは基本的に、ベクトルがサブレイヤーに入る直前にLayer Normを持つことで構成されます。サブレイヤーはここではAttention層またはFFN(Feed-Forward Network)のいずれかですが、それだけではありません。他にも変更があります。
現在、人々はLayer Normを使用していません。RMSNorm、Root Mean Square Normalizationと呼ばれる別のものを使用しています。これは基本的に以前に見たもののバリエーションです。これを計算する代わりに、基本的に人々が行うことは、XをXの成分のRoot Mean Squareで正規化するだけです。そして、gammaだけを学習します。gammaだけです。
なぜそうするのでしょうか。基本的に、収束特性が基本的に同等であることを示していますが、ここでは学習するパラメータが少なくなります。したがって、基本的により速いのです。
学生: 正規化の背後にある直感は何ですか?
講師(Afin): 素晴らしい質問です。質問は正規化の背後にある直感は何かということですね。モデルを見ると、いくつかの層があります。いくつかの層では、ベクトル、より正確には活性化が、その成分の一部で極端な値を持つことがあります。時には別の部分でです。
ここから見えるベクトル、これは基本的に活性化と呼ばれます。時には活性化がその成分の一部で極端な値を持ち、時には別の部分で持ちます。モデルは通常、これらの活性化があまりにも変動する場合、これらの各層で重みを学習するのに苦労します。
アイデアは、活性化の成分の値を、ある方向にあまり遠くない範囲に持ってくることです。興味があれば、Internal Covariate Shiftというキーワードがあります。これは基本的に、私がここで説明している現象に与えられる用語です。それが直感です。
学生: これとBatch Normalizationの違いは何ですか?
講師(Afin): 素晴らしい質問です。質問はこれとBatch Normalizationの違いは何かということですね。Batch Normalizationは別の次元、つまりバッチの次元での正規化です。たくさんのベクトルがあるとしましょう。行うことは、他のベクトルの同じ次元のすべての他の成分に対して、各成分を正規化することです。
これも正規化の別の方法と考えることができます。とはいえ、これらのTransformerベースのモデルに関しては、通常、人々はLayer Normを使用します。おそらく経験的により良く機能するためですが、Batch Normはバッチにも依存するため、トレーニングと推論の間にいくつかの違いを導入する可能性があります。
それが基本的な理由です。
4.2 Layer Normalizationの仕組み
講師(Afin): Layer Normalizationの仕組みについて、もう少し詳しく見ていきましょう。ベクトルがあり、その成分が時には非常に大きく、時には非常に小さい場合があります。ここでのアイデアは、ベクトルの成分を何らかの範囲、正規化された範囲内に正規化することです。
その方法は次のとおりです。ベクトルを取り、計算された平均を引きます。平均は基本的にその成分の合計です。そして、基本的にその標準偏差で正規化します。これが基本的な正規化のステップです。
しかし、それだけではありません。2つの量を学習します。1つはgammaで、これは再スケーリング因子になります。もう1つはbetaで、これも別の因子、別の項です。この2つの量をモデルに学習させます。gammaとbetaは学習可能なパラメータであり、勾配降下法を通じて最適化されます。
実際には、先ほど述べたように、これはトレーニングの安定性と収束時間に役立ちます。なぜこれが機能するのかという直感を思い出してください。モデルを見ると、いくつかの層があります。いくつかの層では、ベクトル、より正確には活性化と呼ばれるものが、その成分の一部で極端な値を持つことがあり、時には別の部分で持ちます。
ここから次の層に見えるベクトルは基本的に活性化と呼ばれます。時には活性化がその成分の一部で極端な値を持ち、時には別の部分で持ちます。モデルは通常、これらの活性化があまりにも変動する場合、これらの各層で重みを学習するのに苦労します。
アイデアは、活性化の成分の値を、ある方向にあまり遠くない範囲に持ってくることです。これにより、モデルが各層でより安定して学習できるようになります。興味があれば、Internal Covariate Shiftというキーワードがあります。これは基本的に、私がここで説明している現象に与えられる用語です。
つまり、Layer Normalizationは、各層での活性化の分布を安定させることで、トレーニングプロセス全体をより安定させ、より速く収束させるのです。
4.3 Post-NormからPre-Normへの変遷
講師(Afin): これはオリジナルのTransformer論文で使用された技術でした。ただし、それ以来いくつかの変更があったことを指摘したいと思います。正規化が適用される位置について、重要な変更がありました。
元のTransformer論文では、サブレイヤーの入力と出力を正規化していました。具体的には、入力とサブレイヤーの出力を取り、それらを加算し、その後に正規化を適用していました。これが元のアプローチでした。
しかし、現在では異なる方法に移行しています。正規化された入力の入力とサブレイヤーの合計を持つようになりました。言い換えれば、正規化が配置されている場所を変更したのです。元のTransformer論文では、私たちが現在Post-Normバージョンと呼んでいるものでした。正規化がサブレイヤーの後に来ていたのです。
現在では、Pre-Normバージョンを使用しています。これは基本的に、ベクトルがサブレイヤーに入る直前、つまりサブレイヤーの前にLayer Normを持つことで構成されます。サブレイヤーはここではAttention層またはFFN(Feed-Forward Network)のいずれかを指しています。
この変更により、トレーニングの安定性がさらに向上することが実践で示されています。Pre-Norm構成では、各サブレイヤーが正規化された入力を受け取るため、勾配の流れがより安定し、深いネットワークでもトレーニングしやすくなります。
4.4 RMSNormとBatch Normalizationとの比較
講師(Afin): しかし、それだけではありません。正規化の位置を変更しただけでなく、他にも変更があります。現在、人々はLayer Normを使用していません。RMSNorm、Root Mean Square Normalizationと呼ばれる別のものを使用しています。これは基本的に以前に見たもののバリエーションです。
従来のLayer Normalizationでは、平均を引いて標準偏差で割り、gammaとbetaの両方を学習していました。しかし、RMSNormでは、これを計算する代わりに、基本的に人々が行うことは、XをXの成分のRoot Mean Square、つまり二乗平均平方根で正規化するだけです。そして、gammaだけを学習します。gammaだけです。betaは学習しません。
なぜそうするのでしょうか。基本的に、収束特性が従来のLayer Normalizationと比較して基本的に同等であることが示されていますが、ここでは学習するパラメータが少なくなります。betaというパラメータ全体を削除しているのです。したがって、基本的により速く、より効率的なのです。パラメータ数が少ないということは、メモリ使用量が少なく、計算も少なくて済むということです。
それでは、Batch Normalizationとの比較についても触れておきましょう。
学生: これとBatch Normalizationの違いは何ですか?
講師(Afin): 素晴らしい質問です。質問はこれとBatch Normalizationの違いは何かということですね。Batch Normalizationは別の次元、つまりバッチの次元に沿った正規化です。たくさんのベクトルがあるとしましょう。Batch Normalizationで行うことは、同じ次元のすべての他の成分、つまり他のベクトルの同じ次元位置にある成分に対して、各成分を正規化することです。
つまり、Layer NormalizationとRMSNormは各ベクトル内で正規化を行うのに対し、Batch Normalizationはバッチ内の複数のベクトル間で正規化を行うのです。これも正規化の別の方法と考えることができます。
とはいえ、これらのTransformerベースのモデルに関しては、通常、人々はLayer Normを使用します。おそらく経験的により良く機能するためです。しかし、Batch Normにはもう1つ問題があります。Batch Normはバッチにも依存するため、トレーニングと推論の間にいくつかの違いを導入する可能性があります。
トレーニング時には大きなバッチがありますが、推論時にはバッチサイズが異なるか、1つのサンプルだけかもしれません。この違いが問題を引き起こす可能性があります。それが基本的に、TransformerモデルでLayer NormやRMSNormが好まれる理由です。
5. Sparse AttentionとAttention Headsの効率化
5.1 計算複雑性O(n²)の問題と解決策
講師(Afin): 素晴らしい。それでは、位置埋め込みを見て、Layer Normalizationを見てきました。今度は、Transformerの3番目の重要なコンポーネントを見ていきましょう。それはAttentionです。特に、私がこれまであまり強調してこなかったことがあります。Self-Attentionを行うとき、基本的にすべてのトークンが他のすべてのトークンと相互作用できるようにしています。
すべての相互作用を示す行列を見ると、シーケンス長nとシーケンス長nがあります。基本的にO(n²)の複雑性を持っています。これは非常に多いです。特にnが長くなるにつれてです。そのため、人々はこのO(n²)を、パフォーマンスを失うことなく、もう少し扱いやすいものに近似しようとしてきました。
2020年にLongformerという論文が出ました。この論文が行ったのは、Attentionが動作するウィンドウを制限することで、Attentionの異なるバージョンを試すことでした。ここでは、各トークンがすべてのトークンと相互作用できるようにする代わりに、各トークンは近隣のトークンとのみ相互作用します。
学生: Attention行列の計算後にそれを行うのですか?
講師(Afin): 再び素晴らしい質問です。質問は、Attention行列の計算後にそれを行うのかということですね。Softmaxの後という意味ですよね。Softmax of (Q K^T / sqrt(d))のすべてのことを行うのです。なぜこれを行うのかという点で、素晴らしい指摘をしています。
実際には、Softmaxで見るこの巨大な行列演算を伴わない、賢い実装がたくさんあります。タイリングと呼ばれるもの、つまり賢い操作がたくさんあり、これらは全体を計算することを伴いません。Q K^T / sqrt(d)のSoftmaxを計算するつもりはありません。全体を計算するつもりはありません。計算方法に少し賢さがあります。
基本的には、はい、そういうことです。
学生: これは畳み込みに匹敵するものと考えられますか?
講師(Afin): 質問は、これは畳み込みに匹敵するものと考えられるかということですね。すぐにそれを見ることになります。しかし、はい、コンピュータビジョンの世界といくつかの類似点があります。それをすぐに見ていきます。
現在、このようなローカルAttentionがある場合、人々はSliding Window Attentionという用語を使用します。この用語を使用するとき、これを意味します。つまり、基本的にAttentionを近隣のトークンに制限することです。そして現在、人々が行うことは、いくつかの層ではローカルAttentionを持ち、他の層ではグローバルAttentionを持ち、これらの層をインターリーブすることです。
モデルによって、通常、さまざまな組み合わせを試します。決まったレシピのようなものはありませんが、現在では通常使用されているものです。ここでのウィンドウは、説明のために、私の図ではウィンドウが非常に小さいです。しかし、現在では非常に大きくなり得るシーケンス長では、このウィンドウを数千のものと考えることができます。したがって、かなり大きなサイズに見えます。
5.2 Sliding Window Attentionと受容野
講師(Afin): 別の例を挙げましょう。先ほど言及した畳み込みとの比較に戻ります。すべての層でこのSliding Window Attentionを持つアーキテクチャがあります。ここではMistralの例を取り上げます。Mistralはすべての層でSliding Window Attentionを持っています。
しかし、考えてみると、ここのトークンはここのトークンまで注意を向けることができますが、次にここのトークンはここのトークンまで注意を向けることができます、という具合に続きます。これはある意味、コンピュータビジョンにおける受容野の考え方に似ています。
コンピュータビジョンの世界に詳しいか、その分野から来ているかわかりませんが、もしそうであれば、これが意味するのは、1つのトークンを取り、このトークンが実際に相互作用した他のトークンは何かを考えることです。これは基本的に、畳み込みを行うときに人々が時々尋ねる質問でもあります。
彼らは「では、この値は実際に他のどの値を見たのか」と尋ねます。この方法でも考えることができます。
最初のバリエーションは、完全なn×nのAttentionを行う代わりに、人々は時々ローカルAttentionを行うということです。これがSliding Window Attentionの概念です。層を積み重ねていくと、各トークンは直接的には近隣のトークンとのみ相互作用しますが、複数の層を通過することで、間接的にはより遠くのトークンとも情報交換ができるようになります。
これは畳み込みニューラルネットワークにおける受容野の概念と非常に似ています。畳み込み層を重ねていくと、各ピクセルが「見る」ことができる範囲が徐々に広がっていくのと同じように、Transformerでも層を重ねることで、各トークンが間接的に相互作用できる範囲が広がっていきます。
例えば、ウィンドウサイズが1000トークンで、12層のTransformerがあるとします。最初の層では各トークンは前後1000トークンしか見えませんが、層を重ねることで、最終的にはもっと広い範囲の情報を集約できるようになります。これが受容野の拡大という概念です。
そして現在、実用的なシーケンス長が非常に大きくなる可能性があるため、このウィンドウを数千トークンのものと考えることができます。したがって、かなり大きなサイズに見えますが、それでもO(n²)よりははるかに扱いやすい計算量になります。
5.3 局所注意とグローバル注意の組み合わせ
講師(Afin): 現在、このようなローカルAttentionがある場合、人々はSliding Window Attentionという用語を使用します。この用語を使用するとき、彼らはこれを意味します。つまり、基本的にAttentionを近隣のトークンに制限することです。
そして現在、人々が行うことは、いくつかの層ではローカルAttentionを持ち、他の層ではグローバルAttentionを持ち、これらの層をインターリーブすることです。つまり、すべての層で同じタイプのAttentionメカニズムを使用するのではなく、戦略的に異なるタイプを組み合わせているのです。
モデルによって、通常、さまざまな組み合わせを試します。決まったレシピのようなものはありませんが、これは現在では通常使用されているアプローチです。設計者は、どの層でローカルAttentionを使用し、どの層でグローバルAttentionを使用するかを実験的に決定します。
例えば、あるモデルでは、最初の数層はグローバルAttentionを使用して広範な文脈を捉え、中間の層ではローカルAttentionを使用して詳細な局所的パターンに焦点を当て、最後の層で再びグローバルAttentionを使用して全体的な統合を行う、といった構成が考えられます。
このような柔軟な設計により、計算効率と表現力のバランスを取ることができます。すべての層でグローバルAttentionを使用すると計算コストが高くなりすぎますが、すべての層でローカルAttentionだけを使用すると長距離依存関係を捉えるのが難しくなる可能性があります。両者を適切に組み合わせることで、効率的かつ効果的なモデルを構築できるのです。
6. Attention Headsの共有とメモリ効率化
6.1 KV Cacheとメモリ削減の動機
講師(Afin): これまで見てきたことすべてに対して直交する2番目のバリエーションは、ヘッドごとに1つの投影行列を持つのではなく、ヘッド間で投影行列を共有することです。ここでのアイデアは、h個のヘッドがあるとします。いくつかの投影行列をQueryに対して持つことになりますが、次に行うことは、KeyとValueの投影行列をグループ化し、複数のヘッド間で共有することです。
ここで疑問に思うかもしれません。なぜKeyとValueの投影行列は共有するのに、Queryの投影行列は共有しないのでしょうか。これは皆さんが疑問に思っていることでしょうか。
人々は何かが機能するかどうかを試すために物事を行います。ここでは直感的に、Queryは基本的に何かが別のものと類似しているかどうかを尋ねているのだと考えることができます。したがって、この質問を異なる方法で自問することは理にかなっているかもしれません。そのため、その多様性を保つことは意味があるかもしれません。
しかし、KeyとValueの投影行列をグループ化し、Queryの投影行列はグループ化しない選択をする中心的な理由の1つは、デコード時にAttentionを実行する方法にあります。デコードするとき、現在の単語と以前のすべての単語の間でAttentionを実行します。
言い換えれば、新しい単語を生成するたびに、その単語を以前のすべての単語にAttentionさせます。したがって、KeyとValueは何度も何度も出現することになります。新しいものをデコードしたいときは毎回、再び他のすべてのものにAttentionする必要があります。
次の講義で見ることになると思いますが、KV Cacheと呼ばれるものがあります。これは基本的にKeyとValueの値を保存します。そして私たちが望んでいることの1つは、そのキャッシュがあまり大きくならないようにすることです。
ヘッド間で投影行列を共有すると、少しのスペース、少しのメモリを節約できます。それが理由です。大まかに理解できましたか?
学生たち: はい。
講師(Afin): 素晴らしい。それでは、VとKに対していくつの投影行列を共有するかについて、いくつかのバリエーションがあります。すべてのh個のヘッドがVとKに対して同じ投影行列を共有する極端な例があり、その場合、この方法はMQA、Multi-Query Attentionと呼ばれます。
6.2 投影行列の共有戦略
講師(Afin): VとKに対していくつの投影行列を共有するかについて、いくつかのバリエーションがあります。まず、すべてのh個のヘッドがVとKに対して同じ投影行列を共有する極端な例があります。その場合、この方法はMQA、Multi-Query Attentionと呼ばれます。すべてのヘッドが1つのKeyと1つのValueの投影行列を共有するのです。
次に、中間的なケースがあります。G個の投影行列をVとKに対して共有し、サイズがH/Gのグループを持つ場合です。つまり、すべてのヘッドを複数のグループに分割し、各グループ内でKeyとValueの投影行列を共有します。これはGQA、Grouped Query Attentionと呼ばれます。
例えば、24個のヘッドがある場合、それらを6つのグループに分割できます。各グループには4つのヘッドがあり、その4つのヘッドはKeyとValueの投影行列を共有しますが、Queryの投影行列はそれぞれ独立しています。
そして、Transformer論文から非常によく知られているケースがあります。すべてのヘッドが独自のQuery投影行列、Key投影行列、Value投影行列を持つ場合です。これが標準的なMulti-Head Attentionです。この場合、ヘッド間で投影行列の共有は一切ありません。
これらの3つのアプローチは、メモリ効率と表現力のトレードオフを表しています。MQAは最もメモリ効率が良いですが、表現力が最も制限される可能性があります。標準的なMulti-Head Attentionは最も表現力がありますが、最もメモリを消費します。GQAはその中間に位置し、両方のバランスを取ろうとします。
このあたりで一旦休憩を取りたいと思います。私が述べたことが大まかに理解できるかどうか確認したいと思います。すぐにShervinに引き継ぎたいと思いますが、その前に、私が議論した方法が大まかに理解できているかを確認したいと思います。
学生: これはSelf-AttentionとCross-Attentionに適用されますか?
講師(Afin): 質問は、これをSelf-AttentionとCross-Attentionに適用するのかということですね。後でお話しすることについては、あまりネタバレしたくありません。Transformerのアーキテクチャを見ると、すぐに、私たちが最も気にかけているのはDecoderにあるものであることがわかります。なぜなら、実際には現代のモデルでEncoderを省略しているからです。
まだこれを見ていませんが、お伝えしておきます。このテクニックは通常、Decoderのmasked Self-Attentionで使用されます。しかし、このテクニックはすべてのAttention層に適用できます。ただ、現代のLLMはDecoder-Onlyモデルであり、基本的にTransformerのDecoder部分のみを持っていると言っておきます。これはすぐに見ることになりますが、それがMasked Self-Attentionです。
あまり多くを言いたくありません。Shervinがそれをカバーする予定ですが、ちょっとだけ今後の内容を覗き見した形になります。
6.3 使用場面の判断基準
学生: どちらを使用すべきか、どのようにして知ることができますか?
講師(Afin): 素晴らしい質問です。質問は、どちらを使用すべきか、いつそれを知るのかということですね。選択は常にいくつかの要因によって推進されると言えます。1つは、それがどれだけ良く機能するかです。2つ目は、レイテンシやコストなどのことをどれだけ気にするかです。
それは本当に、モデルがどれだけ大きいか、例えば計算でどれだけ節約したいか、入力長はどのくらいか、といったことに依存します。例えば、入力長が短い場合を考えてみましょう。ここで私たちが行いたいのは、シーケンス全体、つまりO(n²)のすべてのことを行うことを避けることです。
したがって、これらすべてが考慮に入ります。答えがどうあるべきかについて、単純明快ではないと言えます。しかし、多くの最近のモデルは投影行列を共有する傾向があると言えます。通常、GQAが目にするものだと言えますが、すべてのモデルで必ずしもそうとは限りません。
つまり、判断基準としては以下のような要素があります。まず、モデルのサイズです。より大きなモデルでは、メモリ節約がより重要になる可能性があります。次に、入力シーケンスの長さです。より長いシーケンスでは、KV Cacheのサイズがより大きな問題になります。
また、アプリケーションの要件も重要です。リアルタイム性が求められる場合、レイテンシの削減がより重要になるかもしれません。一方、最高の精度が必要な場合は、標準的なMulti-Head Attentionを選択する方が良いかもしれません。
さらに、利用可能な計算リソースとメモリも考慮する必要があります。限られたリソースで動作させる必要がある場合、MQAやGQAがより適しているでしょう。
最終的には、これらの要因すべてのバランスを取る必要があり、多くの場合、実験を通じて特定のユースケースに最適な構成を見つけることになります。しかし、傾向として、GQAが現代のモデルで広く採用されているのは、メモリ効率と性能の良いバランスを提供するからです。
講師(Afin): それでは、時間が迫っていますので、ここで第2部のためにShervinにバトンタッチしたいと思います。ありがとうございました。
7. Transformer系モデルの分類と進化
7.1 Encoder-Decoderアーキテクチャ
講師(Shervin): ありがとうございます。それでは、この講義の続きとして、Transformerランドスケープに存在するモデルの種類についてより深く掘り下げていきます。そして、分類設定に非常に有用な1つの特定のアーキテクチャについて詳しく見ていきます。
まず、前回一緒に見たアーキテクチャに戻りましょう。この伝統的なEncoder-Decoderアーキテクチャでは、両方のコンポーネントを持っています。2017年のオリジナルのTransformer論文がこのアーキテクチャを持っていましたが、その後、それを基礎として構築されたアーキテクチャがさらに登場しました。
ここでは、T5ファミリーのモデルについて話します。T5は、複数のTを含む略語のような論文です。最初はTransferで、それからText-to-Text Transformersです。これがT5という名前の由来です。そして、これは複数のバージョンに派生しました。
T5は基本的なバニラ論文であり、その後MT5が登場しました。MはMultilingualを意味します。トレーニングされたデータとボキャブラリーの計算方法に関して、さらに作業が行われました。そして、ByT5があります。これは、ある種のトークナイザーフリーの方法です。
ByT5では、トークナイズという概念を放棄し、代わりにバイトレベルで動作します。ByTのByはBytesのことです。基本的には、はるかに小さいボキャブラリーサイズを持っています。30,000程度のオーダーを持つ代わりに、2の8乗を持ちます。バイトは8ビットであり、基本的に2バイトですべての文字を表現できます。これが彼らが行うことです。
それでは、T5ファミリーに関して言及したい重要なことの1つは、目的関数が少し変わるということです。オリジナルのTransformerが行ったこととは異なります。オリジナルのTransformerはトレーニングタスクとして次トークン予測を行いましたが、T5ファミリーが行ったことは、いわゆるSpan Corruption Taskで動作したということです。
基本的に、文をEncoderへの入力として持ちますが、すべてをEncoderに入力する代わりに、空白を残します。これが私たちがSpan Corruptionと呼ぶものです。Span Corruptionは、1つまたは複数のトークンが欠落している可能性があります。
例を挙げましょう。"My teddy bear is cute and reading"という文があるとします。"My teddy bear"の部分をSpan Corruptさせ、それから"is reading"とすることができます。これが1つの潜在的なEncoder入力になります。そして、Corruptされるスパンの数としてnまでを持つことができます。
T5ファミリーはこれらをSentinel Tokensと呼んでいます。Sentinel Tokensを見たら、それらはCorruptされたトークンのスパンを表しています。したがって、Encoderにそれらがあります。そして、Decoderの仕事は、これらの各スパンを系列的に見つけることです。
最初のCorruptされたスパンを示すトークンから始まり、次のSentinel Tokenを予測するまでデコーディングプロセスを開始します。N+1まで続き、2つの連続するSentinel Token間でデコードされるトークンは、回復されるCorruptされたスパンに対応します。
学生: デコーディングプロセスについて詳しく説明してもらえますか?
講師(Shervin): はい。質問は、デコーディングプロセスについて詳しく説明できるかということですね。再構築に関してあなたが言ったことは、まさにその通りです。欠落しているテキストを示すSentinel Tokensがあります。デコーダーが出力したいのは、その欠落しているテキストです。
したがって、デコーダー出力は、各スパンが再構築されたものになります。トレーニングがどのように機能するかを知りたい場合、Teacher Forcingメカニズムを使用します。デコーダーにすべてを入力し、一度にすべてを再構築しようとします。
これは、次トークン予測目的関数からの変更に関する括弧書きのようなものです。他に質問はありますか?素晴らしい。
7.2 T5のSpan Corruption Task
講師(Shervin): T5のSpan Corruption Taskについて、もう少し詳しく説明しましょう。これは次トークン予測目的関数からの重要な変更点です。
基本的に、文をEncoderへの入力として持ちますが、すべてをEncoderに入力する代わりに、空白を残します。これが私たちがSpan Corruptionと呼ぶものです。Span Corruptionは、1つまたは複数のトークンが欠落している可能性があります。
例を挙げましょう。"My teddy bear is cute and reading"という文があるとします。"My teddy bear"の部分をSpan Corruptさせることができます。そして、その後に"is reading"と続きます。これが1つの潜在的なEncoder入力になります。そして、Corruptされるスパンの数としてnまでパラメータ化できます。
T5ファミリーはこれらをSentinel Tokensと呼んでいます。Sentinel Tokensを見たら、それらはCorruptされたトークンのスパンを表しています。したがって、Encoderにそれらがあります。例えば、<extra_id_0>、<extra_id_1>のような特殊なトークンです。
そして、Decoderの仕事は、これらの各スパンを系列的に見つけることです。最初のCorruptされたスパンを示すトークンから始まります。例えば、<extra_id_0>から始めます。そして、次のSentinel Token、つまり<extra_id_1>を予測するまでデコーディングプロセスを開始します。
これはN+1まで続きます。つまり、N個のCorruptされたスパンがある場合、N+1個のSentinel Tokenがあることになります。そして、2つの連続するSentinel Token間でデコードされるトークンは、回復されるCorruptされたスパンに対応します。
具体例で言えば、Decoderは「<extra_id_0> My teddy bear <extra_id_1> cute and <extra_id_2>」のように出力することになります。<extra_id_0>と<extra_id_1>の間の"My teddy bear"が最初のCorruptされたスパンの再構築であり、<extra_id_1>と<extra_id_2>の間の"cute and"が2番目のCorruptされたスパンの再構築です。
トレーニングがどのように機能するかについてですが、Teacher Forcingメカニズムを使用します。デコーダーにすべての正解を入力し、一度にすべてを再構築しようとします。これにより、モデルは並列に学習でき、効率的なトレーニングが可能になります。
この方法の利点は、モデルが文脈からの推論能力をより深く学習できることです。単に次のトークンを予測するだけでなく、複数のトークンにわたるスパン全体を予測する必要があるため、より高度な理解が求められます。
7.3 Encoder-OnlyとDecoder-Onlyモデル
講師(Shervin): それでは、別のクラスのTransformerについて話しましょう。Encoder-Decoderアーキテクチャから、Decoderを忘れて、Encoderだけを扱うものです。
ここで、「生成はできないのではないか」と言われるかもしれません。それに対して私は、「はい、まさにその通りです」と答えます。このEncoder-Onlyアーキテクチャには、生成に使用できるEncoder表現がありますが、分類のようなタスクにより適したタスクのために使用できます。
例えば、感情抽出、トークン分類など、特定の言語モデルで行われていたこれらすべてのことは、Transformerのencoder部分で行うことができます。少し後で、3つの主要なEncoder-Onlyモデルについて詳しく見ていきます。
このランドスケープにおける中心的なものはBERTです。そして、改善の軸を調査している他の2つのアーキテクチャ、DistilBERTとRoBERTaがあります。これらを見ていくことは良いことです。
それでは、最後のクラスがあります。先ほど述べたように、今日のLLMは、Encoder部分を完全に削除しています。Encoderがない場合、エンコードされた埋め込みを持たないため、積み重ねられたEncoderの最後でCross-Attentionに供給できるものがありません。したがって、このモジュールは完全に消えます。
積み重ねられた各Decoderは、Masked Self-AttentionとFFNをその一部として持つだけになります。このアーキテクチャは、それ以来人気を博しています。Transformerのようなアーキテクチャが当初は人気があった時期を振り返ると、主な仮説は、Encoder部分がデコードされた表現に到達するために非常に有用であるというものでした。
しかし、時間が経つにつれて、人々は計算予算をDecoder-Onlyに投資するのが最善であることに気づきました。そして、処理や計算を行う必要があるタスクの種類は、私が先ほどT5について述べたタスクのように、よりビスポーク(特注)であると言えます。スパンをCorruptして、それを知る必要があります。これはより複雑です。
一方、次単語予測は、実行できる最も単純なことだと言えます。そして、それは驚異的な効果を発揮することが証明され、最も役立つチャットボットであるという今日のアプリケーションとよく一致しています。これが主なものであり、Decoder-Onlyアーキテクチャは、このユースケースに非常によく適合します。
Decoder-Onlyアーキテクチャについては、今日は話しません。しかし、LLMについてより詳しく話す次の講義の中心部分になるでしょう。それでは、約束した通り、Encoder-Onlyアーキテクチャについて詳しく見て、BERTについて話しましょう。
8. BERT:双方向エンコーダーの詳細設計
8.1 BERTの概要と名称の意味
講師(Shervin): それでは、約束した通り、Encoder-Onlyアーキテクチャについて詳しく掘り下げていき、BERTについて話しましょう。
まず、BERTが何を意味するかを見ていきましょう。BERTは、Bidirectional Encoders Representations from Transformersを表す頭字語です。この略語の各セクションが何に対応するかを一緒に見ていきます。
最も簡単に理解できる部分から始めましょう。Encoderの部分です。先ほど述べたように、Decoderを削除しただけです。したがって、「Encoders from Transformers」というこの部分は、基本的にまさにその意味です。TransformerからEncoder部分を取り出したということです。
それでは、もう一方の部分について話しましょう。なぜ双方向性(Bidirectionality)について話すのでしょうか。これは、与えられた入力から、各トークンがすべてに注意を向けた出力表現を得ることができるため、ある意味で注目に値する結果だからです。
これが可能なのは、Encoderのみを持っているためです。Self-Attention層があり、それが本当にすべての他のトークンに注意を向けます。これは、Masked Self-Attentionを持つ場合とは対照的です。Maskは、Attentionメカニズムを因果的にします。つまり、各トークンは自分自身とその前のトークンに注意を向けることができます。
ちなみに、著者がこの論文で多く議論していることは、GPTが登場したということです。そして彼らは、「GPTは真に双方向ではなく、分類タスクに使用できるこれらのエンコーディングは真に双方向である」と言っています。
何か質問はありますか?
学生: Maskがない場合、各トークンは互いに注意を向けることができるということですね。
講師(Shervin): その通りです。質問は、Maskがない場合、各トークンは互いに注意を向けることができるということですね。まさにその通りです。そして、Maskはまさにそこにあり、トークンからそれより後に来るトークンへのリンクを防ぐためのものです。
この論文を文脈に置きたいと思います。NLP分野は当時活況を呈していました。同じ年に別の画期的な論文があり、それはELMOと呼ばれていました。Embeddings from Language Modelsです。そして、この論文のタイミングは少し不運だったと言えます。なぜなら、双方向表現を構築するという新しい洞察を本当に持っていたからですが、同じ年にTransformerベースの同じ路線の研究が出てきたため、少しMaskされてしまったのです。
ELMOについて主要な点を述べるだけにしますが、これは双方向LSTMに基づいていました。複数の層が互いに積み重ねられており、基本的にこのアーキテクチャのおかげで各単語の双方向表現を構築することができました。
では、なぜそれがBERTほど人気にならなかったのでしょうか。それは、以前のモデルと同じ欠点があったからです。基本的に、この再帰性のためにスケールするのが難しいのです。
ELMOとBERTについて考えるとき、少なくとも私にとっては、これらの論文をまず考えるわけではありません。なぜなら、彼らはSesame Streetのキャラクターの一部だからです。ELMOとBERTがまず何を表すかというと、Sesame Streetを知らない場所で育ったので、ELMOとBERTは論文名なのです。しかし、これはあなたにとって何を表すかもしれませんが、最初はかなり面白いと思いました。
研究者は一般的にかなり遊び心があり、頭字語をテーマに合わせようとします。論文名を見ると、楽しませてくれるでしょう。
この論文は非常に影響力がありました。170,000件以上の被引用数があります。本当に印象的なものです。そして、繰り返しになりますが、読むことをお勧めする画期的な論文です。Attention is All You Needと並んで、これは非常に良い読み物だと思います。
8.2 ELMOとの比較
講師(Shervin): この論文を文脈に置きたいと思います。NLP分野は当時、2018年頃に活況を呈していました。同じ年に別の画期的な論文があり、それはELMOと呼ばれていました。Embeddings from Language Modelsの略です。
そして、この論文のタイミングは少し不運だったと言えます。なぜなら、双方向表現を構築するという新しい洞察を本当に持っていたからです。しかし、同じ年にTransformerベースの、同じ路線の研究が出てきたため、少しその影に隠れてしまったのです。
ELMOについて主要な点だけを述べますと、これは双方向LSTMに基づいていました。複数の層が互いに積み重ねられており、基本的にこのアーキテクチャのおかげで各単語の双方向表現を構築することができました。LSTMは順方向と逆方向の両方から情報を処理できるため、各単語はその前後の文脈情報を持つことができました。
では、なぜそれがBERTほど人気にならなかったのでしょうか。それは、以前のモデルと同じ欠点があったからです。基本的に、この再帰性のためにスケールするのが難しいのです。LSTMは本質的に逐次的な処理を行うため、並列化が困難です。各ステップは前のステップの出力に依存するため、長いシーケンスを処理するのに時間がかかります。
一方、TransformerベースのBERTは、Self-Attentionメカニズムにより、すべてのトークンを並列に処理できます。これにより、はるかに大規模なデータセットとより大きなモデルでトレーニングすることが可能になりました。これがBERTがELMOを凌駕した主な理由の1つです。
ELMOとBERTについて考えるとき、少なくとも私にとっては、これらの論文をまず考えるわけではありません。なぜなら、彼らはSesame Streetのキャラクターの一部だからです。あなた方はELMOとBERTと聞いて、これらのキャラクターをまず思い浮かべるかもしれません。私はSesame Streetを知らない場所で育ったので、私にとってELMOとBERTは論文名なのです。しかし、これはあなた方にとって何を表すかもしれませんが、最初はかなり面白いと思いました。
研究者は一般的にかなり遊び心があり、頭字語をテーマに合わせようとします。論文名を見ると、楽しませてくれるでしょう。このような命名の遊び心は、研究コミュニティの文化の一部であり、複雑な技術的概念をより親しみやすく、記憶に残りやすくする役割も果たしています。
8.3 特殊トークンとSegment Embeddings
講師(Shervin): それでは、Encoder-Onlyモデルの目標についてより深く掘り下げていきましょう。入力としてトークンのセットがあり、ここでの目標は、ある表現をどこかに投影することに焦点を当てたタスクを実行することです。典型的には分類タスクです。
BERTの動作方法は非常に特定的です。2種類のトークンが見られますが、これらはここで構造的なものです。まず、[CLS]トークンがあります。これはClassificationを表し、基本的にシーケンスの最初に配置されるプレースホルダートークンです。
全体のAttentionと投影、つまりEncoder全体のメカニズムを経た後、最終的にこのトークンは、分類に使用できる埋め込みに投影されます。つまり、[CLS]は単なるプレースホルダーであり、入力全体の双方向情報を運ぶことになります。
もう1つ見られる有用なトークンは、[SEP]トークンです。これはSeparatorの略です。すぐに見ることになる目的関数と密接に関連しています。これは2つの文を分離することを目的としています。
これが非常に高いレベルの説明です。そして、このモデルで非常に興味深いのは、Multi-Stage Trainingの概念があることです。モデルを1回でトレーニングするのではありません。複数の段階で行います。
最初の段階は、関心のあるタスクと整合することを目的としています。これを私たちはPre-Training(事前学習)と呼びます。この事前学習は、2つの目的関数で行われます。それぞれMLMとNSPです。MLMはMasked Language Modelの略で、NSPはNext Sentence Predictionの略です。
Masked Language Modelは、モデルが入力の内部構造を学習する方法です。NSPは、文の順序が意味をなすかどうかを見る方法と見なすことができます。それぞれについてもう少し深く掘り下げていきますが、これは著者が高品質の一般的な埋め込みを学習するのに役立つと仮定した目的関数の組み合わせです。
次に言及したい2番目のことは、これらすべてを完了すると、学習した埋め込みを保持し、それに別のネットワーク、典型的には線形投影を接続して、学習したものをいくつかのターゲットタスクにFine-Tuneするということです。これを私たちはFine-Tuning(微調整)と呼びます。
学生: Next Sentence Predictionは、Decoderタスクのように見えるので、ここではEncoderのみを持っているのですか?
講師(Shervin): 素晴らしい点です。質問は、Next Sentence Predictionは、Decoderタスクのように見えるので、ここではEncoderのみを持っているのかということですね。実際には、すぐに詳しく説明しますが、Next Sentence Predictionタスクは、実際には2つの文を次々に配置し、それらが本当に連続しているかどうかを予測することです。これは分類タスクです。文AとBがあり、BはAの後に来るべきかどうかを判断します。
はい、素晴らしい点で、すぐに詳しく見ていきます。
それでは、この方法が通常持つ長所と短所について議論する前に、もう少し説明したいと思います。長所の側では、この事前学習メカニズムは、かなりラベルなしのデータで行うことができます。Next Sentence Predictionタスクはまだありますが、これはコントロールできるものです。なぜなら、どの文が互いに続くかを知っているからです。これは一種の自己教師ありです。
Masked Language Modelタスクも、どのように構成されているかを見ていきますが、これも教師なしのものです。したがって、これはラベルなしのデータから興味深い埋め込みを学習する非常に興味深い方法です。
そして実際には、このラベルなしデータが有用な表現の学習につながり、Fine-Tuning段階では非常に少ないデータが必要になることがわかります。Fine-Tuning段階では、学習したこれらの非常に良い埋め込みから始めるだけで、調整する重みはわずかです。これは通常、当時の最先端を超える性能につながりました。
欠点に関しては、もちろん、すべてのテキスト生成タスクは手の届かないところにあります。なぜなら、Decoderがないからです。また、この2段階プロセスと埋め込みをさらに調整する必要があるという事実を、いくつかの障害として見ることもできます。ワンショットで実行できるより伝統的な方法と比較すると、この方法論は障害として見なすことができます。
ここにはバリアントに関するいくつかの名前があります。それらの2つについて、少し後で詳しく見ていきます。
8.4 WordPieceトークナイザー
講師(Shervin): それでは、オリジナルのTransformerに焦点を当て、それに何が起こったか、そしてどのようにしてBERTアーキテクチャに到達するかを段階的に見ていきましょう。これが先週見たオリジナルのTransformer論文にあったものです。
BERTが行ったことは、そのEncoder部分を抽出し、基本的に先ほど述べた新しい目的関数と、トークンを表現する際の新しいトリックのセットを追加することでした。それらを1つずつ見ていきましょう。
まず最初に注目すべき興味深い点は、WordPieceと呼ばれる特定のトークナイザーを使用していることです。これは、トレーニングセットで学習するトークナイザーと考えることができます。尤度を最大化するマージルールに基づいています。
基本的に、巨大なトレーニングセットがあり、原子的なトークンを一緒にマージしてターゲットボキャブラリーを構築するトークナイザーをトレーニングします。ここで言及した大きさのオーダーがあります。30,000です。これは典型的に、彼らがこの論文で選択したサイズだと思います。一般的に、この種の論文でのボキャブラリーサイズは、10の4乗のオーダーです。
先ほど見たByT5のようなトークンフリーの方法を除いて、これは2の8乗、つまり256のような非常に制限されたトークンセットです。この特定のケースを除いて、常にこのオーダーのマグニチュードを持っています。
そして、基本的に先ほど述べたトークンを使用することになります。シーケンス全体の双方向表現を運ぶ[CLS]トークンがあります。そして、Next Sentence Predictionタスクに向けて2つの文を分離するための[SEP]トークンがあります。
まだ話していないことがあります。少し後の詳細な説明のときに話すことができると思います。基本的に、このMasked Language Modelタスクを持つためには、もちろんいくつかのトークンをMaskする必要があります。そのMaskを適用する技術と、どこでどの頻度で行うかを見ていきます。そして、出力に関して、結果として得られる表現に基づいて私たちのタスクが何になるかを見ていきます。
ここでは素早く通過しますが、すぐに戻ってきます。
9. BERTの事前学習:MLMとNSP
9.1 Multi-Stage Trainingの概念
講師(Shervin): それでは、入力埋め込みに関する大きなニュースの1つについて見ていきましょう。何が同じままなのでしょうか。各トークンに対して学習する埋め込みの巨大な辞書ルックアップがまだあります。これは学習することになります。そして、前回の講義で見た、そしてAfinが今日の講義の前半で話した位置エンコーディングを加法的に追加します。これはハードコーディングされたものでも学習されたものでもあり得ます。
著者がここでハードコーディングされたバージョンを使用したと思いますが、完全には確信がありません。しかし、通常はほぼ同じ性能です。
しかし、新しいものがあります。Segment Encodingと呼ばれる新しい種類のエンコーディングの導入があり、これもトークンに加法的に追加されます。ただし、例外として、ここでは2つの可能なエンコーディングしかありません。最初の文を表すSegment Aと、2番目の文を表すSegment Bがあります。
これは、NSPタスクを支援するために、別の文の前にある文を表現できる特徴を役立てることを目的としています。少なくともそれが著者によって出された仮説でした。後で挑戦されることになりますが、ここで導入された重要な概念の1つです。
学生: Segment Encodingは実際に何をするのですか?
講師(Shervin): 素晴らしい点です。質問は、Segment Encodingは実際に何をするのかということですね。基本的に学習されるものです。基本的に学習できる2つのインデックス、2つの埋め込みがあります。Segment Aを文の最初の部分のトークンに加法的に追加し、Segment Bを2番目の部分に追加します。そして、勾配降下法で学習するだけです。それに対して何もしません。
もう1つ質問があったと思います。
学生: 同じ文のすべてのトークンは、同じSegment Encodingを持つことになりますか?
講師(Shervin): その通りです。質問は、同じ文のすべてのトークンは同じSegment Encodingを持つのかということですね。はい、その通りです。Segment Aのすべてのトークンは同じSegment A埋め込みを受け取り、Segment Bのすべてのトークンは同じSegment B埋め込みを受け取ります。
それでは、このMulti-Stage Trainingの概念について説明しましょう。モデルを1回でトレーニングするのではありません。複数の段階で行います。
最初の段階は、関心のあるタスクと整合することを目的としています。これを私たちはPre-Training(事前学習)と呼びます。この事前学習段階の目標は、一般的で有用な言語表現を学習することです。これは、ラベルなしの大量のテキストデータで行われます。
この事前学習は、2つの目的関数で行われることを詳しく見ていきます。それぞれMLMとNSPです。MLMはMasked Language Modelの略で、NSPはNext Sentence Predictionの略です。これらの2つのタスクを同時にトレーニングすることで、モデルは言語の深い理解を獲得します。
事前学習が完了すると、2番目の段階に移ります。これがFine-Tuning(微調整)です。これらすべてを完了すると、学習した埋め込みを保持し、それに別のネットワーク、典型的には線形投影を接続して、学習したものをいくつかのターゲットタスク、例えば感情分析や質問応答などにFine-Tuneします。
この2段階アプローチの利点は、大量のラベルなしデータから一般的な言語知識を学習し、その後、少量のラベル付きデータで特定のタスクに適応できることです。これにより、各タスクのために最初から大規模なモデルをトレーニングする必要がなくなり、非常に効率的です。
9.2 MLM(Masked Language Model)タスク
講師(Shervin): それでは、約束したとおり、このMLMタスクが何をするのかについてもう少し詳しく説明したいと思います。入力を見ると、基本的に入力文があり、ランダムにいくつかのトークンを置き換えることになります。
置き換えられるのは、80%の時間で[MASK]トークンになります。10%の時間では、このMLM目的関数のために選択されたトークンは全く置き換えられません。同じトークンを予測するだけです。そして10%の時間では、ランダムな他の単語に変更されます。最終的に、このMLMタスクを実行するトークンのサブセットがあります。
そして、これがどのように構成されているかです。基本的にここでの直感は、トークンが何であるかを予測したい場合、その文脈について知る必要があるということです。したがって、モデルに左右の周囲について学習させることを強制します。これが、このアーキテクチャの双方向性の特性が実際に機能する方法です。
このマスキング戦略についてもう少し詳しく説明しましょう。なぜ3つの異なる方法でトークンを扱うのでしょうか。80%の時間で[MASK]トークンを使用する主な理由は、モデルに文脈から単語を予測することを学習させるためです。これがコアとなる学習メカニズムです。
しかし、10%の時間で元のトークンを保持するのはなぜでしょうか。これは、[MASK]トークンがFine-Tuning時やその後の実際のアプリケーションには現れないためです。トレーニング時にのみ[MASK]を見ることによるバイアスを防ぐために、時々元のトークンを保持します。
そして、10%の時間でランダムな単語に置き換えるのはなぜでしょうか。これは、モデルが文脈に基づいて正しい単語を識別する能力を向上させるためです。ランダムな単語が現れた場合でも、モデルは周囲の文脈を使用して、その位置に何があるべきかを予測する必要があります。
したがって、このMLMタスクを通じて、モデルは各トークンの左側と右側の両方の文脈を深く理解する必要があります。これにより、真の双方向理解が生まれます。左から右へ、または右から左への一方向的な処理ではなく、両方向からの情報を同時に統合する必要があるのです。
9.3 NSP(Next Sentence Prediction)タスク
講師(Shervin): それでは、Next Sentence Predictionタスクについて話しましょう。ここでのプロセスは、与えられたコーパスから2つの文を選択し、それらを並べて提示することです。50%の時間では順序通りに、残りの時間ではランダムな順序で提示します。
目標は、[CLS]トークンの上にある分類ヘッドが、AとBが連続しているかどうかを判断することです。それだけです。そして、仮定としては、これも有用な埋め込みを学習するのに役立つということです。
具体的に説明しましょう。例えば、文A「私のテディベアは本を読んでいます」と文B「彼はとても賢いです」があるとします。これらは意味的に連続しています。「彼」は明らかにテディベアを指しています。これが正例、つまり真に連続している文のペアです。
一方、負例では、ランダムに選ばれた無関係な2つの文をペアにします。例えば、文A「私のテディベアは本を読んでいます」の後に、文B「量子物理学は複雑な分野です」のような全く無関係な文が来るかもしれません。これらは連続していません。
モデルは、これら2つの文が実際に連続しているかどうかを判断する必要があります。このタスクを通じて、モデルは文間の関係、照応(代名詞と先行詞の関係)、論理的な流れなどを学習することが期待されます。
[CLS]トークンの最終的な表現が、この2値分類タスク(連続している/していない)に使用されます。この埋め込みは、Encoder全体を通過することで、両方の文からの情報を集約しています。
仮定としては、文レベルの関係を理解することが、後の下流タスク、例えば質問応答や含意認識などに有用な表現につながるというものでした。ただし、後ほど見るように、この仮定は後の研究で挑戦されることになります。特にRoBERTaでは、NSPタスクを除去しても性能にほとんど影響がないことが示されました。
しかし、オリジナルのBERT論文では、MLMとNSPの両方を組み合わせることで、モデルがトークンレベルと文レベルの両方で言語を理解することを学習すると考えられていました。
9.4 モデル構成と記法
講師(Shervin): それでは、論文で使用されている記法について説明したいと思います。この論文は読むことをお勧めするものです。非常に素晴らしい読み物です。Attention is All You Needと並んで、これは画期的な論文だと言えます。約170,000件の引用があります。本当に印象的なものです。
基本的に、論文で使用されている記法を紹介します。オリジナルのTransformer論文で私たちがNと呼んでいたものは、現在Lと呼ばれています。これはレイヤー数を表します。D_modelと呼ばれていた埋め込みの次元は、現在Hと呼ばれています。そして、Attentionヘッドの数、小文字のhと呼ばれていたものは、現在Aと呼ばれています。
ここでは、情報提供のためにこれらの新しい記法を示しているだけです。マッピングを提供するためです。しかし、もちろん、Afinと私は一緒に、オリジナルの記法と一貫性を保つつもりです。これは単に情報提供のためです。
興味深い点として、BERTモデルを見ると、Hugging Faceのようなモデルのリポジトリで、通常、いくつかのバージョンで提供されていることがわかります。CasedやUncasedといったものを見ることになります。
これは、データに対してどのような前処理が行われたかを示しています。ボキャブラリーに小文字の単語のみがあるかどうか、または大文字小文字が重要かどうかです。関心のあるタスクに基づいて、選択したいものの1つかもしれません。例えば、固有名詞の識別が重要なタスクでは、Casedバージョンが望ましいでしょう。
それでは、論文からいくつかのオーダーのマグニチュードを示します。これらの各パラメータに対して選択された値についてです。記憶が正しければ、オリジナルのTransformerは12層の積み重ねられたEncoderとDecoderを持っていたと思います。ここでの数字の一部は、そこから取られたようなものです。
BERT-Baseの構成を見ると、L=12、つまり12層のEncoderがあります。H=768、つまり埋め込み次元は768です。そしてA=12、つまり12個のAttentionヘッドがあります。これにより、約1億1000万パラメータのオーダーになります。
より大きなバージョンであるBERT-Largeもあり、これはL=24、H=1024、A=16で、約3億4000万パラメータになります。
これらの数字は、モデルの規模を理解する上で重要です。当時としては、これらは非常に大規模なモデルでしたが、現在のLLMと比較すると比較的小さいと言えます。しかし、2018年当時、これらのサイズのモデルは画期的なものでした。
ここまでで質問はありますか?
学生たち: 大丈夫です。
講師(Shervin): 素晴らしい。それでは、Fine-Tuning段階について話していきましょう。
10. BERTのFine-tuningと実装詳細
10.1 Fine-tuningの基本戦略
講師(Shervin): それでは、Fine-Tuning段階について話しましょう。ここでの目標は、基本的に事前学習段階で学習したものを取り、それらの重みを凍結し、同じ重みで再度トレーニングする代わりに、[CLS]トークンまたは関心のあるトークンの上に配置されるいくつかの分類線形層を持つことです。
そして、線形埋め込みについて学習することになります。分類タスクがあります。したがって、これらの事前学習された重みをすべて凍結し、これらの小さな重みだけをトレーニングするか、または全体を再トレーニングすることができます。
複数の分類スキームがあると思います。その一部は、ネットワークの多くを再トレーニングする意欲と、分類タスクがオリジナルの事前学習タスクとどれだけ異なるかによって影響を受けます。
具体的に説明しましょう。事前学習された重みを完全に凍結するアプローチでは、計算コストが非常に低くなります。なぜなら、新しい分類層のパラメータのみを学習すればよいからです。これは通常、下流タスクが事前学習タスクと類似している場合にうまく機能します。
一方、すべての重みを再トレーニングするアプローチもあります。これは、より多くの計算リソースを必要としますが、下流タスクが事前学習タスクと大きく異なる場合、または特定のドメインに特化したデータがある場合に、より良い性能を発揮する可能性があります。
中間的なアプローチもあります。例えば、最後の数層のみを再トレーニングし、初期の層は凍結するという方法です。これは、初期の層がより一般的な言語特徴を捉えているのに対し、後の層がよりタスク固有の特徴を捉えているという考えに基づいています。
選択する戦略は、いくつかの要因に依存します。利用可能なラベル付きデータの量、計算リソース、下流タスクの性質、そして必要な性能レベルなどです。一般的に、データが少ない場合は凍結アプローチが過学習を防ぐのに役立ち、データが豊富な場合は再トレーニングアプローチがより良い性能を提供する可能性があります。
10.2 タスク別のFine-tuning例
講師(Shervin): それでは、関心のあるタスクに対してどのようなFine-Tuningタスクがあり得るか、いくつかの例を挙げたいと思います。感情抽出があります。これは、[CLS]トークンの上に分類層を構築するものです。
感情抽出の場合、例えば映画レビューを入力として取り、それがポジティブかネガティブかを分類したいとします。BERTは文全体を処理し、[CLS]トークンの最終的な埋め込みが文全体の意味を捉えます。その上に単純な線形層を配置し、2クラス分類(ポジティブ/ネガティブ)または多クラス分類を行います。
別の例として、質問応答があります。ここでは、いくつかの入力が与えられ、モデルの目標は応答の開始スパンと終了スパンを検出することです。つまり、これは基本的にトークンレベルでの目的関数です。
質問応答タスクでは、より具体的に説明すると、質問と文脈段落の両方を入力として与えます。例えば、「スタンフォード大学はどこにありますか?」という質問と、「スタンフォード大学はカリフォルニア州パロアルトに位置しています」という文脈があるとします。
モデルは、文脈内で答えが始まる位置と終わる位置を予測する必要があります。この場合、「パロアルト」または「カリフォルニア州パロアルト」が答えになります。これを実現するために、2つの分類層を使用します。1つは開始位置を予測し、もう1つは終了位置を予測します。
各トークンの出力埋め込みに対して、そのトークンが答えの開始位置である確率と終了位置である確率を計算します。これにより、トークンレベルでの予測が可能になります。[CLS]トークンだけでなく、すべてのトークンの出力埋め込みを活用するのです。
このように、BERTは非常に柔軟で、文レベルの分類タスク(感情分析など)とトークンレベルの分類タスク(質問応答、固有表現認識など)の両方に適用できます。事前学習で獲得した双方向の文脈理解が、これらの多様なタスクすべてに有用なのです。
10.3 具体例による処理フロー
講師(Shervin): それでは、具体的な例を1つ詳しく見ていきましょう。私たちのお気に入りの例です。"This teddy bear is so cute"という文で、BERTが実際にどのように動作するかを見てみましょう。
基本的に、Uncased設定で行うことは、文を取って前処理することです。すべてを小文字にします。次に、トークナイザーが学習したトークナイゼーションメカニズムに従って、WordPieceアルゴリズムを適用します。
例えば、ここでは、明らかにこれらすべてのマージルールを持っていました。これがボキャブラリーに現れるトークンの種類です。"this"、"ted"、"##dy"、"bear"、"is"、"so"、"cute"のようにトークナイズされるかもしれません。"##"は、そのトークンが前のトークンの続きであることを示すWordPieceの表記法です。
そして、約束したとおり、シーケンスの最初に[CLS]トークンを追加します。次に[SEP]トークンを追加します。また、[PAD]トークンもあります。これは基本的にシーケンスを最後まで埋めるために使用されます。
なぜ[PAD]トークンが必要なのでしょうか。トレーニングするとき、バッチでトレーニングします。バッチは固定長を持つ行列で構成されています。したがって、すべてのシーケンスを同じ長さにする必要があります。短いシーケンスは、[PAD]トークンで最大長まで埋められます。
それでは、前回のTransformerの詳細な説明と同様に、少し詳しく見てみましょう。学習される埋め込みがあります。これは、各トークンのインデックスと学習された表現の間の巨大なルックアップテーブルのようなものです。
トークンの位置埋め込みをそれに追加します。そして、ここで新しいもの、Segment埋め込みがあります。先ほど述べたとおり、これは各トークンに追加される埋め込みであり、同じ埋め込みが同じトークンに追加されます。Segment Aのすべてのトークンに同じ埋め込みが追加され、Segment Bのすべてのトークンに別の埋め込みBが追加されます。
この例では、[SEP]トークンの前のすべてがSegment Aの埋め込みを受け取ります。もし2番目の文があれば、[SEP]トークンの後のトークンはSegment Bの埋め込みを受け取ることになります。
素晴らしい。それで今、Transformerと同様に、位置を認識し、セグメントを認識するものがあります。まだ文脈を認識していませんが、セグメントを認識しています。そして、基本的にこのEncoderアーキテクチャを通過します。
感情抽出のケースでは、最終的に、[CLS]トークンではない各トークンに対応する出力埋め込みは気にしません。なぜなら、私たちが気にするのは[CLS]トークンの出力埋め込みだからです。そこに、いくつかの分類タスクを学習する線形層を接続します。
この線形層は、[CLS]の埋め込み次元(例えば768次元)から、分類カテゴリの数(例えば、ポジティブ/ネガティブの2クラス)へのマッピングを学習します。この小さなネットワークのパラメータだけを学習することで、効率的にタスク固有の分類器を構築できるのです。
10.4 [CLS]トークンの役割と出力
講師(Shervin): それでは、[CLS]トークン以外のすべての出力埋め込みを削除するという事実は理解できますか?
学生: このFFNは何に対応するのですか?
講師(Shervin): はい。質問は、このFFNは何に対応するのかということですね。基本的に、出力埋め込みの次元と関心のあるタスクの間のマッピングがあります。分類タスクかもしれません。ポジティブかネガティブかのいずれかです。
したがって、ある長さの隠れ層があります。典型的には、その隠れ層への投影を学習するための2つの行列があり、それから隠れ層から出力への行列があります。埋め込みに基づいて分類タスクを行うために、これらの重みを学習します。
学生: はい、素晴らしい質問です。
講師(Shervin): それが私が待っていた質問でした。
学生: なぜこれらの他の出力埋め込みをすべて捨てるのですか?
講師(Shervin): 質問は、なぜこれらの他の出力埋め込みをすべて捨てるのかということですね。ここでは必要ないのです。分類タスクを行っています。[CLS]トークンの上で動作するという慣例として配置しました。
そして、このトークンの魔法は、EncoderにあるこれらすべてのSelf-Attentionメカニズムが、他の各トークンの表現をその表現に混合したということです。したがって、出力埋め込みは文脈を認識しています。
基本的に、これは分類に向けた埋め込みであり、これが線形層に接続するものです。そして、他のすべての埋め込みを捨てると言うとき、実際には分類のケースで行うことです。しかし、トークンレベルでの分類を行う場合、それぞれが使用される可能性があります。
例えば、質問応答について言ったとき、あるトークンが答えの開始位置か終了位置かを検出したい場合、典型的には、それぞれ答えの開始と終了を予測する2つのFFNを持ち、これらの埋め込みのそれぞれに適用します。
つまり、[CLS]トークンが特別なのは、慣例的にそれを文レベルの分類に使用することに決めたからです。しかし、技術的には、Self-Attentionメカニズムのおかげで、すべてのトークンの出力埋め込みが文脈を認識しています。各トークンは、Attentionを通じて他のすべてのトークンからの情報を集約しているのです。
他に質問はありますか?
学生: [CLS]のQuery、Key、Valueは何ですか?
講師(Shervin): 質問は、[CLS]のQuery、Key、Valueは何かということですね。他のすべてのトークンと同じプロセスになります。[CLS]トークンの埋め込みの表現をここで学習します。それがQueryに投影され、Keyに投影され、Valueに投影されます。すべてのAttention計算を行い、最終的に基本的に他のすべてのトークンに注意を向けたこの埋め込みが得られます。
答えは、他のトークンと同じだということです。1つのトークンとして扱ってください。任意のトークンである可能性があり、同じです。[CLS]は単に特別な名前が付けられた通常のトークンであり、Self-Attentionメカニズムを通じて他のすべてのトークンと相互作用します。
そして、すべてのトークンからの情報を集約した後、その最終的な表現を分類に使用するのです。
11. BERTの制限と拡張モデル
11.1 BERTの制限事項
講師(Shervin): それでは、ここで強調したいことの1つは、BERTにおいて、そしてELMOにおいても素晴らしかったことは、文脈的な埋め込みを持っているということです。ここで、学習したい任意の分類タスクに基づいて、これらの学習された埋め込みに基づいて任意の分類タスクを学習することが非常に簡単であることがわかります。
これは、ここで大いに評価された柔軟性であり、産業界で広く使用されています。感情検出や他の分類関連タスクに関するものは、現在、BERTのようなモデルを使用することが非常に一般的です。
それでは、その制限について少し話したいと思います。オリジナルの論文で見ると、コンテキスト長は512のサイズだったと思います。したがって、この初期の論文では典型的に制限されていました。
Afinは、完全に高い複雑性にならずに、このコンテキストサイズをさらに成長させる方法に関するテクニックについて言及しました。そして、ローカルAttentionを計算する近似方法などがあります。これらのトリックの使用は、妥当な計算要件の範囲内に留まりながら、コンテキストのサイズを成長させるのに役立ちます。
これがコンテキスト長に関する制限の1つです。512トークンは、多くのアプリケーションにとって十分ではありません。例えば、長い文書を分析したい場合や、複数の段落にわたる質問応答を行いたい場合、この制限は大きな障害になります。
もう1つの制限について話したいと思います。これは他のモデルが改善しようとする2つの制限です。1つ目は、レイテンシが高いと見なされる可能性があるということです。BERT-Baseでも約1億1000万パラメータがあります。これはかなり多いです。これをより小さく、より速くする方法はありますか?
特に、リアルタイムアプリケーションやリソースが制限されたデバイスでの展開を考えると、このモデルサイズは問題になります。エッジデバイスやモバイルアプリケーションでBERTを実行したい場合、1億1000万パラメータは大きすぎる可能性があります。
2つ目の制限は、MLMとNSPという2つの目的関数があることです。これら2つは本当に役立つのでしょうか?事前学習プロセスを簡素化する方法はありますか?
特にNSPに関しては、その有用性が後に疑問視されることになります。2つの文が連続しているかどうかを予測することが、本当に下流タスクに役立つ表現を学習するのに必要なのでしょうか?あるいは、MLMだけで十分なのでしょうか?
これらの疑問が、後続の研究、特にRoBERTaによって調査されることになります。これから見ていくように、BERTの制限を克服しようとする拡張モデルが登場しました。
11.2 DistilBERT:知識蒸留による軽量化
講師(Shervin): それでは、先ほど述べた2番目の制限、つまりコストに対する感度について見ていきましょう。BERT-Baseには約1億1000万パラメータがあります。これはかなり多いですよね。より小さく、より速くする方法はあるでしょうか?
そこで、まず最初に、Hinton、Vinyals、Jeff Deanからの引用を紹介したいと思います。これは非常に有益であり、持つべき良いマインドセットだと思います。「ソフトターゲットには、ほとんどすべての知識が含まれています」というものです。
これは彼らからの講義に含まれている引用であり、後に蒸留の概念の起源にいたと感じます。実際にすぐに見ることになりますが、モデルの分布を学習することが、ハードラベルを直接学習するよりも役立つことがわかります。
TeacherモデルとStudentモデルの概念があります。蒸留における目標は、より小さなモデルの出力分布を、より複雑なモデルに直接マッピングすることです。ハードラベルではなく、Teacherモデルの出力分布自体を学習するのです。
そして、これを最小化するために使用する目的関数は、KLダイバージェンス(カルバック・ライブラー情報量)です。これは基本的に、Teacherによって記述される世界において、Studentでモデル化することがどれだけ悪いかを述べます。したがって、基本的にStudent分布がTeacherの世界にどれだけ近いかを評価しようとします。
数式を見ると、KLダイバージェンスは次のように表されます:KL(T||S) = Σ T(x) log(T(x)/S(x))。ここで、Tはteacherの分布、Sはstudentの分布です。これを最小化することで、studentがteacherの知識を獲得します。
興味深い点として、yt分布が単なるハードラベルである場合、つまり1つの位置に1があり、他のすべての場所に0がある場合、クロスエントロピー損失が得られることがわかります。つまり、-log(ys)になります。これは非常に興味深いことです。ハードラベルによるトレーニングは、蒸留の特殊なケースと見なすことができるのです。
DistilBERT論文が行ったこと、ちなみにこれは非常にクリーンな論文で、わずか4ページですが非常に影響力があります。彼らが述べたのは、層の数を2削減すると、多くの利益が得られ、ほぼ同じ性能が得られるということです。これは非常に注目に値します。
具体的には、BERTの12層から10層を削減して6層にしました。これにより、モデルサイズが約40%削減され、推論速度が約60%向上しました。それでいて、BERT-Baseの性能の約97%を保持しています。
彼らは基本的に、この性能を保持する方法として蒸留を使用しました。これが、層の数を減らすことと並んで鍵となりました。蒸留がなければ、単に層を削減するだけでは性能が大きく低下していたでしょう。しかし、BERTをTeacherとして使用し、その知識を小さなモデルに転移することで、効率性と性能の優れたバランスを達成しました。
DistilBERTは、リソースが制限された環境やリアルタイムアプリケーションでの展開に特に有用であることが証明されました。エッジデバイスやモバイルアプリケーションで、BERTに近い性能を維持しながら、はるかに少ないメモリと計算量で動作できるのです。
11.3 RoBERTa:事前学習の改善
講師(Shervin): 最後に、RoBERTaについて話したいと思います。RoBERTaは、NSP目的関数を削除しても性能の低下がほとんどないことを研究しました。そこで彼らは単純にそれを削除しました。
これは重要な発見でした。オリジナルのBERT論文では、MLMとNSPの両方が重要であると考えられていましたが、RoBERTaの著者たちは、NSPタスクが実際には下流タスクの性能にほとんど貢献していないことを示しました。文レベルの関係を学習するという当初の仮定は、実際にはそれほど重要ではなかったのです。
そして、彼らはいくつかのトリックを追加しました。例えば、マスキングを動的に行うことです。与えられたテキストに対して、各エポックで、つまり同じ種類のテキストを見るたびに、マスキングを変更するのです。
これは非常に巧妙なアイデアです。BERTでは、事前処理の段階で一度マスキングパターンが決定され、トレーニング全体を通じて同じマスクが使用されていました。しかしRoBERTaでは、同じ文を見るたびに異なる位置がマスクされます。これにより、モデルはより堅牢な表現を学習し、特定のマスキングパターンに過適合することを防ぎます。
また、データ戦略もありました。彼らは、モデルが大幅に訓練不足であることを発見しました。そこで、データの多様性とサイズを大幅に増加させ、同じベンチマークでベンチマーク性能がかなり向上したことを確認しました。
具体的には、BERTが16GBのテキストデータでトレーニングされていたのに対し、RoBERTaは160GBのデータでトレーニングされました。10倍のデータ量です。さらに、トレーニングステップ数も大幅に増加させました。BERTが100万ステップだったのに対し、RoBERTaは50万ステップでより大きなバッチサイズを使用しました。
データの多様性も重要でした。より多くのドメインからのテキスト、より長いシーケンス、そしてより多様な文書を含めることで、モデルはより一般化された表現を学習できました。
そして実験結果に基づいて、彼らは実証的な改善を示しました。GLUEベンチマークやSQuAD、その他の多くのタスクで、RoBERTaはBERTを上回る性能を示しました。これらの改善は、NSPの削除、Dynamic Masking、そして特により多くのデータでのより長いトレーニングの組み合わせから来ていました。
RoBERTaの教訓は明確でした。より単純な目的関数(MLMのみ)、より多くのデータ、そしてより長いトレーニングが、より複雑な目的関数(MLM + NSP)よりも優れた結果をもたらすということです。これは、スケーリングの重要性と、時には「less is more」という原則が機械学習にも当てはまることを示しています。
これで今日の内容は以上です。皆さん、素晴らしい週末をお過ごしください。ありがとうございました。
学生たち: ありがとうございました。
Stanford CME295 Transformers & LLMs | Autumn 2025 | Lecture 2 - Transformer-Based Models & Tricks
For more information about Stanford’s graduate programs, visit: https://online.stanford.edu/graduate-education October 3, 2025 This lecture covers: • Attention approximation • MHA, MQA, GQA • Position embeddings (regular, learned) • RoPE and applications • Transformer-based architectures • BERT and its derivatives To follow along with the course schedule and syllabus, visit: https://cme295.stanford.edu/syllabus/ Chapters: 00:00:00 Introduction 00:01:30 Recap of Transformers 00:10:37 Overview of position embeddings 00:15:36 Sinusoidal embeddings 00:25:56 T5 bias, ALiBi 00:31:02 RoPE 00:43:42 Layer normalization 00:50:39 Sparse attention 00:55:38 Sharing attention heads 01:02:42 Transformer-based models 01:11:38 BERT deep dive 01:33:24 BERT finetuning 01:43:30 Extensions of BERT 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