LLaMA ChatGLM2 BLOOM モデルのテクニカル分析と比較

モデル トレーニングデータ トレーニングデータ量 モデルパラメータ 語彙サイズ
ラマ ラテン語族、主に英語、中国語、日本語、韓国語を除く 1T/1.4Tトークン 7B、13B、33B、65B 32000
チャットGLM-6B 中国語と英語のバイリンガルで、中国語と英語の比率は1:1です。 1Tトークン 6B 130528
咲く 中国語を含む 46 の自然言語と 13 のプログラミング言語 350Bトークン 560M、1.1B、1.7B、3B、7.1B、176B 250880
モデル モデル構造 位置エンコーディング 活性化関数 レイヤーノルム
ラマ カジュアルデコーダー ロープ SwiGLU プレ RMS ノルム
チャットGLM-6B プレフィックスデコーダ ロープ ゲグル ポストディープノーム
咲く カジュアルデコーダー アリバイ 剃る プレレイヤーノルム

ラマ

LLaMA[2] は、Meta によって提案された大規模言語モデルです。トレーニング データは主に英語とラテン語で、GitHub のコード データも含まれています。トレーニング データは主に英語で、中国語、韓国語、日本語は含まれません。すべてのトレーニング データはオープンソースであり、単語分割後のトークンは約 1400B です。

モデル パラメーターの数に応じて、LLaMA モデルにはパラメーター サイズが異なる 4 つのモデル バージョン (7B、13B、33B、および 65B) があります。バージョン 7B と 13B はトレーニングに 1T トークンを使用し、バージョン 33B と 65B はトレーニングに 1.4T トークンを使用します。[3] は、与えられたトレーニング予算の下で、モデル パラメーターの数が減ったとしても、トレーニング前のデータ サイズとトレーニング期間が増加する (トレーニング トークンが増える) 限り、元のサイズのモデルの効果を維持できることを証明しました。達成、またはそれを超えています。比較のために、280B Gopher モデルは 300B トークンのみをトレーニングし、176B BLOOM モデルは 350B トークンのみをトレーニングし、GLM-130B は 400B トークンのみをトレーニングし、LLaMA モデルは 1T/1.4T トークンをトレーニングし、トークンの数が大幅に増加しました。トレーニングデータの量。結果から判断すると、LLaMA-13B モデルのパラメータ数は GPT3 の 1/10 以下であるにも関わらず、ほとんどのタスクにおいてその効果は GPT3 を上回っています。

モデル構造に関しては、LLaMA は GPT と同じ因果デコーダのみのトランスフォーマー モデル構造を採用しています。モデルの詳細に関しては、次の変更が加えられました。

  1. プレレイヤー正規化 [参照 GPT3]. トレーニングの安定性を向上させるために、LLaMA は、  RMSNorm (つまり、二乗平均平方根のみ、平均 u を使用しない) 正規化関数、Zhang と Zhang によって導入されたプレ正規化を使用して、各トランスフォーマー サブレイヤーの入力を正規化します。ゼンリッヒ (2019)。

  2. SwiGLU アクティベーション関数 [参考 PaLM] ReLU アクティベーション関数は使用せず、SwiGLU アクティベーション関数を使用します。FFN には通常 2 つの重み行列があり、最初にベクトルが次元 d から中間次元 4d まで増加し、次に 4d から d に減少します。SwiGLU アクティベーション関数を使用する FFN は重みマトリックスを追加します。重みマトリックスは合計 3 つあります。パラメーターの数を一定に保つために、中間の次元は 4d ではなく 2/3d を使用します。

  3. 位置エンコーディング:Rotary Embeddings  [参考 GPTNeo]. モデルの入力は使用されなくなりました positional embeddingsが、位置埋め込み (RoPE) がネットワークの各層に追加されます. RoPE メソッドは Su et al. (2021) によって導入されました。

  4. AdamW オプティマイザが使用され、コサイン学習率スケジュールが使用されます。

  5. 因果的マルチヘッド アテンションの効率的な実装を使用して、メモリ使用量と実行時間を削減します。実装は xformers にあります

炎パラメータ

LLaMA から派生したいくつかの大規模なモデルを次に示します。

  • アルパカ: スタンフォード大学は、データセットに従って 52k の英語命令で 7B スケールの LLaMA を微調整しました。
  • Vicuna : カリフォルニア大学バークレー校は、ShareGPT によって収集されたユーザー共有の会話データに基づいて 13B スケールの LLaMA を微調整しました。
  • baize : ChatGPTで生成された10万個のデータをLoRAでLLaMAで微調整したモデル。
  • StableLM : LLaMA に基づいた安定性 AI 微調整モデル。
  • BELLE : Lianjia は ChatGPT によって生成されたデータのみを使用し、LLaMA の命令を微調整して中国語用に最適化しました。

語彙拡張: 中国語 LLaMa

語彙を増やす必要性元の LLaMA モデルの語彙サイズは 32,000 で、トークナイザーは主に英語コーパスでトレーニングされており、中国語や多言語言語では効果が比較的低くなります。LLaMA は中国語でのパフォーマンスが低い一方で、LLaMA モデルは主に英語であるラテン語コーパスでトレーニングされており、トレーニング コーパスには中国語が含まれていません。他方では、トークナイザーと語彙サイズが小さいため、漢字が複数のトークンに分割される可能性があり、エンコード効率が低く、モデルの学習が困難です。LLaMA 語彙には、少数の漢字しか含まれていません。中国語のテキストをセグメント化する場合、中国語のテキストはより小さな部分にセグメント化されます。中国語の文字を表すには複数のトークンが必要であり、エンコード効率は非常に低くなります。中国語の語彙を拡張した後は、1 つの漢字が 1 つのトークンに分割される傾向があるため、1 つの漢字が複数のトークンに分割される問題が回避され、中国語のエンコードの効率が向上します。

語彙を増やすにはどうすればよいですか[6] 語彙を拡張し、語彙に中国語トークンを追加して、中国語コーディングの効率を向上させます。具体的な方法は次のとおりです。

  1. Sentence Piece を使用して、20,000 の中国語単語を使用して中国語コーパスで中国語トークナイザーをトレーニングします。次に、中国語トークナイザーが元の LLaMA トークナイザーとマージされ、2 つの語彙を結合することによって、最終的に中国語 LLaMA トークナイザーと呼ばれるマージされたトークナイザーが得られます。語彙サイズは49953です。

  2. 新しいトークナイザーに適応するために、トランスフォーマー モデルの埋め込み行列は V*h から V'*h に拡張され、新しく追加された中国語トークンが元の埋め込み行列の末尾に追加され、埋め込み行列が確実に元の語彙表は影響を受けません。(出力レイヤーもここで調整する必要があります)

  3. さらに、中国語コーパスで事前トレーニングし、トランスフォーマーのモデル パラメーターをフリーズして修正し、埋め込み行列のみをトレーニングし、元のモデルへの干渉を最小限に抑えながら、新しく追加された中国語トークンの単語ベクトル表現を学習します。

  4. 命令の微調整フェーズでは、すべてのモデル パラメーターをトレーニング用にリリースできます。

SwiGLU の概要

スウィッシュ起動機能

ベータは定数またはトレーニング可能なパラメータです。

Swish 関数は、線形関数と ReLU 関数の間の滑らかな関数とみなすことができます。

ヒュッと振る

GELU活性化関数

GELU (Gaussian Error Linear Unit) は、非初等関数の形式の活性化関数であり、RELU の変形です。これは、16 年間の論文 Gaussian Error Linear Units (GELU)によって 提案され、その後 GPT-2、BERT、RoBERTa、ALBERT などの NLP モデルに採用されました。この論文では、GELU の正確な形式が提案されているだけでなく、2 つの初等関数の近似形式も提供されています。関数曲線は次のとおりです。

GELU μ=0、σ=1、ReLU および ELU α=1

RELU とそのバリアント、および Dropout は、2 つの独立した側面からネットワークの出力を決定します。この 2 つを 1 つに結合する、より穏やかな方法はありますか? ネットワークの正則化に関しては、Dropout はニューラル ユニットの出力をランダムに 0 (0 を乗算) に設定し、Zoneout は RNN のユニットをランダムにスキップします (1 を乗算)。どちらも、ベルヌーイ分布に従う確率変数 m~Bernoulli(p) を出力に乗算します。ここで、p は指定および決定されたパラメーターであり、1 を取る確率を示します。

ただし、活性化関数はトレーニング中とテスト中にまったく同じ方法で使用されるため、決定論的な出力が必要であり、入力 x に確率変数 m を直接乗算することはできません。これはドロップアウトとは異なります (ドロップアウトはトレーニング中にランダムに 0 に設定されません)。テスト中)。確率分布の数学的期待値は特定の値であるため、代わりに出力の期待値、つまり入力の期待値にベルヌーイ分布を乗算した値を求めることができます

この論文では、入力 x が異なると p が変化し、x が小さい場合、高い確率で 0 に設定されることを期待しています。ニューロンの入力は通常、特にバッチ正規化が追加されたネットワークでは正規分布に従うため、p を正規分布の累積分布関数に等しく設定するだけで十分です。

正規分布の累積分布関数曲線はシグモイド曲線に似ています。

ゲル:

ここで、Φ(x) は正規分布の累積関数です。

