🐒

Stanford NLP with Deep Learning Lecture10のまとめ

2023/07/04に公開

1. はじめに

今週は事前学習にフォーカスをあてたLecture10についてまとめていきたいと思います。
Transformerに入ってから1講義あたりのボリュームが増えてきて2稿に分けることが続いていますが、今回は大部分が事前学習についてで分けると微妙だったので少し長い記事ですが1稿にまとめていきます。ご了承ください。

2. サブワードモデル

各種事前学習の話に入る前に、多くのモデルにおいてトークン化時に用いられているサブワードモデルについて述べていきます。

2-1:単語構成とサブワードモデル

<言語構成(Word Structure)>

通常、Embedding前に入力である各単語が手元にある語彙に該当するか否かの判断を行うmappingを行った後にEmbeddingを行っている(図1参照)。
図1)従来の埋め込み過程([1]より引用)
この方法は確実に単語をベクトルに変換できるがその分汎化性能が語彙に依存するため、複雑な形態素や単語構成をもつ言語に対しては十分に力を発揮できませんでした。
これに対応するために考えられたのが次説明するサブワードモデルです。

<サブワードモデル>

サブワードモデルは従来の単語単位の構造よりさらに細かい構造を推論するさまざま複数の手法を含むモデルのことを指しています。
* サブワードトークンという単位のトークンを学習することが主流
* 学習時においてもテスト時においても既知のサブワードに分割を行う
この既知のサブワードはByte-pair encodingという手法によって得ています。

<Byte-pair encoding>

Byte-pair encodingとは貪欲的にサブワードの語彙を生成するアルゴリズムのことで以下のようにして語彙を獲得しています。

  1. 最小単位の語彙を作成する(a, b, c, ...)
  2. テキストコーパスを用いて尤もらしい隣接した組み合わせを作り、それをサブワードとして扱う
  3. 2を欲しいサイズの語彙サイズになるまで繰り返し行い更新していく

サブワードモデルは単語単位の分割と比較して、強力である一方でTransformerの事前学習時におけるSelf-Attention時にどのような単語を扱っているか不明瞭という問題点があり、そこまで深刻ではないものの留意する必要があると講義では述べられていました。

3. 事前学習(pre-training)

3-1:現在の事前学習モデルに至るまで

<事前学習とWord Embedding>

事前学習という考えが生まれた初期はEmbedding部分であるWord2Vec等のパラメータのみを事前に学習させ、タスクに応じてモデルによって文脈を考慮した学習が行われていました。
しかし、この方法では以下の問題点がありました。

  • 学習データにタスクにとって十分なデータを含んでいる必要があった
  • タスクに応じてモデルによってパラメータを更新していくため事前学習して得たパラメータがランダムに初期化されてしまう

<モデル全体における事前学習>

Word Embeddingだけの事前学習における問題点を解決するために提案されたのが事前学習時に、モデル内部における全パラメータを初期化し、その後モデルに学習させるという方法です。
この方法はWord Embeddingのみを学習させた時に比べて以下のような強みがありました。

  1. より人に近しい言語表現の獲得
    文脈も考慮しながらEmbedding層のパラメータを更新できるため、Embedding時の言語表現が豊かになった
  2. パラメータの初期化による強力な言語モデルの獲得
    全パラメータを初期化し、その後ファインチューニングを行うためよりタスクに特化した言語モデルを獲得した
  3. 確率分布の獲得
    事前学習によってモデルが文章に対する確率分布を得るため、特定のタスクにおいて活用できる(これは今だによくわからないのでだれか教えていただけると幸いです、、)

3-2:事前学習と言語モデル

次に言語モデルと事前学習について述べていきます。
まず言語モデルについて思い出していきます。
[言語モデル]
:文章の各単語においてあるt地点の単語に対してそれまでの文脈を用いて尤もらしい条件付き確率分布p(w_t\ |\ w_{1:t-1})を得ることを目的としたモデル

この言語モデルにおいて、納得のいく結果を得るためには大量の学習データが必要でした。
これに対して事前学習を用いると、事前に大量のテキストデータで学習させパラメータを保持することでタスクに関して必要な学習データの量を削減することに繋がりました。

