マトリックスシミュレーション! Transformer の大型モデルの 3D 視覚化。GPT-3 と Nano-GPT の各層がはっきりと見える

マトリックスシミュレーション! Transformer の大型モデルの 3D 視覚化。GPT-3 と Nano-GPT の各層がはっきりと見える
「マトリックスシミュレーション」の世界は本当に存在するかもしれない。

人間のニューロンをシミュレートし、進化を続けるトランスフォーマー モデルは、これまで常に理解不能なものでした。

多くの科学者がこのブラックボックスを開けて、それがどのように機能するかを調べようと試みてきました。

そして今、ビッグモデルのマトリックスワールドが本当に開かれました!

ソフトウェア エンジニアの Brendan Bycroft 氏は、「大規模モデルの仕組みを 3D で視覚化する」という Web サイトを作成し、HN リストでトップになりました。その効果は非常に衝撃的で、LLM の動作原理を数秒で理解できます。

写真

GPT-3 には 1750 億個のパラメータと 8 列のモデル レイヤーがあり、画面全体に密集しています。

写真

GPT-2 モデルのさまざまなパラメータ バージョンのアーキテクチャの視覚化。大きな違いがあります。以下は、150億のパラメータを持つGPT-2(XL)と、1億2400万のパラメータを持つGPT-2(Small)です。

写真

写真

この 3D モデルの視覚化では、大規模なモデル コンテンツ生成プロセスの各ステップも表示されます。

ここで、Bycroft 氏は主に、OpenAI の科学者 Andrej Karpathy 氏が作成した、85,000 個のパラメータを持つ軽量 GPT モデル NanoGPT について詳しく説明します。

写真

アドレス: https://bbycroft.net/llm

この視覚化を見ると、ChatGPT の頭脳を理解できます。

GPT-2 (Small) から GPT-3 へのパラメータ スケールの飛躍は驚くべきものです。

写真

バイクロフト氏は、このガイドは機械学習のほんの一部に過ぎないトレーニングではなく、モデルの推論に重点を置いていると述べた。この特定の例では、モデルの重みは事前にトレーニングされており、推論プロセスを使用して出力が生成されます。

もちろん、この視覚化 Web サイトは、PyTorch で Karpathy が作成した minGPT と YouTube ビデオ シリーズ「Neural Networks: Zero to Hero」からもインスピレーションを得ています。

次に、Transformer モデルの各レイヤーを詳しく見ていきましょう。

導入

デモンストレーションを容易にするために、Brendan Bycroft は NanoGPT に非常に単純なタスクを与えました。

6 文字のシーケンス CBABBC を取得し、アルファベット順、つまり「ABBBCC」に並べ替えます。

写真

各文字をトークンと呼び、モデルのさまざまなトークンのコレクションがその語彙を構成します。

写真

このテーブルでは、各トークンにトークン インデックスとなる番号が割り当てられています。これで、この一連の数字をモデルに入力できます: "2 1 0 1 1 2"

写真

3D ビューでは、各緑色のセルは処理中の数値を表し、各青色のセルは重みを表します。

写真

シーケンス内の各数値は、まず 48 要素のベクトルに変換されます。これを埋め込みと呼びます。

写真

次に、埋め込みはモデルに送られ、一連の Transformer レイヤーを通過し、最終的に最下層に到達します。

写真

それで、出力は何でしょうか?

シーケンス内の次のトークンの予測。したがって、シーケンスの 6 番目のトークンでは、次のトークンが「A」、「B」、または「C」になる確率が得られます。

この場合、モデルは「A」になることをほぼ確信しています。

これで、この予測をモデルの最上位層にフィードバックし、プロセス全体を繰り返すことができます。

埋め込み

これまで、単純なルックアップ テーブルを使用してトークンを整数の文字列にマップする方法を見てきました。

これらの整数、つまりトークン インデックスは、モデル内で最初に表示される唯一のものです。ここからは浮動小数点数(10進数)を扱います。

4 番目のトークン (インデックス 3) を例にとり、入力埋め込みの 4 番目の列ベクトルを生成するためにどのように使用されるかを確認します。

写真

トークン インデックス (この場合は B = 1) を使用して、左トークン埋め込み行列の 2 番目の列を選択します。ここでは 0 ベースのインデックスを使用しているため、最初の列のインデックスは 0 であることに注意してください。