数学では、誤差関数(ガウス誤差関数とも呼ばれる) は次のように定義されます。

erf(x) は Tanh(x) に比較的近い

コードの実装では、近似関数を使用して erf(x) を当てはめることができます。論文で示されている 2 つの近似は次のとおりです。

σ は SIGMOD 活性化関数を表します

ただし、多くのフレームワークにはすでに正確な erf 計算関数があり、それを直接使用できます。

# BERT、GPT-2 的旧式 GELU 实现
def gelu(x):
    return x * 0.5 * (1 + tf.tanh(np.sqrt(2/np.pi)*(x+0.044715*tf.pow(x,3))))
# 使用erf函数的 GELU 实现
def gelu(x):
    cdf = 0.5 * (1.0 + tf.erf(x / tf.sqrt(2.0)))
    return x * cdf

ゲル vs スウィッシュ

GELU と Swish 活性化関数 (x · σ(βx)) の関数形式と特性は非常によく似ており、1 つは固定係数 1.702 で、もう 1 つは可変係数 β (トレーニング可能なパラメーターまたは検索定数によって決定できます) です。 )、実際のアプリケーションのパフォーマンスは 2 つともそれほど変わりません。

GLU(ゲートリニアユニット)

円はアダマール積、プレースワイズ乗算を表します。

この式では、最初に中間ベクトル g(x)=xW を通じてゲート操作が実行され、シグモイド関数 σ を使用してそれを 0 ~ 1 の範囲にマッピングし、各要素が保持される確率を示します。次に、入力ベクトル x にゲート ベクトルを要素ごとに乗算し (つまり、⊗ 演算)、最終的な出力ベクトルを取得します。

GLU はゲート メカニズムを通じて出力を制御します。これは、アテンションなどの重要な機能の選択とみなすことができます。その利点は、一般的な活性化関数の非線形性だけでなく、勾配を逆伝播するときに線形チャネルも持つことです。勾配を転送するための ResNet 残差ネットワークの合計演算に似ており、勾配の消失を軽減できます。問題。

なぜ?シグモイドと LSTM で使用されるゲート正接単位 (GTU) の勾配を比較します。

ゲグル

GLU の活性化関数の変形です

GLU のシグモイドを GELU に置き換えると、関数の形式は次のようになります (バイアス項目の記述を無視します)。

GLU には 2 つの学習可能なパラメータ W と V が含まれています

GEGLU には、W と V という 2 つの学習可能なパラメータも含まれています。GELU を使用して SIGMOD を置き換えます。

SwiGLU

SwiGLU アクティベーション関数は、PaLM 論文で使用されています。
FFN、つまり FC -> アクティベーション機能 -> FC では、一般的な定義は次のとおりです。

バイアス用語は T5 論文では使用されていません。つまり、次のとおりです。

同じやり方で:

活性化関数 + 未使用のバイアス項 + GLU を組み合わせると、次のようになります。

これは PaLM の活性化関数であり、その効果も良好です。

パーム

  1. SwiGLU アクティベーション関数を使用: MLP 中間アクティベーションに使用、SwiGLU アクティベーション関数を使用: MLP 中間アクティベーションに使用。標準の ReLU、GELU、または Swish アクティベーションと比較して、「GLU Variants Enhanced Transformer」論文で言及されているため: SwiGLU は大幅に向上することが証明されています。モデル効果

  2. 並列レイヤーの提案: 各トランスフォーマー構造の「並列」式: GPT-J-6B と同様、標準の「直列化」式が使用されます。並列定式化により、大規模なトレーニングが約 15% 高速化されます。アブレーション実験では、パラメータ量 8B ではモデルの効果がほとんど減少しませんが、パラメータ量 62B ではモデルの効果が減少する現象は見られません。

  3. マルチクエリの注意: 各ヘッダーはキーと値のマッピングを共有します。つまり、「キー」と「値」は [1, h] に投影されますが、「クエリ」は依然として形状 [k, h] に投影されます。モデルの品質やトレーニング速度には影響しませんが、自己回帰デコード時間のコストを効果的に節約できます。

  4. RoPE 埋め込みを使用する: RoPE 埋め込みは長いテキストのパフォーマンスが優れているため、絶対位置または相対位置埋め込みの代わりに RoPE が使用されます。

  5. 共有入出力埋め込みの使用: 入力と出力の埋め込み行列は共有されます。これは word2vec の入力 W と出力 W' に似ていると私は理解しています。

チャットGLM-6B

ChatGLM-6B は、中国語と英語のバイリンガル質問応答をサポートするために清華大学によって提案された会話言語モデルです。ChatGLM-6BはGLM-130Bと同様のモデル構成を採用しています[4]。2022 年 7 月の時点で、GLM-130B は 400B トークンのみをトレーニングしており、中国語と英語の比率は 1:1 です。ChatGLM-6B は、最大 1T トークンまでのより多くのトレーニング データを使用します。トレーニング コーパスには中国語と英語のみが含まれており、中国語と英語の比率は 1:1 です。