<事前学習とファインチューニング>

事前学習とファインチューニングでは目的とするものが異なっていることがあります。(図2参照)
[事前学習]→良い言語モデルを獲得することが目的
大量の文章を用いて普遍的な学習を行い、ファインチューニング時の初期値とする
[ファインチューニング]→各タスクに応じて目的は変化する
自分の行いたい下流タスクに応じてファインチューニングすることで良い結果を得る
図2)事前学習(左)とファインチューニング(右:感情分析タスク)の違い([1]より引用)

3-3:確率的勾配降下法と事前学習およびファインチューニング

Q:なぜ事前学習とファインチューニングが役にたつのか?

これは事前学習で得られたパラメータをファインチューニングの初期値として用いることに由来します。それぞれのパラメータは以下のようにして求めます。

  1. 事前学習における損失(以下式)を満たすパラメータ\hat{theta}_{pre-train}を求める
\hat{\theta}_{pre-train} = \min_{\theta}(L_{pre-train}(\theta)) \\ [\theta:モデル内部の全パラメータ, L_{pre-train}(*):事前学習時の損失]
  1. \hat{\theta}_{pre-train}を初期値として以下式を満たすパラメータ\hat{\theta}_{fine-tune}を求める
\hat{\theta}_{fine-tune} = \min_{\theta}(L_{fine-tune}(\theta)) \\ [\theta:モデル内部の全パラメータ, L_{fine-tune}(*):ファインチューニング時の損失]

上の二つの式からもわかる通り、ファインチューニング時における勾配降下は\hat{\theta}_{pre-train}に依存する傾向があります(\hat{\theta}_{pre-train}を初期値とするため)。
このことによって二つのメリットがあります。

  1. ファインチューニング時の局所最適解は\hat{\theta}_{pre-train}付近に存在するため一般化され、回避しやすくなる。
  2. ファインチューニング時の損失曲線が\hat{\theta}_{pre-train}を初期値とすることで滑らかな曲線となる。

1に関しては容易にイメージしやすいのですが2に関してがいまいち掴めておらず、自分の中では初期値による変動が小さくなるから、、、?と思っているのですが有識者の方見ていたらご教授いただけると幸いです。

4. アーキテクチャごとの事前学習の特徴とモデル

TransformerはEncoderスタックとDecoderスタックが分かれています。
そのためそれぞれの長所を活かした派生モデルが多数生まれました。
次は採用しているアーキテクチャごとにおける事前学習時の特徴と派生モデルについて述べていきます。

4-1:Decoderにおける事前学習

まず初めにDecoderブロックを用いた事前学習について述べていきます。
[事前学習]
Decoderモデルにおける事前学習はこれまでと同様に言語モデルとして学習を進めます。
そこで得られたパラメータをもとにファインチューニングし、各種タスクに応用しています。
[事前学習モデルの活用]
事前学習させたDecoderモデルは必ずしも条件付き確率分布p(w_t\ |\ w_{1:t-1})を学習させるモデルである必要はなく、感情分析等のタスクにも応用できます。
ただ、このとき出力層である線形層のパラメータは事前学習が行われていないことに注意が必要です。
ただ、一般的には図3のように文章を生成するタスク(対話、要約等)に用いられ事前学習モデルをもとにファインチューニングし条件付き確率分布を求めることでそれらのタスクに対して力を発揮します。
図3)生成タスクにおけるDecoderモデル([1]より引用)

<Generative Pre-Trainig(GPT)>(講義とは違う名称ですが中身は同じです)

事前学習の次は代表的なDecoder事前学習モデルであるGPTについて述べていきます。
https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf
[モデル概要]
GPTモデルはOpenAI社のエンジニアによって2018年に発表されたモデルで文章生成タスクや長文読解が必要なタスクで良い結果を示しました。
モデル内部においては以下のような特徴を持ちます。

  • 12層のTransformer Decoderモデル
  • 各層の出力は768次元でFFN内部空間は3072次元である
  • Byte-pair encodingは40000サイズと少し小さめ
  • 7000冊もの書籍を用いたBook Corpusで訓練している
    長距離の依存関係を学習させるために系列長の長い連続した文章を用いている