これにより、サイズ C = 48 の列ベクトルが生成されます。これを「トークン埋め込み」と呼びます。

写真

主に4番目の位置(t = 3)のトークンBを調べるため、位置埋め込み行列の4列目を使用します。

これにより、サイズ C = 48 の列ベクトルも生成され、これを位置埋め込みと呼びます。

写真

位置とトークンの埋め込みの両方がトレーニング中に学習されることに注意してください (青で示されています)。

これで 2 つの列ベクトルができたので、これらを加算して、サイズ C=48 の別の列ベクトルを生成します。

写真

ここで、入力シーケンス内のすべてのトークンに対して同じプロセスを実行し、トークンの値とその位置を含むベクトルのセットを作成します。

写真

(計算内容とその計算元を確認するには、入力埋め込み行列の個々のセルで自由に停止してください。)

入力シーケンス内のすべてのトークンに対してこのプロセスを実行すると、サイズ TxC のマトリックスが生成されることがわかります。

T は時間を表します。つまり、シーケンス内の後のトークンは、時間的に後のトークンと考えることができます。 C はチャネルの略ですが、「特徴」や「次元」または「埋め込みサイズ」とも呼ばれます。

この行列は「入力埋め込み」と呼ばれ、モデルを通じて渡されます。

このチュートリアルでは、それぞれの長さが C である T 列で構成される行列のコレクションについて説明します。

写真

レイヤーノルム

前のセクションの「入力埋め込み」マトリックスは、最初の Transformer モジュールへの入力です。

Transformer モジュールの最初のステップは、このマトリックスに対して「レイヤー正規化」を実行することです。これは、行列の各列の値を個別に正規化する操作です。

写真

正規化はディープ ニューラル ネットワークのトレーニングにおける重要なステップであり、トレーニング中のモデルの安定性を向上させるのに役立ちます。

各列を個別に見ることができるので、ここでは列 4 (t=3) に注目します。

写真

私たちの目標は、この列の平均を 0 に、標準偏差を 1 にすることです。これを行うには、列の 2 つの量 (平均 (μ) と標準偏差 (σ)) を計算し、平均を減算して標準偏差で割ります。

写真

ここでは、平均を表すためにE[x]を使用し、分散を表すためにVar[x]を使用します(長さCの列)。分散は標準偏差の二乗です。 ε項

ゼロ除算を防ぐためです。

これらの値を列内のすべての値に適用したいため、集計レイヤーで計算して保存します。

最後に、正規化された値を取得した後、列内の各要素に学習した重み (γ) を掛け、バイアス (β) を追加して、最終的に正規化された値を取得します。

写真

この正規化を入力埋め込み行列の各列に対して実行し、その結果が正規化された入力埋め込みとなり、自己注意層に渡されます。

写真

自己注意

自己注意層はおそらく Transformer と GPT の中核です。この段階では、「入力埋め込み」マトリックス内の列が互いに「通信」します。これまでのところ、他のすべての段階では、列は独立して存在していました。

自己注意層は複数のヘッドで構成されており、ここではそのうちの 1 つのヘッドのみに焦点を当てます。

写真

最初のステップは、正規化された入力埋め込み行列の C 列から各列に 3 つのベクトルを生成することです。これらのベクトルは Q、K、および V ベクトルです。

Q: クエリベクトル

K : キーベクトル

V : 値ベクトル

これらのベクトルの 1 つを生成するには、行列とベクトルの乗算を実行し、バイアスを追加します。

各出力ユニットは入力ベクトルの線形結合です。たとえば、Q ベクトルの場合、これは Q 重み行列の行と入力行列の列の間のドット積によって実行されます。

写真

よく見かけるドット積演算は非常に単純です。最初のベクトルの各要素を 2 番目のベクトルの対応する要素とペアにして、そのペアを乗算し、結果を加算します。

写真

これは、各出力要素が入力ベクトル内のすべての要素(重みによって決定)の影響を受けるようにするための一般的な簡単な方法です。そのため、ニューラル ネットワークによく登場します。

Q、K、Vベクトルの各出力ユニットに対してこれを繰り返します。

写真

Q、K、V ベクトルをどうすればよいですか?名前からヒントが得られます。「キー」と「値」はソフトウェアの辞書を思い起こさせます。

キーは値にマッピングされます。そして、「クエリ」は値を検索するために使用します。

写真

自己注意の場合、単一の項を返すのではなく、項の重み付けされた組み合わせを返します。

この重みを見つけるには、Q ベクトルと K ベクトルのドット積を実行します。重みを正規化し、最後に対応する V ベクトルと乗算して合計します。

写真

より具体的な例として、クエリを開始する列 6 (t=5) を見てみましょう。

写真

探している {K、V} 項目は過去 6 列であり、Q 値は現在の時刻です。

まず、現在の列 (t=5) の Q ベクトルと前の列の K ベクトル間のドット積を計算します。次に、注目行列の対応する行 (t=5) に格納されます。

写真

これらのドット積は、2 つのベクトルがどの程度類似しているかを測定する方法です。非常に類似している場合、ドット積は大きくなります。 2 つのベクトルが大きく異なる場合、内積は小さくなるか負になります。

クエリ ベクトルのみが過去のキー ベクトルで操作され、因果的な自己注意になります。言い換えれば、トークンは「未来を予見する」ことはできません。

もう 1 つの重要な要素は、ドット積をとった後、sqrt(A) で割ることです。ここで、A は Q/K/V ベクトルの長さです。このスケーリングは、大きな値が正規化の次のステップ (ソフトマックス) を支配するのを防ぐために行われます。

ソフトマックス演算 (後述) は省略し、各行の合計が 1 になるように正規化されることだけ述べます。

写真

最後に、この列の出力ベクトル (t=5) を取得できます。正規化された自己注意行列の (t=5) 行を見て、各要素を他の列の対応する V ベクトルと乗算します。

写真

次に、これらのベクトルを加算して出力ベクトルを取得します。したがって、出力ベクトルは高得点の V ベクトルによって支配されることになります。

プロセスがわかったので、すべての列に対して実行してみましょう。


これは、自己注意層の 1 つのヘッドが行うことです。

したがって、自己注意の主な目標は、各列ベクトルが他の列ベクトルから関連情報を見つけ、そのクエリベクトルを他の列ベクトルのキー値と比較することによってその値を抽出することです。しかし、過去の情報しか調べられないという追加の制限があります。

投影

自己注意プロセスの後、各ヘッドから出力が得られます。これらの出力は、Q ベクトルと K ベクトルの影響が適切に混合された V ベクトルです。

各ヘッドからの出力ベクトルを結合するには、それらを積み重ねるだけです。したがって、時刻 t=4 では、長さ A=16 のベクトル 3 つが、長さ C=48 のベクトル 1 つに追加されます。

写真

GPT では、ヘッド (A=16) のベクトルの長さが C/num_heads に等しいことに注意してください。これにより、再び積み重ねたときに元の長さ C が得られることが保証されます。

これに基づいて投影を実行し、このレイヤーの出力を取得します。これは、列ごとに単純な行列とベクトルの乗算とバイアスを加えたものです。

写真

これで、自己注意層の出力が得られました。

この出力を次のステージに直接渡すのではなく、要素ごとに入力埋め込みに追加します。緑色の垂直矢印で表されるこのプロセスは、残余接続または残余経路と呼ばれます。

写真

レイヤーの正規化と同様に、残差パスはディープ ニューラル ネットワークの効果的な学習を可能にするために非常に重要です。

自己注意の結果が得られたので、それを Transformer の次の部分であるフィードフォワード ニューラル ネットワークに渡すことができます。

マルチレベル

自己注意層の後の Transformer モジュールの下半分は MLP (多層パーセプトロン) です。長い名前ですが、これは 2 層からなる単純なニューラル ネットワークです。

自己注意と同様に、ベクトルが MLP に入る前にレイヤーの正規化を実行します。

MLPでは、長さC=48の各列ベクトルを(独立して)次のように処理します。

1. バイアス付きの線形変換を追加し、長さ 4*C のベクトルに変換します。

2. GELU活性化関数(要素ごと)

3.線形変換を実行し、バイアスを追加して、長さCのベクトルを返します。

これらのベクトルの 1 つをトレースしてみましょう。

写真

まず、バイアス付き行列ベクトル乗算を実行して、ベクトルを長さ 4*C の行列に拡張します。 (ここでは出力行列が転置されていることに注意してください。これは単に視覚化を容易にするためです)

写真

次に、ベクトルの各要素に GELU 活性化関数を適用します。