モデル構造の点では、ChatGLM-6B はプレフィックス デコーダのみのトランスフォーマー モデル フレームワークを採用し、入力では双方向アテンション メカニズム、出力では単方向アテンション メカニズムを使用します。モデルの詳細に関しては、次の変更が加えられました。

  1. 埋め込み層の勾配の減少: トレーニングの安定性を向上させるために、埋め込み層の勾配が減少します。特定の

このうち、alpha は 0.1 で、ここでの detach の機能は、新しいテンソルを返し、計算グラフから分離することです (勾配には含まれません)。勾配低減の効果は、埋め込み層の勾配を 10 倍に低減するのと同等です。

  1. レイヤー正規化の順序と残りの接続は、POST Normal を使用して、Deep Normal を使用して再配置されます。

、f(x) は注意と FFN を表します。これは、最初に残差を実行してから標準化することと同じです。FFN、V_p、O_p の場合は Xavier (w,gaim=\beta)、Q_p、k_p の場合は Xavier (w, Gaim=1) を使用して初期化します。

  1. 出力ラベル予測用の単一の線形レイヤー。

  2. アクティベーション関数として GEGLU を使用: 通常の FFN と比較して、線形ゲーティング ユニットを使用する GLU は新しい重み行列を追加します。合計 3 つの重み行列があります。パラメータの数を一定に保つために、中間の次元では 8/3d の代わりに 8/3d が使用されます。 4d。

  3. 位置エンコーディング: 絶対位置エンコーディングを削除し、回転位置エンコーディング RoPE を採用します。

  4. トレーニング目標: ChatGLM-6B のトレーニング タスクは、空白を埋める自己回帰テキストです。因果デコーダのみの構造を使用する大規模な言語モデルと比較して、プレフィックス デコーダのみの構造を使用する ChatGLM-6B には、学習効率が低いという欠点があります。因果デコーダ構造はすべてのトークンの損失を計算しますが、プレフィックス デコーダは入力ではなく出力での損失のみを計算します。トレーニング トークンの数が同じ場合、トレーニング プロセス中に実際に使用されるトークンの数が少ないため、プレフィックス デコーダーはコーザル デコーダーよりも効果的ではありません。さらに、ChatGPT の成功は、因果デコーダ構造を備えた大規模な言語モデルが非常に優れた少数ショットおよびゼロショット生成機能を達成できること、および命令の微調整を通じてモデルの機能をさらに刺激できることを証明しました。プレフィックス デコーダ構造を備えた大規模な言語モデルが同等の少数ショットおよびゼロショット機能を達成できるかどうかについては、まだ十分な検証が不足しています。

  5. トレーニング中に単語全体をマスクします。これにより、単語が複数のトークンに分割されるのを回避し、自分自身に基づいて自分自身を推測できます。

  6. tokenizer : tokenizerに関しては、ChatGLM は、語彙サイズ 130,528 の 25 GB の中国語と英語のバイリンガル データで SentencePiece をトークナイザーとしてトレーニングしました。

以下は、ChatGLM から派生した大規模モデル アプリケーションの一部です。

  • langchain-ChatGLM : 拡張可能な知識ベースに基づいて質問と回答を実装する、langchain に基づく ChatGLM アプリケーション。
  • Wenda : ChatGLM-6B に基づいて ChatPDF のような機能を実装する大規模な言語モデル呼び出しプラットフォーム。

咲く

BLOOM[5] シリーズのモデルは、BigScience チームによってトレーニングされた大規模な言語モデルです。学習データには英語、中国語、フランス語、スペイン語、ポルトガル語を含む計46言語と13のプログラミング言語が含まれています。1.5TB の重複排除およびクリーンアップされたテキストが 350B トークンに変換されます。学習データの言語分布は下図のようになりますが、中国語コーパスの割合が16.2%であることがわかります。

モデル パラメーターの数に応じて、BLOOM モデルにはパラメーター サイズが異なるいくつかのモデルがあります: 560M、1.1B、1.7B、3B、7.1B、176B。BLOOMZ シリーズ モデルは xP3 データ セットに基づいて微調整されており、英語のプロンプト シナリオに推奨されます。BLOOMZ-MT シリーズ モデルは、xP3mt データ セットに基づいて微調整されており、英語以外のプロンプトを使用するシナリオに推奨されます。

モデル構造に関しては、GPTと同様に、BLOOMはコーザルデコーダーのみのトランスフォーマーモデル構造を採用しています。モデルの詳細に関しては、次の変更が加えられました。

  • ALiBi 位置埋め込みを使用すると、キーとクエリの間の距離に基づいてアテンション スコアが直接減衰されます。オリジナルのトランスフォーマーやロータリーの埋め込みと比較して、トレーニングがよりスムーズになり、ダウンストリームのパフォーマンスが向上します。ALiBi は、単語埋め込みに位置埋め込みを追加しません。代わりに、距離に比例するペナルティを使用してクエリ キーの注意スコアにバイアスをかけます。

  • 埋め込み層ノルムは、トレーニングの不安定性を避けるために、最初の埋め込み層の直後に使用されます。

  • レイヤー正規化: トレーニングの安定性を向上させるために、従来のポストレイヤー ノルムは使用されず、プレレイヤー ノルムが使用されます。

  • アクティベーション機能: GeLU アクティベーション機能を使用します。

  • トークナイザーに関しては、BLOOM はバイト ペア エンコーディング (BPE) アルゴリズムを使用して多言語コーパスをトレーニングし、語彙サイズ 250880 のトークナイザーを取得します。250,000 トークンの語彙が使用されます。バイトレベルの BPE を使用します。このようにして、トークン化によって未知のトークンが生成されることはありません

  • 完全に接続された層:c041df1859f253b4c54bc1aeb806d1d2png

  • トレーニング目標に関して言えば、BLOOM のトレーニング目標は言語モデルであり、既存のコンテキストに基づいて次の単語を予測することです。

以下は、BLOOM から派生した大規模なモデル アプリケーションの一部です。

  • Xuanyuan : 金融分野の大型モデル、Du Xiaoman は BLOOM-176B に基づいて、中国の一般分野と金融分野向けにターゲットを絞った事前トレーニングと微調整を実施しました。
  • BELLE : Lianjia は、BLOOMZ-7B1-mt の命令を微調整するために ChatGPT によって生成されたデータのみを使用しました。

トークナイザーの比較

上記の基本モデルのトークナイザーは語彙サイズが異なるため、同じ中国語テキストの単語分割結果は異なる結果を生成します。news_commentaryの中国語・英語対訳コーパス69,000件に対して単語分割処理を行い、単語分割結果と単語分割時間を比較した結果は以下のようになります。「中国語の平均トークン数」は、トークナイザー単語分割後の各漢字に対応するトークンの平均数を表します。

モデル 語彙サイズ 中国語のトークンの平均数 英語のトークンの平均数 中国語の処理時間 (秒) 英語の処理時間 (秒)
ラマ 32000 1.45 0.25 12.60 19.40
中国のLLaMA 49953 0.62 0.249 8.65 19.12
チャットGLM-6B 130528 0.55 0.19 15.91 20.84
咲く 250880 0.53 0.22 9.87 15.60

結果から、

  1. LLaMA の語彙は最も少なく、中国語と英語の平均トークン数は LLaMA が最も多く、これはLLaMA の中国語と英語の単語の分割が比較的細分化されており、粒度が細かいことを意味します。特に中国語では、平均トークン数が 1.45 と高く、LLaMA では漢字が 2 トークン以上に分割される可能性が高いことがわかります。
  2. 中国語 LLaMA が語彙を拡張した後、中国語トークンの平均数は大幅に減少し、1 つの漢字または 2 つの漢字が 1 つのトークンに分割されるため、中国語コーディングの効率が向上します。
  3. ChatGLM-6B は、中国語と英語の単語分割の最適なバランスを備えたトークナイザーです。語彙が比較的多いため、中国語の処理時間も長くなりました。
  4. BLOOM は語彙数が最も多いですが、多言語対応のため、中国語と英語の単語分割効率は ChatGLM-6B と基本的に同等です。BLOOM のトークナイザーはトランスフォーマーの BloomTokenizerFast 実装を使用するため、単語の分割が高速になることに注意してください。

2 つの例から、さまざまなトークナイザーの単語分割結果を直感的に比較してみましょう。「男たちは呉フックを持って関山の五十州を集めてみませんか。」 全部で16の言葉があります。いくつかのトークナイザーの単語分割結果は次のとおりです。

  • LLaMA 単語を 24 個のトークンに分割: (Unicode エンコード レベルで行われる BPE のように見えます)
 [ '男', '<0xE5>', '<0x84>', '<0xBF>', '何', '不', '<0xE5>', '<0xB8>', '<0xA6>', '<0xE5>', '<0x90>', '<0xB4>', '<0xE9>', '<0x92>', '<0xA9>', ',', '收', '取', '关', '山', '五', '十', '州', '。'] 
  • 中国語 LLaMA の単語分割は 14 のトークンに分割されます。
[ '男', '儿', '何', '不', '带', '吴', '钩', ',', '收取', '关', '山', '五十', '州', '。']
  • ChatGLM-6B は 11 個のトークンに分割されています。
[ '男儿', '何不', '带', '吴', '钩', ',', '收取', '关山', '五十', '州', '。'] 
  • ブルーム ワード セグメンテーションは 13 個のトークンに分割されます。
 ['男', '儿', '何不', '带', '吴', '钩', ',', '收取', '关', '山', '五十', '州', '。'] 

「コショウとキノコとシナモンを混ぜたものでは、野生のオタマジャクシを守るのに十分ではありません。」長さは 15 語です。いくつかのトークナイザーの単語分割結果は次のとおりです。

  • LLaMA の単語分割は 37 トークンです。
[ '<0xE6>', '<0x9D>', '<0x82>', '<0xE7>', '<0x94>', '<0xB3>', '<0xE6>', '<0xA4>', '<0x92>', '与', '<0xE8>', '<0x8F>', '<0x8C>', '<0xE6>', '<0xA1>', '<0x82>', '<0xE5>', '<0x85>', '<0xAE>', ',', '<0xE5>', '<0xB2>', '<0x82>', '<0xE7>', '<0xBB>', '<0xB4>', '<0xE7>', '<0xBA>', '<0xAB>', '夫', '<0xE8>', '<0x95>', '<0x99>', '<0xE8>', '<0x8C>', '<0x9D>', '。']
  • 中国語 LLaMA の単語分割は 17 のトークンに分割されます。
[ '杂', '申', '椒', '与', '菌', '桂', '兮', ',', '岂', '维', '纫', '夫', '蕙', '<0xE8>', '<0x8C>', '<0x9D>', '。'] 
  • ChatGLM-6B は 17 個のトークンに分割されています。
 [ '杂', '申', '椒', '与', '菌', '桂', '兮', ',', '岂', '维', '纫', '夫', '蕙', '<0xE8>', '<0x8C>', '<0x9D>', '。'] 
  • ブルーム ワード セグメンテーションは 17 個のトークンに分割されます。
 ['杂', '申', '椒', '与', '菌', '桂', '兮', ',', '岂', '维', '�', '�', '夫', '蕙', '�', '�', '。'] 

上記の例からわかるように、LLaMA 語彙には非常に少数の漢字が含まれており、一般的な文字「er」も 3 つのトークンに分割されています。中国語 LLaMA、ChatGLM-6B、および Bloom の語彙リストは、最も一般的な中国語の単語をカバーしており、いくつかの一般的な中国語の単語も含まれています。たとえば、「収集」という単語はトークンに分割され、「蝌」などの一部の珍しい単語については、また、2〜3個のトークンに分割されます。一般に、LLaMA は中国語の文字を 2 つ以上のトークンに分割することが多く、中国語のエンコード効率は低くなりますが、中国語 LLaMA、ChatGLM-6B、および Bloom は中国語の単語分割のエンコード効率が高くなります。

レイヤーの正規化

下の図に示すように、レイヤー正規化のさまざまな位置に応じて、ポストレイヤーノルムとプレレイヤーノルムに分けることができます。

ポストレイヤーノルム元のトランスフォーマでは、レイヤ正規化はポスト LN と呼ばれる残りの接続の後に配置されます。Post LN を使用するディープトランスフォーマーモデルは、トレーニングが不安定になる傾向があります。以下の図に示すように、LN 後のトランス層の数が増加すると、勾配ノルムが徐々に増加し、トレーニングが不安定になります。

プレレイヤーノルムレイヤ正規化の位置を変更し、セルフアテンションまたは FFN ブロックの前の、「Pre LN」と呼ばれる残留接続のプロセスに配置します。以下の図に示すように、各トランス層の Pre 層ノルムの勾配ノルムはほぼ等しいため、トレーニングの安定性を向上させるのに役立ちます。post LN と比較して、pre LN を使用したディープトランスフォーマートレーニングはより安定しており、トレーニングの不安定性の問題を軽減できます。しかし、欠点は、pre LN が変換モデルのパフォーマンスにわずかに影響を与える可能性があることです。 大規模な言語モデルの課題は、トレーニングの安定性をどのように向上させるかです。トレーニングの安定性を向上させるために、GPT3、PaLM、BLOOM、OPT などの大規模な言語モデルはすべてプレレイヤー ノルムを使用します。

層正規化の 2 つの重要な部分は、変換不変性とスケーリング不変性です。[8] は、層の正規化を成功させるために重要なのは、変換の不変性ではなく、スケーリングの不変性であると考えています。そこで、計算過程での平行移動を取り除き、スケーリングだけを残して簡略化し、 RMS Norm (Root Mean Square Layer Normalization) 、すなわち二乗平均平方根ノルムが提案されました。

