注目の可視化、変幻自在の心臓|第6章 ディープ・ラーニング

Attention in transformers, step-by-step | DL6
Demystifying attention, the key mechanism inside transformers and LLMs.Instead of sponsored ad reads, these lessons are ...

前章では、トランスフォーマーの内部動作について一緒に見ていきました。これは大規模言語モデルや現代のAIの波における他の多くのツールの中核となる技術の1つです。2017年に発表された有名な論文「Attention is All You Need」で初めて登場し、この章ではこのアテンション機構とは何か、そしてデータをどのように処理するかを可視化しながら掘り下げていきます。
簡単に復習すると、ここで重要な背景として覚えておいてほしいのは以下の点です。私たちが学んでいるモデルの目的は、テキストを入力として受け取り、次に来る単語を予測することです。入力テキストは「トークン」と呼ばれる小さな断片に分割されます。これらは多くの場合、単語や単語の一部ですが、この動画の例を私たちが考えやすくするために、トークンは常に単語であると仮定して簡略化しましょう。
トランスフォーマーの最初のステップは、各トークンを高次元ベクトル、つまり「埋め込み」と呼ばれるものと関連付けることです。ここで最も重要な考え方として覚えておいてほしいのは、可能なすべての埋め込みのこの高次元空間における方向が、意味的な意味と対応しうるということです。
前章では、方向がどのように性別と対応しうるかの例を見ました。この空間で特定のステップを加えることで、男性名詞の埋め込みから対応する女性名詞の埋め込みに移動できるという意味です。これは単なる一例で、この高次元空間における他の多くの方向が、単語の意味の数多くの他の側面と対応すると想像できるでしょう。
トランスフォーマーの目的は、これらの埋め込みを徐々に調整して、個々の単語を単にエンコードするだけでなく、より豊かな文脈的意味を組み込むことです。
最初に言っておきますが、多くの人がトランスフォーマーの重要な部分であるこのアテンション機構をとても混乱させると感じているので、理解するのに時間がかかっても心配しないでください。計算の詳細やすべての行列乗算に飛び込む前に、アテンションが可能にしたい行動の例をいくつか考えてみる価値があると思います。
「American true mole」「one mole of carbon dioxide」「take a biopsy of the mole」という句を考えてみましょう。私たちは「mole」という単語が、文脈に基づいてそれぞれ異なる意味を持っていることを知っています。しかし、トランスフォーマーの最初のステップ、つまりテキストを分割して各トークンをベクトルと関連付けるステップの後では、「mole」に関連付けられたベクトルはすべての場合で同じになります。なぜなら、この初期のトークン埋め込みは事実上、文脈を参照しないルックアップテーブルだからです。周囲の埋め込みがこの埋め込みに情報を渡す機会があるのは、トランスフォーマーの次のステップでのみです。
頭に思い浮かべるべき図は、この埋め込み空間に「mole」という単語の複数の異なる意味をエンコードする複数の異なる方向があり、適切に訓練されたアテンションブロックが、文脈の関数として、一般的な埋め込みに何を加えてこれらの特定の方向の1つに移動させるべきかを計算するというものです。
別の例として、「tower」という単語の埋め込みを考えてみましょう。これはおそらく、他の多くの大きな、高い名詞と関連する、この空間における非常に一般的で非特定的な方向です。この単語の直前に「Eiffel」があった場合、このメカニズムがこのベクトルを更新して、より具体的にエッフェル塔をエンコードする方向を指すようにしたいと想像できるでしょう。おそらくパリやフランス、鉄でできたものに関連するベクトルと相関しています。また、「miniature」という単語が前にあった場合、ベクトルはさらに更新されて、もはや大きな、高いものとは相関しなくなるでしょう。
単語の意味を洗練させるだけでなく、より一般的に、アテンションブロックはモデルが1つの埋め込みにエンコードされた情報を別の埋め込みに移動させることを可能にします。これは潜在的にかなり離れた場所にあるものや、単一の単語よりもはるかに豊かな情報を持つものかもしれません。
前章で見たように、すべてのベクトルが多くの異なるアテンションブロックを含むネットワークを流れた後、次のトークンの予測を生成するために実行する計算は、完全にシーケンスの最後のベクトルの関数です。例えば、入力するテキストがミステリー小説のほとんど全体で、最後の方で「したがって、殺人者は」と読むとします。モデルが次の単語を正確に予測しようとすれば、シーケンスの最後のベクトル(最初は単に「は」という単語を埋め込んでいただけ)は、すべてのアテンションブロックによって更新されて、個々の単語よりもはるかに多くを表現し、次の単語を予測するのに関連する完全な文脈ウィンドウからのすべての情報を何らかの形でエンコードする必要があります。
しかし、計算を段階的に説明するために、もっと簡単な例を取り上げましょう。入力に「a fluffy blue creature roamed the verdant forest」というフレーズが含まれているとします。そして今のところ、私たちが気にしている唯一の更新のタイプは、形容詞が対応する名詞の意味を調整することだとします。
これから説明することは、アテンションの「単一ヘッド」と呼ばれるものです。後で、アテンションブロックが並列で実行される多くの異なるヘッドで構成されていることを見ていきます。
繰り返しますが、各単語の初期埋め込みは、文脈なしでその特定の単語の意味のみをエンコードする高次元ベクトルです。実際には、それだけではありません。単語の位置もエンコードします。位置のエンコード方法についてはもっと言うべきことがありますが、今のところ知っておく必要があるのは、このベクトルのエントリが単語が何であるかと文脈内のどこにあるかの両方を教えてくれるということです。これらの埋め込みを文字eで表しましょう。
目標は、一連の計算を行って新しい洗練された埋め込みのセットを生成することです。例えば、名詞に対応する埋め込みが対応する形容詞から意味を取り込んでいるようなものです。そして、ディープラーニングのゲームをプレイするように、私たちは関与するほとんどの計算が行列ベクトル積のように見えることを望んでいます。ここで行列は調整可能な重みで満たされており、これらはモデルがデータに基づいて学習するものです。
明確にしておくと、形容詞が名詞を更新するというこの例は、アテンションヘッドが行う可能性のある行動のタイプを説明するために作り上げているだけです。多くのディープラーニングと同様に、真の行動は、ある費用関数を最小化するために膨大な数のパラメータを調整し、微調整することに基づいているため、はるかに解析が難しいです。ただ、このプロセスに関与するパラメータで満たされたすべての異なる行列を段階的に見ていく際に、それが行う可能性のあるものの想像上の例を持つことは、すべてをより具体的に保つのに本当に役立つと思います。
このプロセスの最初のステップでは、「creature」のような各名詞が「hey, are there any adjectives sitting in front of me?」という質問をしていると想像できるかもしれません。そして「fluffy」と「blue」という単語がそれぞれ「yeah, I’m an adjective and I’m in that position」と答えることができます。
その質問は、何らかの形で別のベクトル、つまり数字のリストとしてエンコードされ、これをこの単語の「クエリ」と呼びます。ただし、このクエリベクトルは埋め込みベクトルよりもはるかに小さな次元、例えば128次元を持ちます。このクエリを計算することは、wqとラベル付けされる特定の行列を取り、それを埋め込みに掛けることのように見えます。
少し圧縮して、そのクエリベクトルをqと書きましょう。そして、この矢印のように行列を置くのを見るたびに、矢印の始点にあるベクトルにこの行列を掛けると、矢印の終点にあるベクトルが得られることを表しています。この場合、この行列を文脈内のすべての埋め込みに掛けて、各トークンに1つのクエリベクトルを生成します。
この行列のエントリはモデルのパラメータであり、つまり真の行動はデータから学習され、実際には、特定のアテンションヘッドでこの行列が行うことは解析が難しいです。しかし、私たちのために、それが学習することを望むかもしれない例を想像すると、このクエリ行列が名詞の埋め込みを、この小さなクエリ空間の特定の方向にマップすると仮定します。これは何らかの形で先行位置にある形容詞を探すという概念をエンコードします。他の埋め込みに対して何をするかについては、誰にもわかりません。おそらく同時に他の目標を達成しようとしているのかもしれません。今のところ、私たちは名詞にレーザーフォーカスしています。
同時に、これに関連して「キー行列」と呼ばれる2つ目の行列があり、これもすべての埋め込みに掛けられます。これにより、「キー」と呼ばれる2つ目のベクトルのシーケンスが生成されます。概念的には、キーをクエリに潜在的に答えるものと考えたいと思います。
このキー行列も調整可能なパラメータで満たされており、クエリ行列と同様に、埋め込みベクトルを同じ小さな次元の空間にマップします。キーは、互いに密接に整列しているときにクエリと一致すると考えます。
私たちの例では、キー行列が「fluffy」や「blue」のような形容詞を、「creature」という単語によって生成されたクエリと密接に整列したベクトルにマップすると想像するでしょう。
各キーが各クエリにどれだけ適合しているかを測定するために、可能なすべてのキークエリペア間のドット積を計算します。私は、多くのドットで満たされたグリッドを可視化するのが好きで、大きなドットはより大きなドット積、つまりキーとクエリが整列する場所に対応します。
私たちの形容詞名詞の例では、次のようになります。「fluffy」と「blue」によって生成されたキーが「creature」によって生成されたクエリと本当に密接に整列しているならば、これら2つの場所でのドット積は大きな正の数になるでしょう。用語では、機械学習の人々は、これは「fluffy」と「blue」の埋め込みが「creature」の埋め込みに「注意を払う」ということを意味すると言うでしょう。
対照的に、「the」のような他の単語のキーと「creature」のクエリとのドット積は、互いに無関係であることを反映する小さな値または負の値になるでしょう。
したがって、私たちは負の無限大から正の無限大までの任意の実数である可能性のある値のグリッドを持っており、これは各単語が他のすべての単語の意味を更新するのにどれだけ関連しているかのスコアを与えます。
私たちがこれらのスコアを使用しようとしている方法は、各列に沿って特定の重み付き和を取ることで、関連性によって重み付けされます。したがって、値が負の無限大から正の無限大まで広がるのではなく、これらの列の数値が0から1の間になり、各列が1に加算されることを望んでいます。まるで確率分布であるかのようです。
前章から来た人なら、私たちが何をする必要があるかがわかるでしょう。これらの列のそれぞれにソフトマックスを適用して、値を正規化します。私たちの図では、すべての列にソフトマックスを適用した後、このグリッドにこれらの正規化された値を入力します。この時点で、各列を左側の単語が上部の対応する値にどれだけ関連しているかに応じた重みを与えるものとして安全に考えることができます。このグリッドを「アテンションパターン」と呼びます。
ここで、オリジナルのトランスフォーマー論文を見ると、これをすべて非常にコンパクトに書き下す方法があります。ここで変数qとkはそれぞれクエリとキーベクトルの完全な配列を表しており、これらの小さなベクトルは埋め込みにクエリ行列とキー行列を掛けることで得られます。分子のこの表現は、キーとクエリのペア間のすべての可能なドット積のグリッドを表す非常にコンパクトな方法です。
言及しなかった小さな技術的詳細として、数値の安定性のために、これらのすべての値をそのキークエリ空間の次元の平方根で割ることが役立つことがあります。そして、全体の表現を囲むこのソフトマックスは、列ごとに適用されることを意味します。
vという用語については、すぐに話します。その前に、これまでスキップしてきた別の技術的詳細があります。トレーニングプロセス中、与えられたテキスト例でこのモデルを実行し、すべての重みが少し調整され、パッセージの真の次の単語に割り当てる確率に基づいて報酬または罰を与える際、このパッセージの各初期サブシーケンスに続くすべての可能な次のトークンを同時に予測することで、トレーニングプロセス全体をはるかに効率的にすることができます。
例えば、私たちが焦点を当ててきたフレーズでは、「creature」の後に続く単語や「the」の後に続く単語も予測しているかもしれません。これは非常に素晴らしいことです。なぜなら、そうでなければ単一のトレーニング例となるものが事実上多くの例として機能するからです。
私たちのアテンションパターンの目的のために、これは後の単語が早い単語に影響を与えることを決して許さないことを意味します。そうしないと、次に来るものの答えを一種の与えてしまう可能性があるからです。これが意味するのは、ここにあるこれらのスポット、つまり後のトークンが早いトークンに影響を与えることを表すものを、何らかの形でゼロに強制したいということです。
最も簡単に思いつくことは、それらをゼロに設定することですが、そうすると列が1に加算されなくなり、正規化されなくなります。そこで、一般的な方法は、ソフトマックスを適用する前に、これらのすべてのエントリをマイナス無限大に設定することです。そうすると、ソフトマックスを適用した後、それらはすべてゼロに変換されますが、列は正規化されたままです。このプロセスを「マスキング」と呼びます。
適用しないバージョンのアテンションもありますが、私たちのGPTの例では、これはトレーニング段階の方がチャットボットとして実行する場合などよりも関連性が高いですが、後のトークンが早いトークンに影響を与えるのを防ぐために、常にこのマスキングを適用します。
このアテンションパターンについて反映する価値のあるもう1つの事実は、そのサイズが文脈サイズの2乗に等しいということです。これが、文脈サイズが大規模言語モデルにとって本当に大きなボトルネックになる理由であり、それをスケールアップすることは簡単ではありません。ご想像の通り、より大きな文脈ウィンドウへの欲求に動機付けられて、最近の数年間でアテンションメカニズムにいくつかのバリエーションが見られ、文脈をよりスケーラブルにすることを目指していますが、ここでは私たちは基本に焦点を当てています。
さて、このパターンを計算することで、モデルはどの単語がどの他の単語に関連しているかを推論できます。今度は実際に埋め込みを更新し、単語が関連する他の単語に情報を渡すことを可能にする必要があります。例えば、「Fluffy」の埋め込みが「Creature」に変化を引き起こし、この12,000次元の埋め込み空間の異なる部分に移動させ、より具体的にふわふわした生き物をエンコードすることを望んでいます。
ここで私がしようとしているのは、まず最も直接的な方法を示すことです。ただし、マルチヘッドアテンションの文脈では、これが少し修正される方法があります。この最も直接的な方法は、3つ目の行列、「値行列」と呼ばれるものを使用することです。これを最初の単語、例えば「Fluffy」の埋め込みに掛けます。
この結果を「値ベクトル」と呼び、これを2つ目の単語、この場合は「Creature」の埋め込みに加えるものです。したがって、この値ベクトルは埋め込みと同じ非常に高次元の空間に存在します。
この値行列を単語の埋め込みに掛けるとき、それは次のように言っているように考えることができます。「この単語が他の何かの意味を調整するのに関連している場合、その何かの埋め込みに何を加えるべきか、それを反映するために」。
図に戻ると、すべてのキーとクエリを脇に置いておきましょう。アテンションパターンを計算した後、それらは終わりです。そして、この値行列を取り、それをすべての埋め込みに掛けて、値ベクトルのシーケンスを生成します。これらの値ベクトルは対応するキーと関連付けられていると考えることができます。
このダイアグラムの各列に対して、各値ベクトルにその列の対応する重みを掛けます。例えば、ここでは「Creature」の埋め込みの下で、「Fluffy」と「Blue」の値ベクトルの大きな割合を加え、他のすべての値ベクトルはゼロに、または少なくともほぼゼロになります。
そして最後に、この列に関連付けられた埋め込み、以前は「Creature」の文脈のない意味をエンコードしていたものを実際に更新する方法は、この列のこれらのすべての再スケールされた値を合計し、追加したい変更を生成します。これをdelta-eとラベル付けし、そして元の埋め込みに加えます。
うまくいけば、結果として得られるのは、ふわふわした青い生き物のような、より文脈的に豊かな意味をエンコードするより洗練されたベクトルです。
もちろん、これを1つの埋め込みに対してだけ行うのではなく、この図のすべての列に同じ重み付き和を適用し、変更のシーケンスを生成し、これらの変更をすべて対応する埋め込みに加えることで、アテンションブロックから出てくる洗練された埋め込みの完全なシーケンスを生成します。
全体を見ると、このプロセス全体が「単一のアテンションヘッド」と呼ばれるものです。これまで説明してきたように、このプロセスは3つの異なる行列、すべて調整可能なパラメータで満たされた、キー、クエリ、値によってパラメータ化されています。
ここで一瞬、前章で始めたことを続けて、GPT-3の数字を使用してモデルパラメータの総数を数え上げたいと思います。これらのキーとクエリ行列はそれぞれ12,288列を持ち、埋め込み次元に一致し、128行を持ち、その小さなキークエリ空間の次元に一致します。これにより、それぞれに約150万のパラメータが追加されます。
対照的に、その値行列を見ると、これまでの説明では、それは12,288列と12,288行を持つ正方行列であることを示唆しています。なぜなら、その入力と出力の両方がこの非常に大きな埋め込み空間に存在するからです。もしそうだとすると、それは約1億5000万の追加パラメータを意味します。
明確にしておくと、そうすることもできます。値マップにキーとクエリよりも桁違いに多くのパラメータを割り当てることもできます。しかし、実際には、この値マップに割り当てられるパラメータの数をキーとクエリに割り当てられる数と同じにする方が、はるかに効率的です。これは特に、複数のアテンションヘッドを並列で実行する設定で関連します。
これがどのように見えるかというと、値マップは2つのより小さな行列の積として因数分解されます。概念的には、私はまだ全体的な線形マップについて考えることをお勧めします。入力と出力の両方がこのより大きな埋め込み空間にあるものです。例えば、「blue」の埋め込みをこの「青さ」の方向に取り、それを名詞に加えるようなものです。ただし、行の数が少なく、通常はキークエリ空間と同じサイズです。
これが意味するのは、大きな埋め込みベクトルをはるかに小さな空間にマップすると考えることができるということです。これは従来の命名ではありませんが、私はこれを「値ダウン行列」と呼ぶことにします。2つ目の行列は、この小さな空間から埋め込み空間に戻ってマップし、実際の更新に使用するベクトルを生成します。これを「値アップ行列」と呼びますが、これも従来のものではありません。
ほとんどの論文でこれが書かれている方法は少し異なって見えます。すぐに話しますが、私の意見では、それは物事を概念的にもう少し混乱させる傾向があります。
ここで線形代数の専門用語を使うと、私たちが基本的に行っているのは、全体的な値マップを低ランク変換に制約することです。
パラメータ数に戻ると、これら4つの行列はすべて同じサイズを持ち、それらをすべて合計すると、1つのアテンションヘッドに約630万のパラメータがあります。
ちょっとしたサイドノートとして、もう少し正確に言うと、これまで説明したすべては「セルフアテンションヘッド」と呼ばれるものです。これは、他のモデルで登場する変種である「クロスアテンション」と区別するためです。これは私たちのGPTの例には関係ありませんが、興味があれば、クロスアテンションは2つの異なるタイプのデータを処理するモデルに関係します。例えば、ある言語のテキストと、翻訳の進行中の一部である別の言語のテキスト、または音声入力とその進行中の転写などです。
クロスアテンションヘッドはほとんど同じように見えます。唯一の違いは、キーとクエリのマップが異なるデータセットに作用することです。例えば、翻訳を行うモデルでは、キーは1つの言語から来るかもしれませんが、クエリは別の言語から来るかもしれません。そしてアテンションパターンは、1つの言語のどの単語が別の言語のどの単語に対応するかを記述する可能性があります。そしてこの設定では、通常マスキングは適用されません。なぜなら、後のトークンが早いトークンに影響を与えるという概念は本当にないからです。
しかし、セルフアテンションに焦点を当てると、ここまでのすべてを理解し、ここで止まるとすれば、アテンションが本当に何であるかの本質を理解することになります。私たちに残されているのは、これを何度も何度も行うという意味を説明することだけです。
私たちの中心的な例では、形容詞が名詞を更新することに焦点を当てましたが、もちろん文脈が単語の意味に影響を与える方法は多くあります。「they crashed the」という単語が「car」の前にあれば、その車の形状や構造に影響を与えます。そして多くの関連性はより文法的でないかもしれません。「wizard」という単語が「Harry」と同じ段落のどこかにあれば、これはハリー・ポッターを指している可能性を示唆しますが、代わりに「Queen」「Sussex」「William」という単語がその段落にあれば、おそらくHarryの埋め込みは代わりに王子を指すように更新されるべきでしょう。
想像できる異なるタイプの文脈的更新のそれぞれに対して、これらのキーとクエリ行列のパラメータは、異なるアテンションパターンを捉えるために異なっているでしょう。そして、私たちの値マップのパラメータは、埋め込みに何を加えるべきかに基づいて異なっているでしょう。そして再度、実際にはこれらのマップの真の振る舞いは解釈がはるかに難しく、重みは次のトークンを予測するという目標を最もよく達成するために、モデルが必要とするものを行うように設定されています。
以前に言ったように、これまで説明したすべてはアテンションの「単一ヘッド」であり、トランスフォーマー内の完全なアテンションブロックは「マルチヘッドアテンション」と呼ばれるもので構成されています。ここでは、これらの操作の多くを並列で実行し、それぞれが独自のキー、クエリ、値マップを持ちます。例えば、GPT-3は各ブロック内に96のアテンションヘッドを使用しています。
それぞれがすでに少し混乱するものであることを考えると、確かに頭の中で保持するのは多くのことです。非常に明示的に説明すると、これは96の異なるキーとクエリ行列があり、96の異なるアテンションパターンを生成することを意味します。そして各ヘッドには、96の値ベクトルのシーケンスを生成するために使用される独自の値行列があります。これらはすべて、対応するアテンションパターンを重みとして使用して加算されます。
これが意味するのは、文脈内の各位置、各トークンに対して、これらのヘッドのそれぞれがその位置の埋め込みに加えられる提案された変更を生成するということです。そこで行うのは、これらの提案された変更をすべて、各ヘッドに1つずつ合計し、結果をその位置の元の埋め込みに加えることです。
ここでのこの全体の合計が、このマルチヘッドアテンションブロックから出力される1つのスライス、その他の端から飛び出す洗練された埋め込みの1つとなります。
繰り返しますが、これは考えるべきことが多いので、理解するのに時間がかかっても全く心配しないでください。全体的なアイデアは、多くの異なるヘッドを並列で実行することで、モデルに文脈が意味を変える多くの異なる方法を学習する能力を与えるということです。
96のヘッドを持つ実行中のパラメータ数の集計を引き上げると、各ヘッドにはこれら4つの行列の独自のバリエーションが含まれているため、マルチヘッドアテンションの各ブロックには約6億のパラメータがあります。
トランスフォーマーについてさらに読む人のために、本当に言及すべき少し厄介なことが1つあります。値マップがこれら2つの異なる行列に分解されることを覚えていますか?私は値ダウンと値アップ行列とラベル付けしました。私が物事を枠付けた方法は、各アテンションヘッド内でこのペアの行列を見ることを示唆していました。そしてもちろん、このように実装することもできます。それは有効な設計でしょう。
しかし、論文で見られる方法と実際に実装される方法は少し異なって見えます。これらの値アップ行列は、各ヘッドに対して1つの巨大な行列にステープルで留められており、これを出力行列と呼び、マルチヘッドアテンションブロック全体に関連付けられています。そして、人々が特定のアテンションヘッドの値行列について言及するのを見たとき、彼らは通常、この最初のステップ、つまり私が小さな空間への値ダウン投影とラベル付けしていたものだけを指しています。
好奇心旺盛な人のために、画面上のノートを残しました。これは主要な概念的ポイントから注意をそらす危険のある詳細の1つですが、他のソースでこれについて読む場合に備えて指摘しておきたいと思います。
すべての技術的なニュアンスを脇に置いて、前章のプレビューで、トランスフォーマーを流れるデータが単一のアテンションブロックを通過するだけではないことを見ました。1つには、多層パーセプトロンと呼ばれるこれらの他の操作も通過します。次の章でそれらについてもっと詳しく説明します。
そして、これらの操作の両方の多くの多くのコピーを繰り返し通過します。これが意味するのは、ある単語が文脈の一部を吸収した後、この洗練された埋め込みがその洗練された周囲によってさらに影響を受ける多くの機会があるということです。
ネットワークの下に行くほど、各埋め込みがより多くの意味を他のすべての埋め込みから取り込み、それ自体がより洗練されていくにつれて、単なる記述子や文法構造を超えた、与えられた入力についてのより高いレベルでより抽象的なアイデアをエンコードする能力があることが期待されます。感情やトーン、それが詩であるかどうか、その作品に関連する基本的な科学的真理など、そういったものです。
もう一度スコアキーピングに戻ると、GPT-3には96の異なる層が含まれており、したがってキー、クエリ、値のパラメータの総数はさらに96倍されます。これにより、すべてのアテンションヘッドに専念する異なるパラメータの合計は、ちょうど580億未満になります。
これは確かに多いですが、合計175億のうちの約3分の1にすぎません。したがって、アテンションがすべての注目を集めているにもかかわらず、パラメータの大部分はこれらのステップの間に座っているブロックから来ています。
次の章では、これらの他のブロックについてもっと詳しく説明し、トレーニングプロセスについてもっと詳しく説明します。アテンションメカニズムの成功の大きな部分は、それが可能にする特定の種類の振る舞いというよりも、非常に並列化可能であるという事実です。つまり、GPUを使用して短時間で大量の計算を実行できるということです。
過去10年か20年のディープラーニングについての大きな教訓の1つが、スケールだけでモデルのパフォーマンスに大きな質的改善をもたらすように見えるということであることを考えると、これを可能にする並列化可能なアーキテクチャには大きな利点があります。
これらのことについてもっと学びたい場合は、説明の中にたくさんのリンクを残しています。特に、Andrej KarpathyやChris Olaが制作したものは純金のようなものです。
この動画では、現在の形でのアテンションにただ飛び込みたかったのですが、私たちがここに至った経緯やこのアイデアを自分で再発明する方法についてもっと知りたい場合は、私の友人のVivekがちょうどその動機付けをもっと与える動画を2つアップロードしました。
また、The Art of the Problemチャンネルのブリット・クルーズには、大規模言語モデルの歴史についての本当に素晴らしい動画があります。ありがとうございました。

コメント

タイトルとURLをコピーしました