Re Reference AI

技術

事前学習とは

Pre-training / Pretraining

大規模データから汎用的な知識や表現をあらかじめ学習させ、下流タスクの土台を作る学習段階

学習事前学習LLM

ひとことで言うと

特定の仕事を教える前に、大量の文章などを読ませて言葉や世界についての基礎知識を身につけさせる、モデル作りの最初の段階。

概要

事前学習は、特定のタスクに特化させる前の段階として、大規模なデータからデータそのものの構造や汎用的な表現をモデルに学習させる工程。 LLMの場合、Webテキストや書籍などの大規模コーパスを使い、「次のトークンを予測する」あるいは「マスクされたトークンを当てる」といった自己教師あり学習目的関数で学習する。 人間がラベルを付与する必要がないため、インターネット規模のデータをそのまま学習に使える点が特徴で、モデルはこの過程で文法・事実知識・ある程度の推論能力を獲得する。 事前学習済みモデルは指示に従う応答が苦手なため、指示チューニングRLHFなどの事後学習(ポストトレーニング)を重ねてプロダクト向けに仕上げるのが一般的。 「大規模に事前学習し、用途ごとに軽く調整する」というパラダイムは、タスクごとにモデルをゼロから学習していた従来の方法を置き換え、現在の基盤モデルの前提になっている。

背景

タスクごとにラベル付きデータを集めてゼロからモデルを学習する方法では、ラベル付けのコストが大きく、少量のデータでは十分な性能が出なかった。 ラベル不要の大規模データで汎用的な表現を先に学習しておき、それを各タスクに転用するアプローチが、この制約を解消する方法として発展した。

歴史

2006年: Hintonらが深いネットワークを層ごとに教師なしで事前学習する手法(Deep Belief Network)を提案し、深層学習における事前学習の概念が広まる。 2013年: Word2Vecが大規模コーパスから単語の分散表現を事前学習するアプローチを普及させる。 2018年: ELMo・ULMFiT・GPTBERTが相次いで発表され、「大規模コーパスで事前学習し、下流タスクでファインチューニングする」パラダイムがNLPの標準になる。 2020年: GPT-3が事前学習の規模を1750億パラメータまで拡大し、ファインチューニングなしでも文脈内の例示(Few-shot)だけで多様なタスクをこなせることを示した。

アーキテクチャ

モデルはTransformerデコーダのみ構成(GPT系)やエンコーダのみ構成(BERT系)などをベースとし、パラメータはランダムに初期化された状態から学習を開始する。 学習の目的関数には、直前までのトークン列から次のトークンを予測する自己回帰的な言語モデリング(GPT系)や、文中の一部をマスクしてその単語を当てさせるマスク言語モデリング(BERT系)などが使われる。 数千億〜数兆トークン規模のコーパスと、数十億〜数千億のパラメータを持つモデルを、多数のGPU/TPUを使った分散学習で最適化していく。

ワークフロー

Webテキスト・書籍・コードなどから大規模コーパスを収集し、重複除去や品質フィルタリングなどの前処理を行う。 コーパストークン化し、次トークン予測などの自己教師あり目的でモデルを学習する。 学習には大規模なGPU/TPUクラスタを使い、数週間から数か月かけてパラメータを最適化する。 得られた事前学習済みモデル(ベースモデル)に、指示チューニングRLHFなどの事後学習を施して用途に合わせて仕上げる。

コード例

transformersでのランダム初期化モデルの事前学習準備

from transformers import GPT2Config, GPT2LMHeadModel, Trainer, TrainingArguments

config = GPT2Config(vocab_size=50257, n_layer=12, n_head=12, n_embd=768)
model = GPT2LMHeadModel(config)  # 事前学習前のランダム初期化モデル

trainer = Trainer(
    model=model,
    args=TrainingArguments(output_dir="./pretrain", per_device_train_batch_size=8),
    train_dataset=train_dataset,  # トークン化済みの大規模コーパス
)
trainer.train()

利点

  • ラベル付けが不要な自己教師あり学習のため、インターネット規模のデータをそのまま学習に使える
  • 1つの事前学習済みモデルを多数の下流タスクに転用でき、タスクごとの開発コストを下げられる
  • データとモデル規模を拡大するほど性能が向上する傾向(スケーリング則)を持ち、投資対効果を見積もりやすい

欠点

  • 大規模なGPUクラスタと長期間の学習が必要で、計算コストが極めて高い
  • 学習データに含まれる偏りや有害な内容をモデルがそのまま学習してしまう
  • 学習データの収集時点以降の情報を持たない(知識のカットオフ)ため、最新情報はRAGなどで補う必要がある

比較

  • ファインチューニング事前学習が汎用的な知識をゼロから獲得する工程であるのに対し、ファインチューニングは事前学習済みモデルを特定のタスクやドメインに合わせて追加学習する工程
  • 転移学習事前学習で得た知識を別のタスクに転用するという枠組み全体が転移学習であり、事前学習はその前半の工程にあたる
  • 指示チューニング指示チューニングは事前学習後の事後学習の1つで、指示と応答のペアを学習させて指示に従う能力を付与する

関連用語

ファインチューニング転移学習指示チューニングLLMBERTGPTコーパススケーリング則トークン

よくある質問

ファインチューニングとの違いは?

事前学習は大規模データで汎用的な能力をゼロから獲得する工程で、ファインチューニングはその事前学習済みモデルを特定の用途に合わせて少量のデータで追加学習する工程。順序としては事前学習が先で、ファインチューニングが後。

自己教師あり学習とは?

人間がラベルを付ける代わりに、データ自体から学習の正解を作る方法。次のトークンを当てる(GPT系)、マスクした単語を当てる(BERT系)などが代表例で、事前学習の中心的な手法。

ベースモデルとは?

事前学習だけを終えた段階のモデルのこと。文章の続きを予測する能力は高いが、指示に従って応答する訓練は受けていないため、チャット用途には指示チューニングRLHFなどの事後学習を施したモデルが使われる。

参考文献

関連Zenn記事