レイヤー正規化の計算プロセス:

RMS 計算プロセス:

通常のレイヤー正規化と比較して、RMS ノルムは平行移動の平均値を計算する部分を削除し、計算速度が速くなり、効果は基本的に同じか、わずかに改善されます。Gopher、LLaMA、T5 などの大規模な言語モデルはすべて RMS ノルムを使用します。

[9] は、Deep Norm が爆発的なモデル更新の問題を軽減し、モデルの更新を定数に制限することで、モデルのトレーニング プロセスをより安定させることができると提案しました。具体的には、Deep Norm メソッドは、Layer Norm を実行する前に残りの接続をスケールアップ (±1) し、さらに、初期化段階でモデル パラメーターをダウンスケール (±<1) します。ChatGLM-6B は Deep Norm に基づいたポスト LN を使用します。

活性化関数

各トランス層は、セルフ アテンション ブロックと FFN ブロックの 2 つの部分に分かれています。FFN は通常、最初にベクトルの次元を d 次元から中間次元 4d に増加させ、次に次元を 4d から d に減少させます。FFN の計算式は次のとおりです。

このうち、f() は非線形活性化関数です。広く使用されている活性化関数には、gelu (Gaussian Error Linear Unit) 関数や swish 関数などがあります。swish 関数はセルフゲート活性化関数です。

gelu もゲート機構によって出力値を調整する活性化関数であり、swish 関数と似ており、tanh 関数または � 関数で近似できます。

[10] 提案された GLU (Gated Linear Units). 重み行列が 2 つしかない通常の FFN と比較して、GLU を使用した FFN は追加の重み行列 (次式の V) を追加し、合計 3 つの重みを持ちます。により、モデルのパフォーマンスが向上します。

gelu 活性化関数を使用した GLU の計算式は次のとおりです。

swish 活性化関数を使用した GLU の計算式は次のとおりです。

位置エンコーディング

変圧器モデルの場合、位置エンコーディングが不可欠です。アテンション モジュールは入力シーケンスをキャプチャできないため、異なる位置にあるトークンを区別できません。位置エンコーディングは、絶対位置エンコーディングと相対位置エンコーディングに分けられます。

最も直接的な方法は、位置コーディングのトレーニングです。これは、位置コーディングをトレーニング可能なパラメーターとして使用し、位置コーディング ベクトル行列をトレーニングします。GPT3 はこのアプローチを採用しています。トレーニング スタイルの位置コーディングの欠点は、外挿がないことです。つまり、トレーニング中の最大シーケンス長が 2048 の場合、推論中に最大長 2048 のシーケンスのみを処理でき、この長さを超えるシーケンスは処理できません。 。

Su Shen [11] は、回転位置エンコーディング RoPEを提案しました。トレーニング位置エンコーディングはトークン埋め込みに作用し、回転位置エンコーディング RoPE は各トランスフォーマー層のセルフアテンション ブロックに作用します。Q/K を計算した後、回転位置エンコードは Q/K に作用し、アテンション スコアを計算します。 . . 回転位置エンコーディングは、外挿に優れた絶対エンコーディングを通じて相対位置エンコーディングを実現しますRoPE にはトレーニング可能なパラメーターが含まれていないことに注意してくださいLLaMA、GLM-130B、PaLM などの大規模な言語モデルは、回転位置エンコーディング RoPE を使用します。

ALiBi (Attendee with Linear Biases) [12] も各トランス層に作用する自己注意ブロックであり、下図に示すように、注意スコアを計算した後、事前に設定されたバイアス行列が直接注意スコアに加算されますマトリックス。ここでのバイアス行列は事前に設定され、固定されており、トレーニング可能ではありません。このバイアスにより、q と k の間の相対距離に基づいて注意スコアにペナルティが課されます。相対距離が大きいほど、ペナルティ項も大きくなります。2 つのトークン間の距離が遠いほど、相互の寄与が小さくなるのと同じです。ALiBi 位置エンコーディングには優れた外挿特性があります。BLOOM はこの位置エンコーディングを使用します。

効率的なパラメータ微調整手法 PEFT

大規模な言語モデルのパラメータがますます大きくなるにつれて、大規模なモデルを完全に微調整するコストは非常に高くなります。このコストの高さは主に、ハードウェア リソースの要件の高さとビデオ メモリの使用量の多さ、トレーニング速度の遅さと長い時間、ストレージ コストの高さに反映されています。パラメーター効率の良い微調整手法 (PEFT) は、大規模なモデルを微調整するときに、マルチモデル パラメーターの完全なセットをトレーニングするのではなく、少数のパラメーター セットのみをトレーニングします。効率的なパラメータ微調整方法には次の利点があります。

  • ビデオ メモリをほとんど占有せず、必要なハードウェア リソースも少なくなります。
  • トレーニングは短時間で完了します
  • ストレージコストが低くなり、異なるタスクで重みパラメータのほとんどを共有できる
  • モデルのパフォーマンスが向上し、過剰適合の問題が軽減される可能性があります