これはニューラル ネットワークの重要な部分であり、モデルに非線形性を導入する必要があります。使用される特定の関数 GELU は、ReLU 関数 (max(0,x) として計算) によく似ていますが、鋭い角ではなく滑らかな曲線を持ちます。

写真

写真

次に、別のバイアス行列ベクトル乗算を介してベクトルを長さ C に戻します。

写真

自己注意 + 投影部分と同様に、MLP の結果を入力に要素ごとに追加します。

写真

これで、入力内のすべての列に対してこのプロセスを繰り返すことができます。

写真

この時点で、MLP は完了します。 Transformer モジュールの出力が得られたので、それを次のモジュールに渡すことができます。

トランス

これは完全なTransformerモジュールです。

これらは GPT モデルのバックボーンを形成し、複数回繰り返され、1 つのブロックの出力が次のブロックに入力され、残差パスが継続されます。

ディープラーニングではよくあることですが、これらの各レイヤーが正確に何をしているのかを判断するのは困難ですが、いくつかの一般的な考え方があります。初期のレイヤーは低レベルの特徴とパターンの学習に重点を置く傾向があり、後期のレイヤーは高レベルの抽象化と関係を認識して理解することを学習します。

自然言語処理では、低レベルのレイヤーは文法、構文、単純な語彙の関連性を学習し、高レベルのレイヤーはより複雑な意味関係、談話構造、コンテキスト依存の意味を捉える可能性があります。

写真

ソフトマックス

ソフトマックス演算は、自己注意メカニズムの一部であるだけでなく、前述のように、モデルの最後にも表示されます。

簡単に言えば、ソフトマックスの目的は、ベクトル内の値を正規化して、合計が 1.0 になるようにすることです。しかし、単純に値を合計で割るほど単純ではありません。代わりに、各入力値は最初に指数化されます。

a = exp(x_1)

この効果は、すべての値が正になることです。指数関数的に導出された値のベクトルを取得したら、各値をすべての値の合計で割って、すべての値の合計が 1.0 になることを確認できます。すべての指数値は正であるため、最終値は 0.0 ~ 1.0 の間となり、元の値の確率分布が提供されます。

ソフトマックスプロセスはまさにそれを実行します。つまり、値を単純に指数化し、その合計で割ります。

しかし、ここでちょっとした問題があります。

入力値が大きい場合、指数値も大きくなります。このとき、大きな数を別の大きな数で割るという状況に直面し、浮動小数点演算で問題が発生します。

ソフトマックス演算には便利な特性があります。すべての入力値に定数を追加しても、最終結果は同じままです。したがって、入力ベクトルの最大値を見つけて、それをすべての値から減算します。これにより、最大値が 0.0 になり、ソフトマックス演算が数値的に安定します。

自己注意層では、各ソフトマックス演算への入力ベクトルは、自己注意行列の行(ただし対角線まで)です。

レイヤー正規化と同様に、処理効率を向上させるためにいくつかの集計値を保存する中間ステップがあります。

各行について、行の最大値と、シフトおよび指数処理された値の合計を記録する必要があります。次に、対応する出力行を取得するために、最大値を指数的に減算し、その合計で割るという一連の操作を実行できます。

では、なぜ「ソフトマックス」と呼ばれるのでしょうか?

この操作の「ハード」バージョンは argmax と呼ばれ、最大値を見つけてそれを 1.0 に設定し、他のすべての値を 0.0 に設定します。対照的に、ソフトマックス演算は「よりソフトな」バージョンです。

ソフトマックス演算は指数演算を伴うため、最大値を強調し、すべての入力値の確率分布を維持しながら 1.0 に近づけます。このアプローチでは、最も可能性の高いオプションだけでなく、他の選択肢の相対的な可能性も把握できるため、より微妙な表現が可能になります。

写真

出力

最後の Transformer ブロックの出力は、最初にレイヤー正規化され、次に線形変換 (行列乗算) されますが、今回はバイアス項は追加されません。

写真

最後の変換では、各列ベクトルの長さが C から nvocab に変更されます。つまり、各列の語彙の各単語に対してスコア(ロジット)を実際に生成していることになります。

「ロジット」という用語は「log-odds」に由来し、各トークンの対数確率を意味します。 「Log」が使用される理由は、次に適用されるソフトマックスが指数変換を実行し、それによってこれらのスコアが「確率」または確率に変換されるためです。

