GPT2計算処理の詳細説明

GPT-2 は、従来の言語モデルと同様、一度に 1 つの単語 (トークン) のみを出力します。このモデルが非常にうまく機能する理由は、新しい単語が生成されるたびに、その単語が以前に生成された単語のシーケンスに追加され、このシーケンスがモデルの次のステップの新しい入力になるためです。このメカニズムは自動回帰と呼ばれます。

GPT-2、および TransformerXL や XLNet などの後続モデルは本質的に自己回帰モデルですが、BERT はそうではありません。これはトレードオフの問題です。BERT は自己回帰メカニズムを使用しませんが、単語の前後のコンテキスト情報を結合する機能を獲得しているため、より良い結果が得られます。XLNet は自己回帰を使用し、前方と後方の両方のコンテキスト情報を考慮できる方法を導入しています。

デコーダーを使用するだけです

トランスフォーマーに関する元の論文が出版された後、「長いシーケンスを要約することによるウィキペディアの生成」と呼ばれる論文では、言語モデリングにトランスフォーマー モジュールの別の配置を使用することが提案されました。これは、すべてのトランスフォーマー エンコーダー モジュールを直接破棄しました。

図内のすべてのデコーダ モジュールは同じであるため、この記事では最初のデコーダの内部構造についてのみ説明します。ご覧のとおり、マスクされた自己注意レイヤーが使用されています。このモデルは、特定のセグメントで最大 4000 ワードのシーケンスをサポートできることに注意してください。これは、Transformer のオリジナル論文の最大 512 ワード制限と比較して大幅な改善です。

これらのデコーダ モジュールは、2 番目のセルフ アテンション層が削除されていることを除けば、元のトランスペーパーのデコーダ モジュールとあまり変わりません。同様のアーキテクチャは、文字レベルの言語モデリングでも効果的であることが証明されており、より深い自己注意層を使用して言語モデルを構築し、一度に 1 文字ずつ予測します。OpenAI の GPT-2 モデルは、このデコーダ専用モジュールを使用します。

GPT2

GPT-2 は、最大 1024 ワードのシーケンスを処理できます。各単語は、その前のパスに沿ってすべてのデコーダ モジュールを通って「流れます」。

トレーニングされた GPT-2 モデルを実行する最も簡単な方法は、モデルを単独でランダムに動作させることです (専門的には、これを無条件サンプルの生成と呼びます)。言い換えれば、特定のトピックについて何かを言うためのヒントを与えることもできます (つまり、インタラクティブな条件付きサンプルを生成します)。ランダムなケースでは、単純に事前定義された開始単語 (トレーニング済みモデルは開始単語として "|endoftext|" を使用します。これを <s> と呼びます) を指定し、テキストを生成させます。

この時点では、モデルへの入力は 1 つの単語のみであるため、この単語のパスのみがアクティブになります。単語は層ごとに処理され、最終的にベクトルが取得されます。ベクトルは、語彙内の各単語の確率を計算できます (語彙とは、モデルが「話す」ことができるすべての単語であり、GPT-2 の語彙には 50,000 語があります)。この例では、次の単語として最も高い確率で単語「The」を選択します。

しかし、これが問題を引き起こす場合があります。入力メソッドによって推奨される最初の単語をクリックし続けると、同じ単語を推奨するループに陥る可能性があり、2 番目の単語をクリックすることによってのみこのループから抜け出すことができるのと同じです。または 3 番目に推奨される単語の種類。同様に、GPT-2 にも「top-k」というパラメーターがあり、モデルは上位 k 個の単語の中から最も高い確率で次の単語をサンプリングします。明らかに、前のケースでは、top-k = 1 です。

2 番目のワードのパスが現在唯一のアクティブなパスです。GPT-2 の各層は、最初の単語の解釈を保持し、この情報を使用して 2 番目の単語を処理します (詳細については、次のセクションのセルフ アテンション メカニズムの説明で詳しく説明します)。GPT-2 は、最初の単語を 2 番目の単語に関して再解釈します。

