最近、ニュージーランド出身のブレンダン・バイクロフトという男がテクノロジー界で大流行を巻き起こしている。彼が作成した「Large Model 3D Visualization」というプロジェクトは、Hacker News のリストでトップになっただけでなく、その衝撃的な効果はさらに驚くべきものでした。このプロジェクトを実行すると、わずか数秒で LLM (大規模言語モデル) がどのように機能するかを完全に理解できるようになります。 テクノロジー愛好家であろうとなかろうと、このプロジェクトはあなたに前例のない視覚的な饗宴と認知的啓蒙をもたらすでしょう。この素晴らしい創造物を一緒に探検しましょう! 導入このプロジェクトで、Bycroft 氏は、OpenAI の科学者 Andrej Karpathy 氏が開発した Nano-GPT と呼ばれる軽量 GPT モデルについて詳しく説明しました。 GPT モデルの縮小版であるこのモデルには、85,000 個のパラメーターしかありません。 もちろん、このモデルは OpenAI の GPT-3 や GPT-4 よりもはるかに小さいですが、小さいながらも完全です。 ナノGPT GitHub: https://github.com/karpathy/nanoGPT Transformer モデルの各レイヤーのデモンストレーションを容易にするために、Bycroft は Nano-GPT モデルに非常に単純なターゲット タスクを用意しました。モデルの入力は 6 文字の「CBABBC」で、出力は「ABBBCC」のようにアルファベット順に並べられたシーケンスです。 各文字をトークンと呼び、これらの異なる文字が語彙を形成します。 この表では、各文字に下付き文字トークン インデックスが割り当てられています。 これらの下付き文字のシーケンスは、モデルへの入力として使用できます: 2 1 0 1 1 2 3D 視覚化では、各緑色のセルは計算された数値を表し、各青色のセルはモデルの重量を表します。 シーケンス処理では、まず各数値が C 次元ベクトルに変換されます。このプロセスは埋め込みと呼ばれます。 Nano-GPT では、この埋め込みの次元は通常 48 です。この埋め込み操作により、各数値は C 次元空間内のベクトルとして表現され、後続の処理と分析が改善されます。 埋め込みは、一般的にトランスフォーマーと呼ばれる一連の中間モデル層を経て計算され、最終的に最下層に到達します。 「それで、出力は何ですか?」 モデルの出力は、シーケンス内の次のトークンです。 最終的に、次のトークンが ABC である確率値が得られます。 この例では、6 番目の位置モデルがより高い確率で A を出力します。これで、A をモデルへの入力として渡し、プロセス全体を繰り返すことができます。 GPT-2 と GPT-3 の視覚化も表示されます。
この視覚化は、トレーニングではなく、主にモデルの推論に焦点を当てているため、機械学習プロセス全体のほんの一部にすぎないことに注意することが重要です。さらに、ここではモデルの重みが事前にトレーニングされており、モデル推論を使用して出力が生成されると想定されています。 埋め込み前述したように、単純なルックアップ テーブルを使用してトークンを整数の文字列にマッピングできます。 これらの整数はトークン インデックスと呼ばれ、モデル内で整数が見られるのはこれが最初で唯一の機会です。以降は浮動小数点数(10進数)を使って演算が行われます。 ここでは、4 番目のトークン (インデックス 3) を例として、入力埋め込みの 4 番目の列ベクトルを生成するためにどのように使用されるかを確認します。 まず、トークン インデックス (ここでは例として B=1 を使用します) を使用して、トークン埋め込み行列から 2 番目の列を選択し、トークン埋め込みと呼ばれるサイズ C=48 (48 次元) の列ベクトルを取得します。 次に、位置埋め込み行列から 4 番目の列を選択します (「ここでは主に 4 番目の位置にある (t = 3) トークン B を調べるため」)。同様に、サイズ C = 48 (48 次元) の列ベクトルを取得します。これを位置埋め込みと呼びます。 位置埋め込みとトークン埋め込みの両方がモデルトレーニングによって取得されることに注意してください (青で示されています)。これで、これら 2 つのベクトルが得られました。これらを追加すると、サイズ C=48 の新しい列ベクトルが得られます。 次に、シーケンス内のすべてのトークンに対して同じプロセスが実行され、トークンの値とその位置を含むベクトルのセットが作成されます。 上の図からわかるように、入力シーケンス内のすべてのトークンに対してこのプロセスを実行すると、サイズ TxC のマトリックスが生成されます。ここで、T はシーケンスの長さを表します。 C はチャネルの略で、特徴、次元、埋め込みサイズとも呼ばれ、この場合は 48 です。この長さ C は、モデルのサイズとパフォーマンスのトレードオフを実現するために設計者によって選択された、モデルのいくつかの「ハイパーパラメータ」の 1 つです。 この TxC 次元の行列は入力埋め込みであり、モデルを通じて渡されます。
レイヤーの正規化上記で得られた入力埋め込み行列は、Transformer レイヤーの入力となります。 Transformer レイヤーの最初のステップは、入力埋め込み行列に対してレイヤー正規化を実行することです。これは、入力行列の各列の値を個別に正規化する操作です。 正規化はディープ ニューラル ネットワークのトレーニングにおける重要なステップであり、トレーニング中のモデルの安定性を向上させるのに役立ちます。 以下のように 4 番目の列を例にとり、行列の列を個別に見ることができます。 正規化の目的は、各列の平均を 0 に、標準偏差を 1 にすることです。これを行うには、各列の平均と標準偏差を計算し、平均を減算して各列を標準偏差で割る必要があります。 ここで、E[x]は平均を表すために使用され、Var[x]は分散(標準偏差の2乗)を表すために使用されます。イプシロン (ε = 1×10^-5) はゼロ除算エラーを防ぐために使用されます。 正規化された結果を計算して保存し、それを学習重みweight(γ)で乗算し、バイアス(β)を追加して最終的な正規化された結果を取得します。 最後に、入力埋め込み行列の各列に対して正規化操作が実行され、正規化された入力埋め込みが取得され、自己注意層に渡されます。 自己注意Self Attention レイヤーは、おそらく Transformer の中核部分です。この段階では、入力埋め込みの列は互いに「通信」できますが、他の段階では、各列は独立して存在します。 自己注意レイヤーは複数の自己注意ヘッドで構成されており、この例では 3 つの自己注意ヘッドがあります。各ヘッドへの入力は入力埋め込みの 1/3 であり、ここではそのうちの 1 つにのみ焦点を当てます。 最初のステップは、正規化された入力埋め込み行列の C 列から各列に 3 つのベクトル (QKV) を生成することです。
これらのベクトルを生成するには、行列とベクトルの乗算とバイアスが必要です。各出力ユニットは入力ベクトルの線形結合です。 たとえば、クエリ ベクトルの場合、これは Q 重み行列の行と入力行列の列の間のドット積を取ることによって実行されます。 ドット積演算は非常に単純で、対応する要素を乗算してから加算するだけです。 これは、各出力要素が入力ベクトル内のすべての要素(重みによって決定)の影響を受けるようにするための一般的な簡単な方法です。そのため、ニューラル ネットワークによく登場します。 ニューラル ネットワークでは、このメカニズムにより、モデルがデータを処理する際に入力シーケンスのすべての部分を考慮できるようになるため、このメカニズムが頻繁に発生します。この包括的な注意メカニズムは、特にテキストや時系列などの連続データを処理する場合に、多くの最新のニューラル ネットワーク アーキテクチャの中核となります。 Q、K、Vベクトルの各出力ユニットに対してこれを繰り返します。 Q (クエリ)、K (キー)、V (値) ベクトルをどのように使用すればよいでしょうか?名前からヒントが得られます。「キー」と「値」は、キーが値にマッピングされる辞書型を連想させます。次に、値を見つけるために使用するのが「クエリ」です。 Self Attention の場合、単一のベクトル (項) を返す代わりに、ベクトル (項) の重み付けされた組み合わせを返します。この重みを見つけるには、Q ベクトルと各 K ベクトル間のドット積を計算し、重みを正規化し、最後に対応する V ベクトルと乗算して合計します。 6 列目を例にとると (t=5)、この列からクエリを開始します。 注意行列の存在により、KV の最初の 6 列を照会することができ、Q 値は現在の時刻になります。 まず、現在の列 (t=5) の Q ベクトルと前の列 (最初の 6 列) の K ベクトルのドット積を計算します。次に、注目行列の対応する行 (t=5) に格納されます。 ドット積のサイズは、2 つのベクトルの類似性を測定します。ドット積が大きいほど、類似性が高くなります。 代わりに、過去の K ベクトルで Q ベクトルのみを操作し、因果的な自己注意を実現します。つまり、トークンは「将来の情報を見る」ことができません。 したがって、ドット積を取った後、sqrt(A) で割ります。ここで、A は QKV ベクトルの長さです。このスケーリングは、次のステップで大きな値が正規化 (ソフトマックス) を支配するのを防ぐために行われます。 次に、ソフトマックス演算を実行して値の範囲を 0 ~ 1 に縮小します。 最後に、この列の出力ベクトル(t = 5)を取得できます。正規化された注意行列の (t=5) 行を見て、各要素を他の列の対応する V ベクトルと乗算します。 次に、これらのベクトルを加算して出力ベクトルを取得します。したがって、出力ベクトルは高得点の V ベクトルによって支配されることになります。 これをすべての列に適用します。 これは、Self Attention レイヤーのヘッドの処理です。 「したがって、Self Attention の主な目的は、各列が他の列から関連情報を見つけてその値を抽出することです。これは、クエリ ベクトルを他の列のキーと比較することによって行われます。追加された制限は、過去しか参照できないことです。」 投影Self Attention 操作の後、各ヘッドから出力が得られます。これらの出力は、Q ベクトルと K ベクトルの影響が適切に混合された V ベクトルです。各ヘッドからの出力ベクトルを結合するには、それらを積み重ねるだけです。したがって、t = 4 では、長さ A = 16 の 3 つのベクトルの重ね合わせから、長さ C = 48 のベクトル 1 つが形成されます。 GPT では、ヘッド (A=16) のベクトルの長さが C/num_heads に等しいことに注意してください。これにより、再び積み重ねたときに元の長さ C が得られることが保証されます。 これに基づいて投影を実行し、このレイヤーの出力を取得します。これは、列ごとに単純な行列とベクトルの乗算とバイアスを加えたものです。 これでSelf Attentionの出力が得られました。 この出力を次のステージに直接渡すのではなく、要素ごとに入力埋め込みに追加します。 緑色の垂直矢印で表されるこのプロセスは、残余接続または残余経路と呼ばれます。 レイヤー正規化と同様に、残差ネットワークはディープニューラルネットワークの効果的な学習を実現するために重要です。 自己注意の結果が得られたので、それを Transformer の次の層であるフィードフォワード ネットワークに渡すことができます。 多層パーセプトロン MLPSelf Attention の後の Transformer モジュールの次の部分は MLP (多層パーセプトロン) です。これは 2 つの層を持つ単純なニューラル ネットワークです。 Self Attention と同様に、ベクトルが MLP に入る前にレイヤーの正規化を実行する必要があります。 同時に、MLPでは、長さC = 48の各列ベクトルに対して次の処理を(独立して)実行する必要があります。
これらのベクトルの 1 つをトレースしてみましょう。 MLP の具体的な処理は次のとおりです。 まず、行列とベクトルの乗算が実行され、バイアスが追加されてベクトルが長さ 4*C の行列に拡張されます。 (ここでの出力行列は視覚化のために転置されていることに注意してください) 次に、GELU 活性化関数がベクトルの各要素に適用されます。これはあらゆるニューラル ネットワークの重要な部分であり、モデルに非線形性を導入する必要があります。使用される特定の関数 GELU は、ReLU 関数 max(0, x) によく似ていますが、鋭い角ではなく滑らかな曲線を持ちます。 次に、別のバイアス行列ベクトル乗算によって、ベクトルは長さ C に戻されます。 ここにも残差ネットワークがあり、自己注意 + 投影部分と同様に、MLP の結果を入力に要素ごとに追加します。 これらの手順を繰り返します。 これで MLP レイヤーは終了し、最終的にトランスフォーマーの出力が得られます。 トランスこれでTransformerモジュールは完成です。 これらの複数のモジュールが GPT モデルの本体を形成し、各モジュールの出力が次のモジュールの入力になります。 ディープラーニングではよくあることですが、これらの各レイヤーが正確に何をしているかを説明するのは困難ですが、いくつかの一般的な考え方があります。初期のレイヤーは低レベルの特徴とパターンの学習に重点を置く傾向があり、後のレイヤーは高レベルの抽象化と関係を認識して理解することを学習します。自然言語処理のコンテキストでは、下位層は文法、構文、および単純な語彙の関連性を学習し、上位層はより複雑な意味関係、談話構造、およびコンテキスト依存の意味を捕捉する可能性があります。 ソフトマックス最後のステップはソフトマックス演算で、各トークンの予測確率を出力します。 出力ついにモデルの終わりに到達しました。最後のトランスフォーマーの出力は、正規化レイヤーによって処理され、その後、バイアスのない線形変換によって処理されます。 この最後の変換により、各列ベクトルの長さが C から語彙サイズ nvocab の長さに変換されます。したがって、実際には語彙内の各単語に対してスコア logits が生成されます。 これらのスコアをより直感的な確率値に変換するには、まずソフトマックスで処理する必要があります。したがって、各列には、モデルが語彙内の各単語に割り当てる確率があります。 この特定のモデルでは、3 つの文字をどのように並べるかに関するすべての答えを実際に学習しているため、確率は正解に大きく傾いています。 モデルを時間の経過とともに前進させるには、最後の列の確率を使用して、シーケンスに次に追加するトークンを決定する必要があります。たとえば、モデルに 6 つのトークンを入力する場合は、6 列目からの出力確率を使用します。 この列の出力は一連の確率値であり、実際にはその中からシーケンス内の次のトークンとして 1 つを選択する必要があります。これは、分布からサンプリングすることによって、つまり確率に基づいてトークンをランダムに選択することによって行われます。たとえば、確率 0.9 のトークンは 90% の確率で選択されます。ただし、常に最も高い確率のトークンを選択するなど、他のオプションもあります。 温度パラメータを使用して分布の「滑らかさ」を制御することもできます。温度が高いほど分布は均一になり、温度が低いほど確率が最も高いトークンに集中するようになります。 ソフトマックスを適用する前に、温度パラメータを使用してロジット(線形変換の出力)をスケーリングすることでこれを行います。これは、ソフトマックスの指数化は大きな値に対して大きな増幅効果があり、すべての値を近づけるとこの効果が減少するためです。 写真 |
<<: GPTストア立ち上げの裏側:民間開発者のグループが儲かり、スタートアップのグループが消滅
>>: 放射線科医は再び危機に陥っている!海外の主要5機関が共同で最新の「胸部X線」ベンチマークを発表
[[361283]]画像ソース: https://pixabay.com/images/id-477...
Neural Radiance Fieldsは2020年に提案されて以来、関連論文が飛躍的に増加し...
[[311778]] 5G、人工知能、モノのインターネットなどの技術が徐々に成熟するにつれて、スマ...
画像処理の分野では、AIブラシがますます目立つようになってきています。以前、AIロスレス画像拡大、A...
[[441881]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...
[[407899]] [51CTO.com クイック翻訳]研究によると、企業の従業員がより生産的な仕...
最近、障害を乗り越えるヒューマノイドロボットのビデオが話題になった。ビデオでは、ヒューマノイドロボッ...
著者: 張傑【51CTO.comオリジナル記事】 AI チップはなぜ必要なのでしょうか?新しいイ...
セキュリティ管理は常にネットワーク管理の重要な部分であり、最も重要なリンクの 1 つです。また、ユー...
Hugging Faceのオープンソース大型モデルのランキングがまた更新されました。今回のランキング...
[[385597]]中国時報(www.chinatimes.net.cn)記者の翟延安が北京から報告...
6月13日のニュース、人工知能の急速な発展に伴い、シリコンバレーは、人間の行動は予測可能であり、スキ...
今日の情報化時代において、個人の身元を正確に識別し、情報セキュリティを保護する方法は、あらゆる分野の...