著者:健康管理者
リンク:https://zhuanlan.zhihu.com/p/656758138
今日は、言語モデルのトレーニングと推論を紹介するブログを共有します。理解しやすく、本質的な核心を捉えています。ぜひ一読をお勧めします。
タイトル: Language Model Training and Inference: From Concept to Code
著者: CAMERON R. WOLFE
原文:
https://cameronrwolfe.substack.com/p/ language-model-training-and-inference
大規模言語モデル (LLM) を理解するには、まずその本質を理解する必要があります。事前トレーニング、微調整、または推論段階のいずれにおいても、中心となるのは次のトークンの予測であり、テキストを左から右に徐々に生成することです。自己回帰的なやり方。
NLP グループに入る -> NLP 交換グループに参加する
トークンとは何ですか?
トークンは、テキスト内の単語またはサブワードを指します。テキストの文が与えられた場合、それを言語モデルに送信する前に最初に行うことは、元のテキストをトークン化すること、つまり、テキスト シーケンスを個別のトークン シーケンスに分割することです。
このうち、トークナイザーは、ラベルなしコーパスで学習された固定の固有数のトークンを持つトークナイザーで、ここでのトークン数は、よくみんながボキャブラリーと呼ぶもの、つまり言語モデルで認識されているすべてのトークンの数です。
テキストをセグメント化すると、各トークンは言語モデルの埋め込み層である埋め込みに対応することができ、特定のトークンの埋め込みを取得することはテーブル検索プロセスに似ています。
テキスト シーケンスが順序どおりであることはわかっており、共通言語モデルはアテンション メカニズムのトランスフォーマー構造に基づいており、テキストの順序を自動的に考慮することはできません。したがって、位置エンコーディングを手動で追加する必要があります。位置埋め込み. 次に、それを対応する位置のトークン埋め込みに追加します。
モデルのトレーニングまたは推論フェーズでは、コンテキスト長という言葉をよく耳にします。これは、モデルのトレーニング中に受信したトークン トレーニングの最大長を指します。トレーニング フェーズ中に、より短い長さの位置埋め込みのみが学習された場合、モデルは推論中です。 . stage は長いテキストには適用できません (長いテキストの位置エンコーディングが認識されていないため)
言語モデルの事前トレーニング
トークンの埋め込みと位置の埋め込みがある場合、それらをデコーダ専用の変換モデルに送信し、各トークンの位置で対応する埋め込みを出力します(これは特徴処理のようなものとして理解できます)。
各トークンの出力埋め込みを取得した後、それを次のトークンの予測に使用できます。実際、これは分類問題として扱われます。
まず、出力の埋め込みを線形層に送信します。出力の次元は語彙のサイズであり、このトークンの次のトークンが語彙の「どのカテゴリ」に属するかを予測します。
出力確率を正規化するには、別のソフトマックス変換が必要です
トレーニング中に、実際の次のトークンを予測できるように、この確率が最大化されます。
推論中に、次のトークンがこの確率分布からサンプリングされます。
トレーニング段階: 因果的自己注意が存在するため、文全体の各トークンの次のトークンを一度に予測し、すべての位置トークンの損失を計算できるため、必要な前方は 1 つだけです
推論フェーズ: 自己回帰的な方法での予測
毎回次のトークンを予測する
予測されたトークンを現在生成されている文に接続します
次に、接続された文に基づいて次のトークンを予測します。
最後まで繰り返します
その中で、次のトークンを予測する場合、毎回のサンプリングの確率分布があり、サンプリング戦略はシナリオに応じて若干異なります。それ以外の場合は、貪欲な戦略、カーネル サンプリング、Top-k サンプリングなどがあります。温度の概念は生成のランダム性を制御するために使用され、温度係数が小さいほど安定します。
コード
以下のコードは、プロジェクト https://github.com/karpathy/nanoGPT/tree/master からのものですが、これも優れたプロジェクトであり、初心者にお勧めします。
さまざまな Transformer ベースのモデルでは、多くのブロックが積み重ねられており、各ブロックは主に 2 つの部分で構成されます。
多頭の因果的自己注意
フィードフォワード ニューラル ネットワークの構造の概略図は次のとおりです。
画像を見て単一のブロックを構築します
次に、GPT 全体の構造を見てください。
これは主に 2 つの埋め込み層 (トークン、位置)、複数のブロック、いくつかの追加のドロップアウト層と LayerNorm 層、そして最後に次のトークンを予測するために使用される線形層で構成されます。控えめに言ってもとても簡単です。
ここでも重み結合技術が使用されています。つまり、分類に使用される最後の線形層の重みが、トークン埋め込み層の重みと共有されます。
次に、誰もが原理をよりよく理解できるように、トレーニングと推論の前進がどのように実行されるかに焦点を当てます。
まず、トークンの埋め込みと位置の埋め込みを構築し、それらを重ね合わせてドロップアウトを渡し、それらをトランスフォーマー ブロックに送信する必要があります。
変換ブロック後のテンソルの次元は以前と同じであることに注意してください。各トークン位置に対応する出力埋め込みを取得した後、最終アドバンス層を通じて分類し、クロスエントロピー損失を使用して最適化できます。
完全なプロセスをもう一度見てみましょう。入力をターゲットとして使用するには、入力を 1 つ左の位置に移動するだけです。
次に推論段階を見てみましょう。
現在の入力シーケンスに基づいて順伝播を実行します。
温度係数を使用して出力確率分布を調整する
ソフトマックスによる正規化
確率分布から次のトークンをサンプリングする
現在の文につなぎ合わせて、次のサイクルに入る
NLP グループに入る -> NLP 交換グループに参加する