これらのスコアをより直感的な確率値に変換するには、まずソフトマックスで処理する必要があります。ここで、各列には、モデルが語彙内の各単語に割り当てた確率が入っています。

この特定のモデルでは、3 文字の質問すべてに対する回答を効果的に学習しているため、得られる確率値は正解に偏っています。

モデルをタイムステップすると、最後の列の確率値を使用して、シーケンスに追加する次のトークンが決定されます。たとえば、モデルに 6 つのトークンが入力された場合、6 列目の出力確率を使用して決定が行われます。

この列は一連の確率値を出力し、その中から 1 つをシーケンスの次の要素として選択する必要があります。これは分布からサンプリングすることによって行われます。つまり、確率値の重みに基づいてトークンがランダムに選択されます。たとえば、確率 0.9 のトークンが選択される確率は 90% です。

もちろん、常に最も確率の高いトークンを選択するなど、他の選択方法もあります。

さらに、分布の「滑らかさ」は温度パラメータを使用して制御できます。温度が高いほど分布は均一になり、温度が低いほど分布は最も確率の高いトークンに集中します。

ソフトマックスを適用する前に、温度をロジット(線形変換の出力)で割ります。ソフトマックスの指数関数は値が大きいほど大きな影響を与えるため、すべての数値を近づけるとこの影響は軽減されます。

写真

ネットユーザーは衝撃を受けた

ネットユーザーの中には、アルゴリズムの複雑さが3次元空間でこのように明確に表現されているのを見て、びっくりしたという人もいました。

写真

NanoGPTと比較すると、GPT-3はモンスターです。

写真

これは、2005 年に大学で見た単純なニューラル ネットワークよりも 1000 倍複雑に見えます。今後 5 ~ 10 年で汎用人工知能 (AGI) はどこに向かうのだろうかと考えています。

写真

参考文献:

https://bbycroft.net/llm


<<:  13 の視覚言語タスクをクリアしましょう!ハルビン工業大学がマルチモーダル大型モデル「九天」をリリース、性能が5%向上

>>: 

ブログ    
ブログ    
ブログ    

推薦する

OpenAIがテキストから動画を生成するAIジェネレーター「Sora」をリリース

OpenAI が Sora をリリースし、テキストからビデオへの AI コンテンツ生成競争に参入。 ...

機械学習が物流、輸送、旅行を変革

スイスはアルプス山脈の高速道路で何万台もの貨物トラックによる渋滞と汚染に直面したため、世界最長かつ最...

...

AI業界は大きな変化を遂げています。AI科学者がMVPになるには

20 年前、人工知能の研究に興味を持つ人は、主に大学や非営利の AI 研究所に限られていました。 A...

CVPR 2017 論文の解釈: フィーチャーピラミッドネットワーク FPN

論文: 物体検出のための特徴ピラミッドネットワーク論文アドレス: https://arxiv.org...

2秒で2枚の画像を3D再構築!このAIツールはGitHubで人気です、ネットユーザー:Soraを忘れてください

必要なのは2枚の写真だけで、追加のデータを測定する必要はありません——ディンディン、完全な 3D ク...

...

...

春節祭でロボットが書道を行う。書道家は職を失うことになるのか?

毎年、春節の祝祭舞台ではさまざまな「ブラックテクノロジー」が必ず使われています。2021年の丑年春節...

人工知能が再び懸念を呼ぶ! AIが独自の「デジタル感覚」を進化させたのは、祝福か呪いか?

科学の最前線から世界を眺め、熱心に学び、宇宙を理解するホーキング博士はかつて、人工知能(AI)の発達...

畳み込みニューラルネットワークの簡単な説明

畳み込みニューラルネットワークネットワーク構造図図2 畳み込みニューラルネットワークの構造図畳み込み...

8つのソートアルゴリズムのPython実装

この記事では、主に 8 つの一般的なソート アルゴリズムの基本概念とそれらの Python 実装を紹...

AI の洞察: インテリジェント ビデオはエッジをどのように形成するのか?

ビデオの需要と視覚データの理解のための AI の使用が増加するにつれて、カメラの数と生成されるデータ...

生成型人工知能が経済と社会に与える影響

生成アルゴリズム、事前トレーニング済みモデル、マルチモーダルなどの技術の累積的な統合と反復を経て、人...