プロンプトチューニング

プロンプトチューニング[13]の本来の意味は、入力プロンプトを変更することでより良いモデル効果を得ることを指します。ここでのプロンプトは「ハード プロンプト」です。入力プロンプトを直接変更しますが、入力プロンプトは微分可能ではありません。

「ハード プロンプト」に対応する「ソフト プロンプト チューニング」は、トレーニング可能なテンソルを入力テキストの埋め込みと結合します。このトレーニング可能なテンソルは逆伝播を通じて最適化でき、それによってターゲット タスクのパフォーマンスが向上します。モデル効果。ここでのトレーニング可能なテンソルは、ソフト プロンプトであるプロンプト テキストに対応する埋め込みとして理解できます。以下の図に示すように、このトレーニング可能なテンソルの形状は [virtal_tokens_sum, embed_size] です。

プロンプト チューニングでは、大規模モデルの元のパラメーターがフリーズされ、新しく追加されたプロンプト テンソルのみがトレーニングされます。プロンプトチューニングの効果は、ベースモデルのパラメータ数が増えるほど良くなります。

プレフィックスチューニング

プレフィックス チューニング [14] はプロンプト チューニングに似ており、タスク固有のテンソルを入力に追加します。このテンソルはトレーニング可能で、事前トレーニングされたモデルのパラメーターは変更されません。主な違いは次のとおりです。

  1. プレフィックス チューニングではすべてのトランスフォーマー層にプレフィックス パラメーター (トレーニング可能なテンソル) が追加されますが、プロンプト チューニングではトレーニング可能な行列のみが入力埋め込みに追加されます。具体的には、プレフィックス調整により、プレフィックス テンソルが past_key_value としてすべてのトランスフォーマー層に追加されます。

  2. ソフト プロンプトを直接最適化するのではなく、別の FFN を使用してプレフィックス パラメータをエンコードして最適化します。不安定になり、パフォーマンスが低下する可能性があります。ソフト プロンプトを更新した後、FFN は使用されなくなりました。

プレフィックス チューニングとプロンプト チューニングは異なる場所で機能し、トレーニング可能な位置エンコーディングと回転位置エンコーディングの RoPE に似ています。前者は入力埋め込みに直接作用し、後者はすべてのトランスフォーマー層のセルフアテンション ブロックに作用し、K と V が計算された後、トレーニング可能なプレフィックス テンソルと連結されます。

プレフィックス調整の訓練可能なテンソルの形状は です下の図は LLaMA-7B のプレフィックス チューニングの例です。LLaMA-7B には 32 のトランス層があり、隠れ次元は 4096 で、30,262144=2×32×4096 あります。30 は仮想ワードの数に対応します。ここでの 2 は K と V に対応します。

アダプタ

アダプター [16] は、両方とも各変換層に追加のトレーニング可能なパラメーターを追加するという点でプレフィックス チューニングに似ています。違いは、次の図に示すように、プレフィックス チューニングでは入力エンベディングにプレフィックスが追加されるのに対し、アダプターではアダプター層が 2 つの場所に挿入されることです。

LLaMAアダプター

LLaMA アダプター[16] は、プレフィックス チューニングとアダプターを組み合わせたものです。プレフィックス調整と同様に、LLaMA アダプターは入力埋め込みにトレーニング可能なプロンプト テンソルを追加します。プレフィックスは外部から与えられるのではなく、埋め込み行列として学習および維持されることに注意してください。各トランスフォーマー層には独自の異なる学習可能なプレフィックスがあり、異なるモデル層をより調整して適応させることができます。

上の図に示すように、LLaMA アダプターはゼロ初期化アテンション メカニズムとゲート メカニズムを導入しています。その動機は、アダプターとプレフィックスの調整をランダムに初期化されたテンソル (プレフィックス プロンプトとアダプター層) と組み合わせると、事前トレーニングされた言語モデルの意味論的な知識に損傷を与える可能性があり、その結果、初期段階で不安定な微調整と高いパフォーマンスの損失が発生する可能性があるということです。トレーニング。

もう 1 つの重要な違いは、LLaMA アダプターは学習可能な適応プロンプトをすべてのトランスフォーマー層ではなく、L 個の深いトランスフォーマー層にのみ追加することです。著者らは、このアプローチにより、高レベルの意味情報に焦点を当てた言語表現をより効果的に微調整できると考えています。

おすすめ

転載: blog.csdn.net/chaishen10000/article/details/132763738