オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【深層学習】GPT-1

yhayato1320.hatenablog.com

Index

GPT-1 とは

2018年 OpenAI から提案されたニューラル言語モデル.

yhayato1320.hatenablog.com

教師なし事前学習(Unsupervised Pre-Training)教師あり学習 ファインチューニング (Supervised Fine-Tuning)
を組み合わせることで、半教師あり学習 (Semi Supervised) のアプローチをとる.

  • ULMFiT


Transformer をベースに、事前学習-ファインチューニングすることで精度を達成した.

yhayato1320.hatenablog.com


GPT は、
Generative Pre-Training
の略称.
生成系事前学習モデル. (生成に特化 = Transformer Decoder を利用 = BERT との違い)

学習の仕組み

教師なし事前学習(Unsupervised Pre-Training)教師あり学習 ファインチューニング (Supervised Fine-Tuning) の 2つのステップで構成されている.

教師なし事前学習(Unsupervised Pre-Training)


長さ  nトークンをもつコーパスを以下のように定義.
 U\ =\ \{ u_{1},\ \cdots,\ u_{n} \}

yhayato1320.hatenablog.com


次に最大化する目的関数を決定する.
これは、一般的にニューラル言語モデルで利用される確率モデル.

 L_{1} (U)\ =\ \displaystyle \sum_{i} \log P(u_{i}\ |\ u_{i-k},\ \cdots,\ u_{i-1}\ ;\ \Theta)
SGD を用いて学習する.


次の単語の予測確率を最大化したモデルを作ることが目的.
上の目的関数を Multi Layer Transformer Decoder (後述) を利用して最適化.

教師あり学習 ファインチューニング (Supervised Fine-Tuning)

大規模なコーパスで、上の目的関数を最適化した事前学習済みモデルができたら、
そのモデルを用いて、教師ありのタスクでファインチューニングする.

タスクは、分類問題. つまり、入力の文章に対して、X 個のクラスのラベル (例えば、楽しい、悲しいなど) に分類する.

データセット  Cの系列の長さ  m のデータを以下のように定義する.
 {x^{1},\ \cdots\ , x^{m},\ y}
 y はラベルデータ


ここで、目的関数を以下のように定義する.

 L_{2} (C)\ =\ \displaystyle \sum_{(x,\ y)} \log P(y\ |\ x^{1},\ \cdots\ , x^{m})
ここでは、入力のトーク {x^{1},\ \cdots\ , x^{m}} があったとき、その文章がラベル  y である確率を最大化する.


そして、ファインチューニングでは、事前学習で用いた、目的関数も合わせ、最終的な目的関数として、それを最大化する.

 L_{3}(C) = L_{2}(C) + \lambda \times L_{1}(C)

ネットワークアーキテクチャ

Transformer の Decoder をベースにした、Multi Layer Transformer Decoder を利用する.

  • Input Layer
    • Word Embedding
    • Position Embedding
  • Decoder Layer x n (論文だと12層)
    • Attention Layer
    • FFN Layer
  • Classification Layer
    • 事前学習とファインチューニングで異なる.

教師なし事前学習(Unsupervised Pre-Training)

入力トーク U\ =\ ( u_{-k},\ \cdots,\ u_{-1} ) に対して、Word Embedding と Position Embedding を実行.

 h_{0}\ =\ U W_{e}\ +\ W_{p}


  •  W_{e} は、Word Embedding の重みパラメータ
  •  W_{p} は、Position Embedding の重みパラメータ

(どちらも事前学習時に更新して最適化する.)

その後、各 Decoder Layer の処理を実行

 h_{l}\ =\ transformer\_block ( h_{l−1} ) \ \ \forall i \in [1, n]

 i は Decoder Layer の index.

最後に、逆 Word Embdedding を行い、語彙の大きさの行列に変換し、各語彙ごとの確率値を計算する.

 P(u)\ =\ softmax (h_{n} W_{e}^{T})


教師あり学習 ファインチューニング (Supervised Fine-Tuning)

事前学習で得られたモデルを利用して、分類器も含め学習を行う.
事前学習と異なる部分は、最後の「各語彙ごとの確率値」を計算する部分で、
ここが、「クラスごとの確率」を計算するニューラルネットワークになる.

 P(y\ |\ x^{1},\ \cdots\ , x^{m})\ =\ softmax (h_{l}^{m} W_{y})

 W_{y} は分類器のネットワークの重みパラメータ.

参考

Web サイト