[ファインチューニング]
Decoderモデルのファインチューニングの例として講義に倣って自然言語推論タスクにおけるファインチューニングについて述べていきます。
自然言語推論
:前提と仮説の二つの文章において含意関係にあるかどうかを判断するタスク

以下のようにしてまず手元の二つの文章(前提、仮説)をGPTへ入力できる形に変換していきます。

今回の場合だと含意関係にある文を入力として出力が含意であるか否かで損失を算出します。
この時、含意関係にあるか否かは最後のトークンである[EXTRACT]トークンのベクトルを用いて分類器に入力し、判断します。
これはDecoderモデルにおいて最後のトークンにそれまでの情報が含まれているからです。

さらにこのモデルを用いてより多くの訓練データを用いて学習し、より自然な表現力を獲得していったのがGPT2です。

4-2:Encoderにおける事前学習

続いて、TransformerのEncoderスタックのみを利用したモデルの事前学習について述べていきます。
 EncoderモデルはDecoderモデルとは違い、双方向のAttentionを行うことを可能としています。そのおかげでより人間に近しい文脈中の単語理解を可能にしました。
その一方で、双方向Attentionにもデメリットがあり言語モデルとしてモデルを扱えないという点です。
 この問題を解決したのが、Googleの賢い方達が提案した現在では文章理解の分野においてデファクトスタンダードであるBERTについて述べていきます。
https://arxiv.org/abs/1810.04805

<Bidirectional Encoder Representation from Transformer(BERT)>

[モデル概要]
そもそもBERTとは名前にある通り、双方向のAttentionを用いたTransformerのEncoderモデルであり事前学習時に以下の二つの工夫を採用することで言語モデルような形をとり、かつファインチューニング時にも高い精度を誇るモデルとなりました。

  • Masked Language Model(MLM)
  • Next Sentence Prediction(NSP)
[Masked Language Model(MLM)]

一つ目の工夫であるMasked Language Model(MLM)とは、
:文章の一部を[MASK]という特殊トークンに置き換えて、この部分の予測を行うことでEncoderを言語モデルとして扱えるようにしたものを指します。(図4参照)
言語モデルと違い特定の単語のみを対象とするため双方向ATtentionと言語モデルの併用を可能にしました。また、学習する条件付き確率分布も以下のようにDecoder時の言語モデルとは少し異なっています。

p(w_t\ |\ \hat{w_t}) \\ [\hat{w_t}:MASKされたt地点の単語]

図4)MLMの様子([1]より引用)

ただ、このままだと[MASK]の取り方をどうする問題があります。BERTはその点においても工夫しています。BERTでは以下の手順によって入力トークンの一部に対してMASK処理を行っています。

  1. 全体の15%のトークンをランダムに[MASK]とする
  2. その15%のうち80%を[MASK]とし、10%を語彙からランダムに選ばれた単語に入れ替えられ、残りの10%を何も買えずその単語のまま用いる

ここで疑問に思うのが80%の[MASK]はわかるけど残りの入れ替えとそのまま利用ってなんのため?って思う人は少なからずいると思います。(僕も最初はそのうちの一人でした、、、。)
しかも現論文読んでもいろいろな記事見ても

Although this allows us to obtain a bidirec- tional pre-trained model, a downside is that we are creating a mismatch between pre-training and fine-tuning, since the [MASK] token does not ap- pear during fine-tuning.([3]より引用)

とある通り、ファインチューニング時に[MASK]トークンがない問題に対する対象法である。というのが多いと思います。
ここをもっと深掘りすると、MLMは一般的な言語モデルと違い[MASK]に該当する単語にのみ損失を計算します。そのため[MASK]に該当する部分を上で述べた通り入れ替えやそのまま利用を行わないとモデルが[MASK]に対しては予測を行う必要があるけどそれ以外は予測しなくていいや!と学習することに繋がります。これによって[MASK]された穴埋め単語にのみに特化した言語表現をモデルが学習し、ファインチューニング時には[MASK]が存在しないため結果として汎用的ではない表現を持ったモデルになってしまうためです。
こうならないように入れ替えやそのまま利用も損失の対象とすることで[MASK]が存在しない文章に対しても豊かな表現力を適応を実現しました。(図5参照)

図5)ランダムに[MASK]処理をしたMLMの様子([1]より引用)

[Next Sentence Prediction(NSP)]

もう一つの工夫としてNext Sentence Prediction(NSP)が挙げられます。
これは二つの文章を事前学習時の入力とし、その二つの文章の関係をSegment Embeddingという特殊な埋め込みを行い学習させることでQAやNLIといったsentence to sentenceタスクにおいても高い精度を誇りました。(図6参照)

図6)Next Sentence Prediction(NSP)の様子([3]より引用)

ただ、このNSPに関しては生成タスクをBERTで行うことがもはやないため精度向上にはいらないのでは、、?とされています。

<BERTにおける限界>

BERTはEncoderモデルなので文章理解に関するタスク(感情分析等)は得意とする一方で、Decoderモデルが得意とする生成系のタスク(対話や要約)は不得意という弱点があります。
これに関してはもはやBERTではどうしようもない部分なので適したモデルをタスクごとに判断することが大切です。

<BERTからの発展>

BERTは文章理解分野でデファクトスタンダードなモデルとされていますがこれはBERT単体の力はもちろんですが、そこからさらにたくさんの発展系モデルが生まれたことに由来しています。
そのなかでも講義で紹介されていた二つを紹介します。

  • RoBERTa
    NSPを除いてサブワード単位でより細かいMLMを行うことでよりロバスト性を担保したBERTモデル

  • SpanBERT
    MLMにおいてサブワード単位のMLMに加えて連続して[MASK]トークンをとることで表現力の拡張を実現したBERTモデル

これら以外にもモデルの軽量化を実現した蒸留モデルであるDistilBERTやGANのようなMLMを採用したElectraなど本当にたくさんあります。

4-3:Encoder,Decoder両方を用いた事前学習

最後にEncoder,Decoder両方を採用したモデルにおける事前学習について述べていきます。
ここではEncoder,Decoder両方を採用したモデルとしてT5について見ていきます。

<T5>

T5はEncoderの長所である双方向AttentionとDecoderの長所である言語モデルの同時利用を可能にしたモデルです。(図7参照)

図7)T5の簡単なモデル概要([1]より引用)
Decoderの言語モデルと大きく異なる点としては、文中における全単語の予測を行うのではなく隠された特定の単語のみを予測するという点にあります。この手法をSpun corrpution(図8参照)と呼び、全文で行う言語モデルと比較して各種タスク(対話、翻訳)において高い精度を出すという結果になりました。

図8)T5におけるSpun corruptionを用いた学習の様子([1]より引用)

5. GPT3について

4-1でGPTについて述べました。
GPTからGPT2には訓練の量を増やし表現力を豊かにしました。
しかし、GPT3では事前学習を行わないIn-context学習とモデルの巨大化によってさらに豊かな表現力を獲得しました。
[In-context学習]
勾配計算を行わず、入力の文章をもとに学習し予測を行う手法のこと

入力からタスクに特化するように勾配計算を抜きにして、ファインチューニングを行うこの手法ですが内部でどう動いているか等不明瞭な部分が多いことが課題とされています。

さらにこのGPT3に半強化学習(RLHF)等の工夫によってGPT3.5やGPT4が生まれました。
恐ろしやOpenAI、、、、

6. まとめ

今回は事前学習に至るまでと全体について述べていきました。
思ってたより長い記事になってとても見づらくて申し訳ないです、、、。ここまで見てくれたあなたは最高ですね!
次回からは各種NLPタスクについての講義になるのでビジネスライクの意識を持って受けていきたいと思います。

7. 参考資料

[1]Stanford CS224N NLP with Deep Learning | Winter 2021 | Lecture 10 - Transformers and Pretraining
[2]Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever 2018
'Improving Language Understanding by Generative Pre-Training'

[3]Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova, 2018,
'BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding'

Discussion