コードを入力する

GPT-2 は、埋め込み行列から単語に対応する埋め込みベクトルを見つけます。これもモデルのトレーニング結果の一部です。 

各行は単語を埋め込むベクトル、つまり単語を特徴づけ、その意味を捉える数値のリストです。埋め込みベクトルの長さは GPT-2 モデルのサイズに関係しており、最小のモデルは単語を表すために長さ 768 の埋め込みベクトルを使用します。

したがって、最初に、埋め込み行列内の開始単語 <s> に対応する埋め込みベクトルを見つける必要があります。ただし、これをモデルに入力する前に、位置エンコーディング、つまりシーケンス内の単語の順序を変換モジュールに示す信号を導入する必要もあります。1024 の入力シーケンス位置のそれぞれは位置コードに対応し、これらのコードの行列もトレーニングされたモデルの一部です。

トレーニングされた GPT-2 モデルには、埋め込み行列と位置エンコード行列という 2 つの重み行列が含まれています。 

最初の変換モジュールに単語を入力する前に、対応する埋め込みベクトルと、位置 1 に対応する位置ベクトルを見つける必要があります。

自意識

最初の変換モジュールは単語を次のように処理します。まずセルフアテンション層を通過し、次にニューラル ネットワーク層に渡します。最初の変換モジュールが処理されますが、その後、結果ベクトルがスタック内の次の変換モジュールに渡されて計算が続行されます。各トランスフォーマー モジュールは同じ方法で処理されますが、各モジュールは独自の自己注意層とニューラル ネットワーク層の重みを維持します。

セルフ アテンション メカニズムが行うことは、各単語を処理する (ニューラル ネットワークに渡す) 前に、単語の解釈に使用されるコンテキストに関連する単語のモデルの理解を組み込むことです。具体的な方法は、シーケンス内の各単語に関連性スコアを割り当て、それらのベクトル テーブルを合計することです。

たとえば、(正しくトレーニングされていれば) 最上位のトランスフォーマー モジュールは単語「it」を処理するときに「a robot」に注意を払うため、3 つの単語「a」、「robot」、「it」は次の値で乗算され、重み付けされます。合計された特徴ベクトルは、後続のニューラル ネットワーク層に供給されます。 

 自己注意メカニズムは、シーケンス内の各単語のパスに従います。

単語クエリ ベクトルと各フォルダーのキー ベクトルを乗算して、各フォルダーに対応する注意スコアを取得します (ここでの乗算はベクトル ドット乗算を指し、その積はソフトマックス関数によって処理されます)。 

 各フォルダーの値ベクトルに対応する注意スコアを乗算し、それを合計して自己注意レイヤーの最終出力を取得します。

出力

最後の変換モジュールが出力を生成した後 (つまり、セルフ アテンション層とニューラル ネットワーク層によって処理された後)、モデルは出力ベクトルに埋め込み行列を乗算します。

埋め込み行列の各行が、モデルの語彙内の単語の埋め込みベクトルに対応していることがわかっています。したがって、この乗算演算の結果は、語彙内の各単語に対応する注意スコアになります。

最高スコアの単語を出力結果として選択するだけです (つまり、top-k = 1)。しかし実際には、モデルが他の単語候補を考慮すると、通常は効果がより良くなります。したがって、より良い戦略は、語彙内でより高いスコアを持つ単語のサブセットを取得し、そのスコアを確率として使用して単語リスト全体からサンプリングすることです (より高いスコアを持つ単語が選択される可能性が高くなります)。 

このようにして、モデルは 1 回の反復を完了し、単語を出力します。その後、完全なシーケンスが生成されるまで、つまりシーケンスが最大長の 1024 に達するか、シーケンス内にターミネータが発生するまで、モデルは反復されます。

Supongo que te gusta

Origin blog.csdn.net/FYZDMMCpp/article/details/121581991
Recomendado
Clasificación