この記事では、ChatGLM、LLAMA、Baichuan モデルのアップグレード パスを深く分析し、大規模な言語モデルの構造の選択について説明することで、体系的な視点を提供し、大規模な事前トレーニング モデルの重要な要素を整理します。この知識が、実際のプロジェクトでより強力で柔軟かつ効率的な大規模な事前トレーニング モデルを構築するための強力な参考とガイダンスを皆さんに提供できることを願っています。
導入
現在、大規模な言語モデルは、ChatGLM、LLAMA、Baichuan など、さまざまな分野で大きな進歩を遂げています。これらは、さまざまな自然言語タスクの処理において驚くべきパフォーマンスを実証しています。ただし、研究が深まり、アプリケーション要件が拡大し続けるにつれて、より高いパフォーマンス要件と幅広いアプリケーション シナリオを満たすために、これらの大規模モデルを継続的にアップグレードおよび最適化する必要があります。
このプロセスでは、研究者および実践者として、大規模モデルをアップグレードする方法は何か?を深く調査する必要があります。アップグレード プロセス中にどのような課題に直面しましたか? アップグレードを実現するにはどのような手段や方法が使用されますか? このブログの目的は、これについて詳細な議論を行い、ChatGLM、LLAMA、Baichuan などのモデルのアップグレード プロセスを整理し、その背後にある理由を分析し、大規模なモデルを最適化してアップグレードする方法を示すことです。
ChatGLM アップグレード パス
まず、ChatGLM アップグレード前後の主要なランキングの結果を比較すると、ChatGLM2-6B モデルと比較して、ChatGLM-6B は各ランキングで 20 ~ 30% 近くの向上を達成しています。
▐ MMLU
Chat モデルはゼロショット CoT (Chain-of-Thought) メソッドを使用してテストされ、Base モデルは少数ショットの回答のみのメソッドを使用してテストされます。
▐ C-評価
Chat モデルはゼロショット CoT メソッドを使用してテストされ、Base モデルは少数ショット応答のみのメソッドを使用してテストされます。
▐ GSM8K
すべてのモデルは、少数ショット CoT メソッドを使用してテストされています。CoT プロンプトは http://arxiv.org/abs/2201.11903 から取得されます。
翻訳 API を使用して GSM8K で 500 の質問と CoT プロンプトを翻訳し、手動校正を実行しました
▐ BBH
すべてのモデルは、少数ショット CoT メソッドを使用してテストされています。CoT プロンプトは、https://github.com/suzgunmirac/BIG-Bench-Hard/tree/main/cot-prompts から取得されます。
▐ チャットGLM
ChatGLM-6B は、中国語と英語のバイリンガルをサポートするオープンソースの会話言語モデルで、一般言語モデル (GLM) アーキテクチャに基づいており、62 億のパラメータがあります。モデル量子化テクノロジーと組み合わせることで、ユーザーはそれを民生用グラフィック カードにローカルに展開できます (INT4 量子化レベルでは最低 6GB のビデオ メモリが必要です)。ChatGLM-6B は ChatGPT と同様のテクノロジーを使用しており、中国語の質疑応答と対話に最適化されています。約 1T の識別子を使用した中国語と英語のバイリンガル トレーニングを経て、教師付き微調整、フィードバック セルフサービス、ヒューマン フィードバック強化学習、その他のテクノロジーによって補完された後、62 億のパラメーターを備えた ChatGLM-6B は、次の内容と完全に一致する回答を生成することができました。人間の好み。
一般言語モデル (GLM) アーキテクチャのアドレス: https://github.com/THUDM/GLM
関連する分析については、https://zhuanlan.zhihu.com/p/627832567?spm=ata.21736010.0.0.1ee417b1JcVsy を参照してください。
▐ チャットGLM2
ChatGLM2-6B は、オープンソースの中国語と英語のバイリンガル対話モデル ChatGLM-6B の第 2 世代バージョンです。スムーズな対話や導入敷居の低さなど、第 1 世代モデルの多くの優れた機能を維持しながら、ChatGLM2-6B には次の新機能が導入されています。特徴:
より強力なパフォーマンス: 第一世代 ChatGLM モデルの開発経験に基づいて、ChatGLM2-6B のベース モデルを包括的にアップグレードしました。ChatGLM2-6Bは、GLMのハイブリッド目的関数を使用し、1.4Tの中国語と英語の識別子の事前学習と人間の好みの調整トレーニングを経ており、評価の結果、第一世代モデルと比較して、ChatGLM2-6Bは優れた性能を示しています。 MMLU (+23%)、CEval (+33%)、GSM8K (+571%)、BBH (+60%) などのデータセットのパフォーマンスが大幅に向上し、オープンソース モデルの中で非常に競争力があります。同じサイズです。
より長いコンテキスト: FlashAttendant テクノロジーに基づいて、基本モデルのコンテキスト長 (Context Length) を ChatGLM-6B の 2K から 32K に拡張し、会話段階でのトレーニングに 8K のコンテキスト長を使用しました。より長いコンテキストについては、ChatGLM2-6B-32K モデルをリリースします。LongBench の評価結果は、ChatGLM2-6B-32K が、同等の規模のオープンソース モデルの中で明らかな競争上の優位性を持っていることを示しています。
より効率的な推論: マルチクエリ アテンション テクノロジに基づいた ChatGLM2-6B は、より効率的な推論速度と低いグラフィック メモリ使用量を実現します。公式モデルの実装では、推論速度は第 1 世代と比較して 42% 向上し、INT4 定量化では推論速度が向上しました。 、6G ビデオメモリでサポートされる会話の長さが 1K から 8K に増加しました。
よりオープンなプロトコル: ChatGLM2-6B ウェイトは学術研究に完全にオープンであり、登録用のアンケートに記入した後は無料の商業利用も許可されます。
ChatGLM-6B アドレス: https://github.com/THUDM/ChatGLM-6B
GLM アドレス: https://github.com/THUDM/GLM
評価結果アドレス:https://github.com/THUDM/ChatGLM2-6B#%E8%AF%84%E6%B5%8B%E7%BB%93%E6%9E%9C
FlashAttend アドレス: https://github.com/Dao-AILab/flash-attention
LongBench アドレス: https://github.com/THUDM/LongBench
マルチクエリ アテンション アドレス: https://arxiv.org/abs/1911.02150
▐アップグレード プロセス
モデル構造
モデル構造の変更: Prefix-LM から純粋な Decoder-Only 構造に戻ります。つまり、SFT プロセスのすべてが最初に gMASK を通じて生成されます。
コードの比較は次のとおりです。
回路図は以下の通りです:
チャットGLM2:
では、この変化は何をもたらすのでしょうか?
その答えは、モデルのトレーニング効率を大幅に向上させることです。
画像ソース: https://github.com/THUDM/ChatGLM2-6B/issues/16
複数ラウンドのダイアログを処理するプロセスでは、Q1A1、Q2A2、Q3A3 の 3 ラウンドのダイアログがあり、PrefixLM は 3 つのサンプルを構築する必要があります。
Q1->A1
Q1A1Q2->A2
Q1A1Q2A2Q3->A3
このデータ構築方法は、モデルのトレーニングの効率に影響を与える深刻なデータ拡張の問題を引き起こします。
反対に、Decoder-Only モデルは、Causal Mask の特性 (各トークンは以前のすべてのトークンの実際の入力を見ることができます) を利用して、1 つのサンプルで複数ラウンドの対話を実装できます。
サンプル ビルド: Q1 A1 Q2 A2 Q3 A3
損失計算: A1 A2 および A3 部分のみ計算する必要があります
よく振り返ってみると、対話セッション レベルのトレーニングと分割トレーニングの原理的な違いは何でしょうか?
1. セッションレベルのトレーニング 効果の 1 つは、同等のバッチ サイズが大きくなり (1 つのバッチにより多くのサンプルを適合できる)、同じ会話で生成されるサンプルが 1 bs 以内になることです。
セッション レベルで異なるラウンドで生成された勾配が平均され、分割ラウンド構築トレーニングが合計されます。これは lr が大きくなることと同等であり、異なるラウンドでのトークンの重みの分布にも影響します。異なるラウンドにおけるトークンの重みの分布、ノルムの計算。
定量分析のための単純化された例を使用しましょう. 2 つのトレーニング サンプルが次のように分割されていると仮定します。
1. 質問:A 答え:xx
2. 質問:A 回答:xx 質問:B 回答:xx 質問:C 回答:xx
この場合、セッション レベルのトレーニング影響勾配は (Ga+(Ga + Gb + Gc)/3)/2 となります。A、B、C に対する衝撃の重みは、それぞれ 2/3 1/6 1/6 です。
トレーニングを開梱すると、(Ga+Ga+ (Ga + Gb)/2 +(Ga + Gb + Gc)/3)/4 になります。A、B、C に対する衝撃の重みは、それぞれ 17/24 5/24 1/12 です。
上記のウェイト配分から判断すると、セッションレベルが低いラウンドはスプリットよりも大きな影響を与えます。ほとんどのシーンで冒頭のセリフが似ていて繰り返しになるため、これはより合理的でもあります。
シーケンスの長さ
シーケンス長: 事前トレーニングされたモデルは 32K の長さでトレーニングされ、SFT 微調整モデルは 8K の長さでトレーニングされます。
さらに、7 月 31 日、Zhipu AI は ChatGLM2-6B-32K をリリースしました。これは長いコンテキストに最適化された大規模なモデルであり、ChatGLM2-6B に基づいて微調整され、最大 32K の長さのコンテキストをより適切に処理できます。
以前、ChatGLM2-6B が最初にリリースされたとき、このモデルは最大 32K の長いコンテキスト入力をサポートすると公式に発表されましたが、LM-SYS の公式テストでは、長さが 8K を超えると ChatGLM2-6B のパフォーマンスが低下することが示されました: 大規模言語の評価超長時間のコンテキスト入力をサポートするモデルと要約 - ChatGLM2-6B のパフォーマンスは悲惨で、最も強力なのは依然として商用モデル GPT-3.5 と Claude-1.3 (アドレス: https://www.datalearner.com/blog/1051688222070709) 。
具体的には、ChatGLM2-6B-32K は、位置補間法に基づいて位置エンコーディングを更新し、会話フェーズでのトレーニングに 32K のコンテキスト長を使用します。実際に使用する場合、基本的にコンテキスト長が 8K 以内の場合は ChatGLM2-6B を、8K を超えるコンテキスト長を扱う必要がある場合は ChatGLM2-6B-32K を使用することを公式が推奨しています。
位置補間の概要については、ブログを参照してください: RoPE 回転位置コーディングの詳細な分析: 理論的導出、コード実装、長さの外挿 (アドレス: https://zhuanlan.zhihu.com/p/645263524)
ChatGLM2-6B アドレス: https://www.datalearner.com/ai-models/pretrained-models/ChatGLM2-6B
オペレーターの最適化
オペレーターの最適化: フラッシュ アテンションとマルチクエリ アテンションにより、トレーニングと推論の速度が向上します。
今回、ChatGLM2-6Bコンテキストが2kから32kに拡張され、FlashAttendantという技術も適用されました。フラッシュ アテンションは、ハッシュ認識と呼ばれる手法を利用して、入力シーケンス内の要素をバケット内の異なる要素に割り当てる、高速かつ効率的でスケーラブルなアテンション メカニズムです。このように、モデルはシーケンス全体ではなく、バケット内の要素間の注意の重みを計算するだけで済みます。これにより、高い精度と表現力を維持しながら、計算要件とメモリ要件が大幅に軽減されます。
LLAMA アップグレード パス
まず、LLAMA アップグレード前後の主要なリストの結果を比較します。LLAMA モデルと比較して、LLAMA2 は各リストで 10 ~ 30% 近くの改善を達成しました。
MMLU
GSM8K
▐ ラマ
LLaMA
(Large Language Model Meta AI) は、Meta AI によってリリースされたオープンで効率的な大規模基本言語モデルであり、 7B
、13B
、33B
、65B
(650 億) の 4 つのバージョンがあります。データ セットのソースは、カスタマイズされたデータ セットを含まないすべての公開データ セットであり、その作業がオープン ソースと互換性があり、再現可能であることが保証されています。トレーニング データ セット全体には、トークン化後の約 1.4T トークンが含まれています。
モデルのパフォーマンスに関しては、LLaMA のパフォーマンスは非常に優れています。130 億パラメータの LLaMA モデルは、「ほとんどのベンチマークで」GPT-3 (1750 億パラメータ) を上回り、単一の V100 GPU で実行できますが、最大 650 億パラメータの LLaMA モデルは、 Google の Chinchilla-70B および PaLM-540B に匹敵します。
トレーニング セットに関しては、そのソースはカスタマイズされたデータ セットを含まないすべての公開データ セットであり、その作業がオープン ソースと互換性があり、再現可能であることが保証されています。トレーニング データ セット全体には、トークン化後の約 1.4T のトークンが含まれています。その中で、LLaMA-65B と LLaMA-33B は 1.4 兆トークンでトレーニングされ token
、最小モデルの LLaMA-7B は 1 兆トークンでトレーニングされました。
モデル構造:
PreLayerNorm-RMSNorm-Root Mean Square レイヤー正規化
ROPE 回転位置エンコーディング (絶対/相対位置エンコーディングを置き換えます)
SwiGLU アクティベーション機能 (ReLU を置き換える)-GLU バリアントによるトランスフォーマーの改善
▐ ラマ2
公式ページの紹介文は以下の通り。
モデル構造に関しては、主なアップグレード ポイントが 2 つあります。
学習データトークン数は1.4T→2T
2K→4Kのシーケンス長
SFT プロセスでは、LLAMA2 はデータ品質の重要性を強調し、2W の高品質な命令データを通じてモデルの命令追従能力を刺激します。
RLHF プロセスでは、LLAMA2 がさらに多くの作業を行い、RLHF プロセスについてさらに説明しました。私たちは 100 万の Reward データセットを構築し、2 つの独立した Reword モデルをトレーニングしました。
LLAMA2 論文全体は次のように解釈されます。
LLAMA2-Chat モデルのトレーニング プロセスは次のようになります。これには主に、事前トレーニング、SFT、RLHF の 3 つのステップが含まれます。
事前トレーニング
LLAMA2 の主な改善点には、より強力なデータ クリーニング、更新されたデータの組み合わせ、合計トレーニング トークンの 40% の増加、コンテキストの長さの 2 倍、および大規模なモデルの推論のスケーラビリティを向上させるためのグループ化クエリ アテンション (GQA) の使用が含まれます。
モデル構造:
RMSノルム
SwiGLU
ロープ
4K シーケンスの長さ
グループクエリアテンション GQA (33B/70B)
SFT
著者らは、サードパーティの SFT データセットの多くが多様性と品質に欠けていることを発見したため、独自の高品質 SFT データを収集することに重点を置きました。
彼らは、自社のベンダーベースのアノテーションの取り組みから、少数ながら高品質のサンプルを使用すると、サードパーティのデータセットからの何百万ものサンプルを使用する場合と比較して、結果が大幅に向上することを観察しました。彼らは、高品質の結果を達成するには数万の SFT アノテーションで十分であることを発見し、合計 27,540 のアノテーションが収集されました。
RLHF
導入するコアとなるステップは主に、データ収集、報酬モデル、反復トレーニングの 3 つです。
人間の嗜好データの収集
表 6 に 140WMeta の自作データ セットを含む嗜好データを示しますが、オープン ソース データ セットと比較して、自作データ セットはターン数と会話の長さが長くなります。
報酬モデル
LLAMA2 は 2 つの独立した報酬モデル (有益性 RM/安全性 RM) をトレーニングします。
動機: 研究によると (Bai et al., 2022a)、有用性とセキュリティの間にはトレードオフが存在する場合があり、そのため単一の報酬モデルではこれら 2 つの側面のパフォーマンスにおいて課題に直面する可能性が高くなります。
この問題を解決するために、著者らは 2 つの独立した報酬モデルをトレーニングしました。1 つは有用性について最適化されたモデル (有用性報酬モデル、Helpfulness RM と呼ばれます)、もう 1 つは安全性について最適化されたモデル (安全性報酬モデル、Safehood RM と呼ばれます) です。これにより、有用性と安全性のそれぞれの点でより良い結果が得られ、Llama 2-Chat が強化学習人間の好み (RLHF) プロセスで人間の好みに沿ったものになり、生成された回答の有用性と安全性が向上します。
損失関数
境界 m(r) は、嗜好スコアの離散関数です。著者らは、応答ギャップが大きいペアにはより大きな境界を使用し、同様の応答を持つペアにはより小さな境界を使用します (表 27 を参照)。著者らは、この境界成分により、特に 2 つの応答間のギャップが大きいサンプルにおいて、有用性報酬モデルの精度を向上させることができることを発見しました。
反復トレーニング
LLAMA2 は、PPO と拒否サンプリング アルゴリズムという 2 つの強化学習アルゴリズムを使用します。
これら 2 つの強化学習アルゴリズムの主な違いは次のとおりです。
幅: 拒絶サンプリングでは、モデルは特定のチップに対して K 個のサンプルを探索しますが、PPO では生成プロセスが 1 つだけあります。
深さ: PPO では、トレーニング プロセス中のステップ t のサンプルは、ステップ t-1 での勾配更新後のモデル ポリシーの関数です。拒絶サンプリング微調整では、モデルの初期ポリシーに基づいてすべての出力がサンプリングされて新しいデータセットが収集され、SFT と同様に微調整されます。ただし、反復的なモデル更新が採用されているため、2 つのアルゴリズム間の本質的な違いは明らかではありません。
LLAMA2 から RLHF (V4) までは、リジェクション サンプリングの微調整のみを使用します。次に、最初に PPO を拒否サンプリング チェックポイントに適用し、次にサンプルを拒否することで、2 つの方法を組み合わせます。LLAMA2 は、拒否サンプリングに最大の 70B Llama 2-Chat モデルのみを使用します。他の小さいモデルは、大きいモデルの拒絶サンプリング データに基づいて微調整され、それによって、大きいモデルの能力が小さいモデルに伝達されます。
白川のアップグレードへの道
まず、アップグレード前後の主要なランキングの結果を比較すると、Baichuan-7B モデルと比較して、Baichuan-13B は各ランキングで 20% 近くの向上を達成しました。
C-Eval (アドレス: https://cevalbenchmark.com/index.html?spm=ata.21736010.0.0.1ee417b1XXSVsy#home)
MMLU (アドレス: https://arxiv.org/abs/2009.03300)
注: MMLU の公式評価計画を採用しています。
CMMLU
説明: CMMLU は、中国語のコンテキストにおける言語モデルの知識と推論能力を評価するために特に使用される包括的な中国語評価ベンチマークです。正式な評価計画が採用される。
▐ バイチュアン-7b
Baichuan-7B は、Baichuan Intelligence によって開発された、オープンソースで市販されている大規模な事前トレーニング済み言語モデルです。Transformer 構造に基づいて、約 1 兆 2,000 億のトークンでトレーニングされた 70 億のパラメーター モデルは中国語と英語のバイリンガルをサポートし、コンテキスト ウィンドウの長さは 4096 です。標準的な中国語と英語の両方のベンチマーク (C-Eval/MMLU) で、同じサイズで最良の結果が得られます。
Baichuan モデルの構造は LLAMA に似ており、次の最適化が行われています。
トークナイザー
学術的なソリューションを参考に、SentencePiece の Byte-Pair Encoding (BPE) が単語分割アルゴリズムとして使用され、次の最適化が行われます。
現在、ほとんどのオープンソース モデルは主に英語の最適化に基づいているため、中国語コーパスの効率が低いという問題があります。主に中国語と英語を中心とした 2,000 万の多言語コーパスを使用して単語セグメンテーション モデルをトレーニングし、中国語の圧縮率を大幅に向上させました。
数学の分野では、数値の不一致の問題を回避するために、数値の各桁を個別に分離する LLaMA と Gaoptica のソリューションを参照します。これは、数学的能力を向上させるのに非常に役立ちます。
まれな単語 (特殊記号など) については、UTF-8 文字のバイト エンコーディングがサポートされているため、未知の単語を完全にカバーできます。
以下の表に示すように、さまざまな単語セグメンターによるコーパスの圧縮率を分析しました。私たちの単語セグメンターは、LLaMA、Falcon、その他のオープンソース モデルよりも大幅に優れていることがわかります。また、他の中国語単語セグメンターと比較すると、トレーニング圧縮率が同等であれば推論効率が高くなります。
オペレーターの最適化
より効率的な演算子を使用します: Flash-Attend、ChatGLM2 と同じ
▐ バイチュアン-13b
Baichuan-13B は、Baichuan-7B の後に Baichuan Intelligent によって開発された、130 億個のパラメータを含むオープンソースの商用大規模言語モデルであり、権威ある中国語と英語のベンチマークで同じサイズの最高の結果を達成しています。このリリースには、事前トレーニング (Baichuan-13B-Base) と調整 (Baichuan-13B-Chat) の 2 つのバージョンが含まれています。Baichuan-13B には次の特徴があります。
より大きなサイズ、より多くのデータ: Baichuan-13B は、Baichuan-7B に基づいてパラメーターの数を 130 億にさらに拡張し、高品質のコーパスで 1 兆 4000 億のトークンをトレーニングし、LLaMA-13B を 40% 上回りました。 13B サイズで最も大量のトレーニング データを含むモデル。中国語と英語のバイリンガルをサポートし、ALiBi 位置エンコーディングを使用し、コンテキスト ウィンドウの長さは 4096 です。
同時に、オープンソースの事前トレーニングおよび調整モデル: 事前トレーニング モデルは開発者にとっての「ベース」ですが、大多数の一般ユーザーは対話機能を備えた調整モデルに対する強いニーズを持っています。したがって、このオープンソースでは、強力な対話機能を備え、すぐに使用でき、わずか数行のコードで簡単に導入できる調整モデル (Baichuan-13B-Chat) もリリースしました。
推論の効率化:より幅広いユーザーの利用をサポートするため、今回は量子化版の int8 と int4 をオープンソース化し、非量子化版に比べて導入時のマシンリソースの閾値をほぼ大幅に削減しました。効果が失われることはなく、Nvidia 3090 などのコンシューマーグレードのグラフィックス カードに導入できます。
オープンソース、商用利用は無料: Baichuan-13B は学術研究に完全にオープンであるだけでなく、開発者は電子メールで申請して正式な商用ライセンスを取得した後、無料で使用することもできます。
モデル詳細
▐アップグレード プロセス
パラメータの数: baichuan13B は、baichuan7B と比較してパラメータの数がまず 2 倍になります。パラメータの数が多いほど、知識の容量が大きくなります。より多くのトレーニング データ (1.2T->1.4T) を通じて、ベース モデルの常識能力が向上します。 ;
位置エンコーディング: RoPE から ALiBi に変更され、長さの外挿をある程度まで実行できるようになりました (ヒント: RoPE はより長い範囲にわたって外挿を実行できます)。
優れた基本モデルを構築するにはどうすればよいでしょうか?
ChatGLM、LLAMA、および Baichuan の大規模言語モデルのアップグレードについて徹底的に議論した後、議論の範囲をさらに拡大し、大規模モデルに必要な主要な機能、これらの機能を実現するために必要な技術的手段、および設計を検討します。モデル構造のメソッド。これは、実際のアプリケーションで大規模なモデルを構築および最適化するための強力なリファレンスとガイダンスを提供します。
次のセクションでは、次の側面について説明します: まず、長さの外挿や常識など、大規模な事前トレーニング モデルに必要なコア機能を分析します。次に、高度なテクノロジと手法の使用方法を紹介します。事前トレーニング戦略、最適化アルゴリズム、損失関数などを含むこれらの機能を実現するために、最後にモデル構造について説明し、高パフォーマンスの大規模言語モデルを実現するために適切な LLM (大規模言語モデル) 構造を選択する方法を分析します。モデル。
このセクションの目的は、包括的な視点を提供し、大規模モデルの主要な要素を理解して、実際のプロジェクトでより強力で柔軟かつ効率的な大規模な事前トレーニング モデルを構築できるようにすることです。
▐大型モデルに必要な機能 とアップグレード方法
ChatGLM、LLAMA、Baichuan などの大規模言語モデルのアップグレード プロセスの分析を通じて、それらの改善は主に基本的な知識機能の向上とサポートされるシーケンス長の変更に焦点を当てていることがわかります。このセクションでは、これら 2 つの主要な機能のアップグレード戦略を整理して要約することに重点を置きます。
基本知識
基本的な知識能力の向上には多くの領域が含まれており、これらの領域は次の一般的に使用される評価セットを通じて理解できます。
英語の知識—MMLU
中国語の知識 - C-Eval
推論 — GSM8k/BBH
コード — HumanEval/MBPP
数学—MATH
著者は、基本的な知識能力をアップグレードするための主な戦略は、モデルのパラメーターとトレーニング データの量を増やし、より大量のパラメーターとデータを通じて関連分野の知識をモデルがより適切に適合できるようにすることであると考えています。
このプロセスで最も重要なことはトレーニング データの品質です。データをクリーンアップする一般的な方法は次のとおりです。
無効なデータ、ダーティデータのフィルタリング
無意味なテキストやテンプレート化されたテキスト (HTML コード、Lorem ipsum など) などの一部の無効なデータ。多言語コーパスの構築中であっても、言語モデリングのために Web サイトからテキストを抽出することは非常に困難です。ただし、NTP (Next Token Prediction) メソッドはモデルをトレーニングすることを目的としており、データ自体が実際の言語世界の適切なマッピングであるため、これを行う必要があります。justext、trafilatura などのデータ クリーニング ツールは、ノイズの削減 (精度の向上) とすべての有効な部分の保持 (再現率の向上) のバランスを取りながら、HTML テンプレート テキストを効果的に削除できます。もう 1 つのポイントは、Web コーパス内の無効なデータに対処する効果的な方法の 1 つは、フィルタリングにメタデータを使用することです。たとえば、OpenAI が GPT-2 の WebText コーパスを構築したとき、少なくとも 3 件の「いいね!」が付いた Reddit 上のすべての外部リンクをクロールしました。このヒューリスティックな手法は、データ品質を確保しながらデータセット内のノイズを低減するのに役立ちます。
文書長フィルタ
一方では、NTP (次のトークン予測) を考慮すると、コーパスから非常に短いドキュメント (~100 未満のトークンを含むテキスト) を削除すると、ノイズを除去するのに役立ちます。一方、最近のほとんどの言語モデルは Transformer アーキテクチャに基づいているため、非常に大きなドキュメントを前処理し、必要な長さの連続したセグメントに分割することが便利です。
機械生成されたデータのフィルタリング
言語モデルをトレーニングする目的の 1 つは、人間の言語の分布を把握することです。ただし、Web クロールされたデータ セットには、既存の言語モデルによって生成されたテキスト、OCR テキスト、機械翻訳されたテキストなど、大量の機械生成テキストが含まれています。たとえば、http://patents.google.com のデータは C4 コーパスの大部分を構成します。このコーパスは、機械翻訳を使用して、世界中の特許庁の特許を英語に翻訳します。さらに、Web コーパス内のデータには、スキャンされた書籍や文書から OCR で生成されたテキストが含まれています。OCR システムは完璧ではないため、生成されたテキストは自然な英語とは異なる分布になります (多くの場合、OCR システムはスペルミスや単語全体の欠落などの予測可能なエラーを起こします) - これは重要ですが、実行するのは困難です。PDF スキャン ドキュメントの作成方法は次のとおりです。本当に頭が痛い。機械生成テキストを識別することは困難ですが、機械生成テキストを識別して検出するために使用できる Ctrl-detector などのツールがあります。言語モデリングのためにコーパスを前処理する場合、コーパス内の機械生成テキストの存在を特徴付けて記録することが重要です。
重複を削除する
インターネットから生のテキストをスクレイピングして作成されたデータセットでは、多くの場合、同じシーケンスが複数回繰り返されます。たとえば、「トレーニング データの重複排除により言語モデルがより良くなる」という論文の中で、著者は C4 データ セットで 50 単語のシーケンスが 60,000 回繰り返されていることを発見しました。実際、重複排除されたデータセットでモデルをトレーニングすると、処理が速くなり、メモリ効果が発生しにくくなりますが、これは悪いことです。最近、研究者らは、反復データでトレーニングされた言語モデルが、攻撃者がトレーニングされたモデルからシーケンスを生成し、どのシーケンスがトレーニング セットのメモリから来たものであるかを検出するというプライバシー攻撃に対して脆弱であることも示しました。論文「トレーニング データの重複排除により言語モデルのプライバシー リスクが軽減される」の中で、著者は、言語モデルがトレーニング シーケンスを再生成する速度が、トレーニング セット内のシーケンスの出現数と超線形に関係していることを示しています。たとえば、トレーニング データに 10 回出現するシーケンスは、1 回だけ出現するシーケンスよりも平均して 1,000 倍多くのデータを生成します。重複排除はさまざまな粒度レベルで実行できます。完全一致重複排除からあいまい重複排除 (重複テキストデータセットやデータスケッチなど) までのツールは、処理中のコーパス内の冗長テキストを削減および削除するのに役立ちます。多くの研究者が指摘しているように、Web クローリング データセットのサイズにより、重複排除プロセスには大量のコンピューティング リソース (CPU と RAM) が必要になることを理解する必要があるため、このような計算は分散環境で実行することが推奨されます。
汚染されたデータをクリーンアップする
この部分はかなり物議を醸しており、詳細な基準はまだないかもしれませんが、多くの企業は非常に功利主義でもあるため、何とも言えません。NLP の分野でよくデータ クリーニングと呼ばれるものは、主にトレーニング データとテスト データの区別と処理を指します。大規模な言語モデルの場合、トレーニング データ セットとテスト データ セットの両方がインターネットから発信されるため、トレーニング データ セットとテスト データ セットが重複しないようにするこのプロセスは困難になる可能性があります。大規模な言語モデルの評価では、質問と回答のペアなどのベンチマーク データが使用されることがよくありますが、トレーニング データにこれらのデータが含まれていると、ベンチマーク パフォーマンスの過大評価につながる可能性があります。したがって、除染操作が必要です。つまり、トレーニング データ セットの整合性を確保するために、ベンチマーク データ セットと重複する部分をトレーニング データから削除します。OpenAI の研究者が WebText データセットを作成したとき、Wikipedia データがベンチマーク データセットで広く使用されていたため、すべての Wikipedia コンテンツを除外してデータを汚染除去しました。もう 1 つのケースは、EleutherAI の研究者によるもので、ベンチマーク データ セットを除染するための lm-eval harness と呼ばれるソフトウェア パッケージを開発しました。特定の操作では、次の 2 種類のデータ汚染に注意する必要があります。
入出力の汚染: この場合、下流タスクと同じラベルを持つデータが事前学習コーパスに存在します。言語モデリングなどのタスクの場合、タスク ラベルがターゲット テキストになります。ターゲット テキストがトレーニング前コーパスに表示される場合、モデルは実際にタスクを解決するのではなく、テキストをコピーする傾向がある可能性があります。
入力汚染: これは、評価サンプルにラベルが含まれていない状況を指します。これは、下流タスクのパフォーマンスの過大評価につながる可能性もあります。ゼロショット評価および少数ショット評価を実行する場合、事前トレーニング データセットに一般的なベンチマーク タスクと重複するデータがある場合は、データの汚染除去に注意を払う必要があります。
毒性とバイアスの制御
その豊かな多様性にもかかわらず、オンライン コーパスには有害で偏ったコンテンツが溢れていることがよくあります。たとえば、記事「RealToxicityPrompts」では、著者は PerspectiveAPI を使用して、OpenWebText コンテンツと WebText コンテンツのそれぞれ 2.1% と 4.3% が 50% を超える毒性スコアを持っていることを指摘しました。したがって、言語モデルをトレーニングするときは、注意を払い、PerspectiveAPI などのツールを使用してトレーニング前のデータセット内の有害なコンテンツをフィルターで除外し、モデルがバイアスを示したり、下流のアプリケーションで有害なコンテンツを生成したりするのを防ぐ必要があります。解決策の 1 つは、C4 の作成者が行っているように、「悪い言葉」リストからテキストを除外することです。別の例として、PILE データセットの研究者はスパムスキャナーを使用して有害なコンテンツを分類しました。ただし、そのようなフィルタリング手順は、覇権的な見解に固執する可能性が高い意見がフィルタに保持されないように、下流のアプリケーションを念頭に置き、細心の注意を払って実行する必要があります。データを活用して言語モデルを事前トレーニングする前に、軽蔑的なコンテンツとジェンダー/宗教的偏見を詳細に分析する必要があります。
個人を特定できる情報の管理
大規模なデータ セットを収集する場合、特に実名、組織名、医療記録、社会保障番号などの個人を特定できる情報 (PII) を扱う場合、データ セット インスタンスに関連する法的問題を理解することが重要です。アプリケーションによっては、言語モデルを事前トレーニングする前に、この情報をマスクまたは削除する必要があります。presidio や pii-codex などのツールは、テキスト データ内の個人を特定できる情報を検出、分析、処理するためのプロセスを提供します。これらのツールは、データ セット内の個人情報が適切に処理されて、関連するプライバシー規制を遵守し、ユーザーのプライバシーを保護するのに役立ちます。
シーケンスの長さ
大規模な言語モデルでサポートされるシーケンスの長さは、主に次の 2 つの側面の影響を受けます。
トレーニングフェーズの最大長
モデルの長さの外挿可能性
最初のポイントはトレーニング フェーズの最大長であり、DeepSpeed などの分散トレーニング戦略を使用してモデルのメモリ使用量を削減し、それによってトレーニングのシーケンスの長さを増やすことができます。
2点目は、モデルの長さの外挿は位置コーディングの設計によって実現されるという点であり、実装方法についてはモデル構造の設計の項を参照してください。
▐モデル 構造設計
大規模な言語モデルに必要な主要な機能とそれに対応するアップグレード戦略を整理した後、このセクションでは大規模なモデル構造の設計方法に焦点を当てます。効率的で強力な大規模な事前トレーニング済みモデルを構築する方法について詳しく説明します。
トークナイザー
baichuan 氏が言及した Tokenizer 設計方法を参照すると、エンコーダーは複雑な中国語と英語のタスクを処理できる必要があります。
現在、ほとんどのオープンソース モデルは主に英語の最適化に基づいているため、中国語コーパスの効率が低いという問題があります。主に中国語と英語を中心とした 2,000 万の多言語コーパスを使用して単語セグメンテーション モデルをトレーニングし、中国語の圧縮率を大幅に向上させました。
数学の分野では、数値の不一致の問題を回避するために、数値の各桁を個別に分離する LLaMA と Gaoptica のソリューションを参照します。これは、数学的能力を向上させるのに非常に役立ちます。
まれな単語 (特殊記号など) については、UTF-8 文字のバイト エンコーディングがサポートされているため、未知の単語を完全にカバーできます。
以下の表に示すように、さまざまな単語セグメンターによるコーパスの圧縮率を分析しました。私たちの単語セグメンターは、LLaMA、Falcon、その他のオープンソース モデルよりも大幅に優れていることがわかります。また、他の中国語単語セグメンターと比較すると、トレーニング圧縮率が同等であれば推論効率が高くなります。
レイヤノルム
LayerNorm には Pre-LN と Post-LN の 2 種類がありますが、Post-LN は学習過程で不安定であるという研究結果もあり、現在大規模なモデルでは基本的に Pre-LN の学習手法が使用されています。
LayerNormの計算方法
まず平均と分散を計算します。
次に、正規化を計算します。
これはスケーリングに使用され、最初は 1 に設定されます。
RMSNorm の計算方法
RMSNorm は平均が 0 であると仮定し、分散のみを正規化するため、学習速度が速く、効果の差も大きくありません。
MLP
MLP サブセクションには主に活性化関数の選択が含まれます。
再開する
ReLU は非常に人気のある活性化関数であり、その数式は次のとおりです。
剃る
ガウス誤差線形単位 (GELUS) の数式は次のとおりです。
GELU は、次の式を使用して近似することもできます。
GELU は入力に 0 と 1 で構成されるマスクを乗算し、マスクの生成は確率に従って入力にランダムに依存します。 入力が 次であると仮定します。 x が減少すると、入力がドロップアウトされる確率が高くなるため、アクティベーション変換は入力にランダムに依存します。
Bert の GeLU コードは次のとおりです。
def gelu(input_tensor):
cdf = 0.5 * (1.0 + tf.erf(input_tensor / tf.sqrt(2.0)))
return input_tesnsor*cdf
SwiGLU&GeGLU
SwiGLU と GeGLU は両方とも、Noam Shazeer の記事で検討されている活性化関数の亜種です。
具体的には、まず、ゲート線形ユニット (GLU) の基本的な双線形関数を理解する必要があります。
⊗ は要素ごとの乗算を表し、SwiGLU と GeGLU は GLU のバリアントであり、次のように定義されます。
で:
著者は活性化関数の原理と動機についてあまり説明していません. 論文自体はさまざまな活性化関数の効果を比較する試みです. SwishGLU と GeGLU が最小誤差を達成でき, また大きなモデルでの誤差が最小限に抑えられ、広く使用されています。
注意
アテンション層は主にアテンション演算子を最適化し、モデルの推論と展開を高速化します。
フラッシュアテンション
詳しい紹介については、https://zhuanlan.zhihu.com/p/626079753をご覧ください。
動機: 入力シーケンス (シーケンス長) が長い場合、Transformer の計算プロセスは遅くなり、メモリを消費します。これは、セルフアテンションにかかる時間とメモリの複雑さがシーケンス長の増加に応じて二次関数的に増加するためです。
標準的なアテンション (以下を参照) の中間結果 S および P には、通常、高帯域幅メモリ (HBM) を通じてアクセスする必要があり、両方に必要なメモリ空間の複雑さは です。この記事では次のように分析しています。
Flash注意: HBM へのアクセス数は
注意:HBMへのアクセス数は
多くの場合 (たとえば、GPT2 では N=1024、d=64)、FlashAttendant の方がはるかに高速になります。次の図は、GPT-2 (A100 GPU) 上の 2 つの間の、GFLOP、HBM、および前方+後方のランタイムの比較を示しています。
GPU の記憶装置には主に HBM と SRAM があり、HBM は大容量ですがアクセス速度が遅く、SRAM は容量は小さいですがアクセス速度が速いです。例: A100 GPU には 40 ~ 80 GB HBM があり、帯域幅は 1.5 ~ 2.0 TB/秒です。108 個のストリーミング マルチコア プロセッサにはそれぞれ 192 KB のオンチップ SRAM があり、帯域幅は約 19 TB/秒と推定されます。 。ご覧のとおり、オンチップ SRAM は HBM よりも 1 桁高速ですが、サイズは何桁も小さくなります。
要約すると、FlashAttendant の目的は FLOP を保存することではなく、HBM へのアクセスを減らすことです。重要な点は、トレーニングおよび予測プロセス中の FlashAttend の結果は標準の Attend と同じであり、ユーザーの影響を受けないのに対し、他の高速化メソッドではこれができないということです。
マルチクエリアテンション
論文アドレス: https://arxiv.org/pdf/1911.0215
MQA は 2019 年に提案された新しいアテンション メカニズムであり、モデルの効果を確保しながらデコーダーのトークン生成を高速化できます。
上のグラフからわかるように、エンコーダーでの MQA の速度向上はあまり明らかではありませんが、デコーダーでの速度向上は非常に顕著です。
論文の説明からわかるように、MQA ではすべてのヘッドが同じキーと値のマトリックスを共有でき、各ヘッドは個別のクエリ パラメーターのみを保持するため、キーと値のマトリックスのパラメーターの数が大幅に削減されます。
つまり、MQA は実際にヘッド内のキーと値の行列を抽出し、それらを共有パラメーターとして保存しますが、クエリは元のヘッドに保持されたままであり、各ヘッドには独自の一意のクエリ パラメーターがあります。
コード:
実装は非常に簡単で、元の次元を最初の数値 * 次元の合計に直接変更します。
# Multi Head Attention
self.Wqkv = nn.Linear( # 【关键】Multi-Head Attention 的创建方法
self.d_model,
3 * self.d_model, # 有 query, key, value 3 个矩阵, 所以是 3 * d_model
device=device
)
query, key, value = qkv.chunk( # 【关键】每个 tensor 都是 (1, 512, 768)
3,
dim=2
)
# Multi Query Attention
self.Wqkv = nn.Linear( # 【关键】Multi-Query Attention 的创建方法
d_model,
d_model + 2 * self.head_dim, # 只创建 query 的 head 向量,所以只有 1 个 d_model
device=device, # 而 key 和 value 不再具备单独的头向量
)
query, key, value = qkv.split( # query -> (1, 512, 768)
[self.d_model, self.head_dim, self.head_dim], # key -> (1, 512, 96)
dim=2 # value -> (1, 512, 96)
)
つまり、K と V の次元は d_model から self.head_dim に変換されます。
MQA では、クエリ ベクトルに加えて 8 つのヘッダーがあり、キー ベクトルと値ベクトルには「共通ヘッダー」が 1 つだけあります。
これは、「すべてのヘッドがキーと値のパラメータを共有する」という論文で述べられていることを裏付けるものでもあります。
残りの問題は、このパラメーターを 8 つのヘッドすべてに同時に使用する方法です。コードでは行列乗算 matmul を使用してブロードキャストするため、各ヘッドに同じテンソルを乗算してパラメーターの共有を実現します。
def scaled_multihead_dot_product_attention(
query,
key,
value,
n_heads,
multiquery=False,
):
q = rearrange(query, 'b s (h d) -> b h s d', h=n_heads) # (1, 512, 768) -> (1, 8, 512, 96)
kv_n_heads = 1 if multiquery else n_heads
k = rearrange(key, 'b s (h d) -> b h d s', h=kv_n_heads) # (1, 512, 768) -> (1, 8, 96, 512) if not multiquery
# (1, 512, 96) -> (1, 1, 96, 512) if multiquery
v = rearrange(value, 'b s (h d) -> b h s d', h=kv_n_heads) # (1, 512, 768) -> (1, 8, 512, 96) if not multiquery
# (1, 512, 96) -> (1, 1, 512, 96) if multiquery
attn_weight = q.matmul(k) * softmax_scale # (1, 8, 512, 512)
attn_weight = torch.softmax(attn_weight, dim=-1) # (1, 8, 512, 512)
out = attn_weight.matmul(v) # (1, 8, 512, 512) * (1, 1, 512, 96) = (1, 8, 512, 96)
out = rearrange(out, 'b h s d -> b s (h d)') # (1, 512, 768)
return out, attn_weight, past_key_value
位置エンコーディング
ここでは、一般的な大型モデル アプリケーション向けの RoPE および ALiBi 位置コードを示します。選択方法の点では RoPE の方が適しており、位置補間やその他の方法を通じてより長い長さの外挿を実行できます。
ロープ
詳細については、「RoPE 回転位置コーディングの詳細な分析: 理論的導出、コード実装、および長さの外挿」(アドレス: https://zhuanlan.zhihu.com/p/645263524) を参照してください。主な結論は次のとおりです。
実現方法:
これは、ビットごとに対応する乗算を表します。
利点: 絶対エンコードによる相対位置情報の組み込み
長さの外挿: 位置補間とベース エンコーディングは、ロスレスの長さの外挿を実行できます。
アリバイ
実現方法:
この記事のアプローチは、上に示したように、位置の埋め込みを追加してから静的な非学習バイアスを追加することではありません。
クエリとキーの行列ドット乗算に基づいて、負の定数値を追加します。たとえば、現在位置から最初の桁は -1、最初の 2 桁は -2 です。これらの定数には重み m を乗算する必要があります. n 頭に注目. 力モデル、mから始まります。
たとえば、8 頭注意モデルの場合は次のようになります。
m 使用シーケンス:
16 ヘッド アテンション モデルの場合:
m 使用シーケンス:
アドバンテージ:
トレーニングに必要なエンベディングの数を減らし、トレーニングを高速化します。
元の位置エンコーディングと比較して、長さの外挿が優れています。
▐学習 データとパラメータ量
詳細については、「LLM トレーニング ガイド: トークンとモデルのパラメーターの準備」(アドレス: https://zhuanlan.zhihu.com/p/636812912) を参照してください。重要な結論はここに示されています。モデルの計算量が増加すると、トレーニング データとパラメータは増加します。前年比の増加を維持する必要があります:
要約する
ChatGLM、LLAMA、および Baichuan の大規模言語モデルのアップグレードに関する徹底的な議論と、LLM 構造選択の包括的な分析を経て、次の結論を導き出すことができます。
大規模な事前トレーニング モデルのアップグレード プロセスは、主に基本的な知識機能の向上とシーケンス長の変更のサポートに反映されます。モデル パラメーターの量を増やし、トレーニング データの品質を最適化することで、モデルはさまざまな分野の知識をより適切に適合させ、モデルのパフォーマンスをさらに向上させることができます。トレーニングの長さを増やし、位置エンコーディングの外挿を調整することで、より長いシーケンスがサポートされます。
モデル構造の設計に関しては、適切な LLM 構造を選択することが、高性能の大規模事前トレーニング モデルを実現するために重要です。適切な LayerNorm やアクティベーション関数を導入することで学習の安定性が向上し、Flash Attendance や Multi Query Attendance などの効率的な演算子を導入することでモデルのパフォーマンスを維持しながら計算効率を大幅に向上させることができ、RoPE や ALiBi 位置エンコーディングを導入することで学習の安定性を向上させることができます。モデルの長さの外挿。
大規模な事前トレーニング モデルを構築および最適化するときは、モデルのパフォーマンスと計算効率に注意を払うだけでなく、データ品質、重複排除、汚染除去、毒性とバイアスの制御、個人情報などの問題にも注意を払う必要があります。情報保護。これは、実際のアプリケーションにおいてモデルの安全性、堅牢性、信頼性を高めるのに役立ちます。
つまり、この記事は、ChatGLM、LLAMA、および Baichuan モデルのアップグレード パスを深く分析し、大規模な言語モデルの構造の選択について説明することで、体系的な視点を提供し、大規模な事前トレーニング モデルの重要な要素を整理します。この知識が、実際のプロジェクトでより強力で柔軟かつ効率的な大規模な事前トレーニング モデルを構築するための強力な参考とガイダンスを皆さんに提供できることを願っています。
参考リンク
大規模モデルのサンプル構築を微調整するためのコツ (アドレス: https://zhuanlan.zhihu.com/p/636812912)
https://github.com/facebookresearch/llama
https://github.com/baichuan-inc/Baichuan-7B
https://github.com/THUDM/ChatGLM2-6B/tree/main
https://arxiv.org/pdf/2002.05202.pdf
https://zhuanlan.zhihu.com/p/634236135
https://zhuanlan.zhihu.com/p/626079753
チーム紹介
私たちは桃天グループのFCテクノロジー部門インテリジェント戦略チームの推奨アルゴリズムチームであり、主にモバイルTモールの推奨アルゴリズムと広告アルゴリズムの研究開発と最適化を担当し、ユーザーにより正確な推奨サービスを提供し、ユーザーエクスペリエンスを向上させます。そして満足感。さらに、チームはインテリジェントなショッピング ガイドなどの AI テクノロジーの革新的なアプリケーションにも取り組んでおり、革新的なビジネス慣行を積極的に模索しています。
¤続きを 読む¤ _