
書記が数学やるだけ#887 GPTにおけるPretrainingとFine-tuning
GPT及び以降のモデルの基本要素のうち,PretrainingとFine-tuningについて解説する。
問題

説明
GPTは,2018年にOpenAIが発表したモデルで,Transformerのデコーダを基本に,大量のテキストで事前学習(Pretraining)を行い,その後特定のタスクに合わせてファインチューニング(Fine-tuning)することで,高い精度を実現した。

Pretrainingは,単語の意味や文法など一般的な言語の構造を理解することを目的に,直前のk個の単語を使って次の単語を予測できるように学習する。数学的には,ラベルなしデータUについての以下の対数尤度最大化にあたる。
Fine-tuningは,解きたいタスクをその教師データを使って解けるように学習することであり,ラベル付きデータについての以下の対数尤度最大化にあたる。
$$L_2(\mathcal{C}) = \sum_{(x,y)} \log P(y | x)$$
ここでラベル付きデータの入力単語xに対し,ラベルyの予測は最後の transformer block の最後の時点の出力ベクトルhjとsoftmax レイヤーを用いて,
で表される。
GPTではPretrainingとFine-tuningを同時に行う。その尤度(Joint objective)は以下で表される:
GPT-2は,OpenAI が 2019年に発表した自然言語生成モデルで,初代 GPT を大規模化することでより汎用的なモデルを目指した。

他にPretraining, Fine-tuningを導入したモデルとしてULMFiTが知られている。

解答
Pretrainingについて,条件付き入力(I, want) → toの出力確率0.6は,数式としては以下の様に表される:
他も同様に表し,対数尤度最大化の式より,
次にFine-tuningについて,
$$ \log P(y_{Positive} | x_{"I \ like \ sushi"})=0.8, \ \log P(y_{Negative} | x_{"This\ is\ bad"})=0.6$$
より,対数尤度最大化の式より,
$$L_2(\mathcal{C}) = \sum_{(x,y)} \log P(y | x)= \log(0.8)+\log(0.6)\simeq -0.73$$
Joint objectiveは
λ を大きくすると,Joint objective においてL1(言語モデルの学習)の比重が大きくなり,言語の理解を重視するようになる。一方でλ を小さくすると,Joint objective においてL2(分類タスクの学習)の比重が大きくなり,タスクの解決を重視するようになる。
本記事のもくじはこちら: