(09강) Self-supervised Pre-training Models

GPT-1과 BERT에 대한 소개

GPT-1(Generative Pre-training) 모델

참고사이트

  • It introduces special tokens, such as \ / \ / $, to achieve effective transfer learning during fine-tuning

  • It does not need to use additional task-specific architectures on top of transferred

  • Transformer의 Decoder 기반의 모델이다.

  • 비지도 학습이며, 다양한 분야의 수많은 데이터로 Language Model로 Pre-training 된다.

  • Language 모델학습으로 일반적인 자연어처리 능력이 내재적으로 학습되어, 추가적인 Layer없이 적은 label로 구성된 데이터만으로도 Fine-Tuning되어 좋은 성능을 낸다.

  • Byte Pair Encoding을 사용해서 Embedding을 업그레이드 시켰다.

입력과 출력이 나누어진 것이 아니라 데이터로부터 추출한 문장으로부터 다양한 Task를 처리할 수 있는 모델이다.

  • Natural Language Inference : 두 문장간의 관계 추론

  • Question & Answer : 질의응답

  • Semantic Similarity : 문장 유사도

  • Classification : 분류

위와 같은 Task에서 활용되며 Delimiter(구분자, $)와 \ Extract를 활용하여 각 Task별로 변화를 주게 된다.

BERT (Bidirectional Encoder Representations from Transformer)

1.1. Pre-Training(사전훈련)

여러 임베딩 기법에도 불구하고 하나의 단어가 하나의 벡터값으로 매핑되므로 문맥을 고려하지 못한다는 문제점이 있었다. 단적으로는 다의어나 동음이의어를 구분하지 못한다는 문제이다.(사과 : apple, forgive) 이러한 한계는 사전 훈련된 모델 Pre-Trained Model을 사용하므로 극복할 수 있었다.

방대한 데이터로부터 학습을 진행한 모델을 다른 Task에서 사용하게 되더라도 더 좋은 성능을 얻는다는 것이다.

1.2. 개요

BERT는 트랜스포머를 이용하여 구현되었으며, 위키피디아(25억 단어)와 BooksCorpus(8억단어)와 같은 레이블이 없는 텍스트 데이터로 사전 훈련된 언어 모델이다.

BERT가 높은 성능을 얻을 수 있었던 것은, 레이블이 없는 방대한 데이터로 사전 훈련된 모델을 가지고, 레이블이 있는 Task에서 추가 훈련과 함께 하이퍼파라미터를 재조정(Fine-Tuning)하여 이 모델을 사용하면 성능이 높게 나오는 기존의 사례를 참고하였다.

BERT는 양방향성을 포함하여 문맥을 더욱 자연스럽게 파악할 수 있습니다. GPT와 마찬가지로 문맥을 파악하는 방법 (Context Embedding)을 지녔지만, 양방향을 확인하는 방법으로 보다 앞뒤 단어의 관계성을 잘 나타낼 수 있어졌다.

1.3. 사용되는 Task

  1. Question & Answering

    • 질의응답

    • KorQuAD, Visual QA etc.

  2. Machine Translation

    • 구글 번역기, 네이버 파파고

  3. 문장 주제 찾기, 분류하기

    • 기존 NLP에서 해결할 수 있는 문제도 해결 가능하다.

  4. 사람처럼 대화하기

1.4. Basic Structure

  • 트랜스포머의 인코더를 쌓아올린 구조 (L:인코더 층의수, D: d_model의 크기, A: Self Attention Head 수)

    • BERT-Base : L = 12, D = 768, A = 12 : 110M개의 파라미터

    • BERT-Large : L = 24, D = 1024, A = 16 : 340M개의 파라미터

1.5.1. Pre-Training Tasks in BERT

1.5.1.1 Masked Language Model(MLM)

BERT는 사전훈련을 위해서 입력으로 들어가는 텍스트의 일부(15%)를 마스킹하고 이를 예측하도록 한다.

  • Mask some percentage of the input tokens at random, and then predict those masked tokens

  • 15% of the words to predict

    • 80% of the time, replace with [MASK] => The man went to the store -> The man went to the [MASK]

    • 10% of the time, replace with a random word => The man went to the store -> The man went to the dog

    • 10% of the time, keep the sentence as same => The man went to the store -> The man went to the store

  • 너무 많은 부분을 MASK를 하게 되면 맞추기에 충분한 자료가 제공되지 않아 맞추기 어려워지고, 너무 적은 부분을 MASK한다면 시간적으로, 계산량이 늘어난다.(15%가 적정값)

    • Too little masking : Too expensive to train

    • Too much masking : Not Enough to capture context

  • 15% 의 데이터를 100% 모두 [MASK]로 치환하게 되면 부작용이 발생할 수 있다. [MASK] 만 사용할 경우에는 [MASK] 토큰이 Fine-Tuning 단계에서는 나타나지 않으므로 Pre-Training과 Fine-Tuning 단계에서의 불일치가 발생하는 문제가 있습니다. 이 문제를 완화하기 위해 80%/10%/10% 과 같이 나누어 사용하게 됩니다.

1.5.1.2. Next Sentence Prediction (NSP, 다음 문장 예측)

BERT는 두 개의 문장을 준 후에 이 문장이 이어지는 문장인지 아닌지를 맞추는 방식으로 훈련시킨다. 이를 위해서 50:50 비율로 실제 이어지는 두 개의 문장과 랜덤으로 이어 붙인 두 개의 문장을 주고 훈련시킨다.

  • 문장의 구분을 위해 첫번쨰 문장과 두번째 문장의 끝에 [SEP] 토큰을 사용한다.

  • [CLS] 토큰 위치의 출력층에서 이어지는 문장 여부(이진 분류문제)를 풀도록 한다.

  • loss를 합하여 MLM과 동시에 학습이 이루어진다.

BERT가 언어 모델 이외에도 다음 문장 예측이라는 Task를 학습하는 이유는 질의응답이나 관계 추론과 같이 두문장의 관계를 이해하는 Task들이 있기 때문이다.

1.5.2. Embedding

1.5.2.1. WordPiece Embedding

단순 Subword와는 조금 다르게 아래와 같은 순서를 가지고 있다.

  1. 토큰이 Vocab에 존재한다.

    • 토큰을 분리하지 않는다.

  2. 토큰이 Vocab에 존재하지 않는다.

    • 해당 토큰을 subword로 분리한다.

    • 첫번째 subword를 제외한 나머지 subword 앞에 "##"을 붙인다 ex) embedding -> em, ##bed, ##ding

"##" 표시로 인해 다시 손쉽게 원래 단어로 복원이 가능하게 된다

1.5.2.2. Position Embedding

트랜스포머에서 사용한 Positional encoding은 Sin, Cos 함수를 사용하여 위치에 따라 다른값을 더하는 방법이다. BERT에서는 학습을 통해서 얻는 Position Embedding 방법을 사용하게 된다.

  • 문장의 길이가 4라면 4개의 포지션 임베딩 벡터를 학습시키는 것이다.

  • BERT 입력마다 각 포지션 임베딩 벡터를 더해주는 것.

1.5.2.3. Segment Embedding

  • 두 개의 문장입력이 필요한 Task (Q/A, 추론)에서 문장구분을 위해 Segment Embedding 층을 사용하게 된다. 첫 문장에는 EAE_A를 두번째 문장에는 EBE_B를 더해주는 방식이다.

1.5.3. Fine-Tuning

Task 별로 진행하는 Fine-Tuning(Pre-Training 된 모델을 Task에 맞게 변형하고 학습을 업데이트 하는 것) 방법에 대해서 알아본다.

1.5.3.1. Single Text Classification

  • 영화리뷰 감성분류, 로이터 뉴스 분류 등

  • 문서의 시작에 [CLS] 토큰을 사용함으로써 문맥정보를 담는다.

  • [CLS] 토큰 위치의 출력층에서 Dense Layer(Fully Connected Layer)를 통해 분류에 대한 예측을 진행한다.

1.5.3.2. Tagging

  • 문장에서 각 단어의 품사를 태깅하거나, 개체를 태깅하는 작업이 있음.

  • 출력층에서는 입력 텍스트의 각 토큰의 위치에 Dense Layer를 사용해 분류에 대한 예측을 진행한다.

1.5.3.3. Text Pair Classification or Regression

  • 두 문장을 입력받는 Task

  • 자연어 추론 Task (두 문장의 논리적 관계 - 모순, 중립, 함의 관계)

  • 문장의 끝을 의미하는 [SEP] 토큰을 사용한다.

  • Segment Embedding을 사용하여 문장을 구분하도록 값을 더해준다.

  • [CLS] 토큰에서 Dense Layer를 통해 관계에 대한 예측을 진행한다.

1.5.3.4. Question Answering

  • 두 문장을 입력받는 Task

  • SQuAD(Stanford Question Answering Dataset)

  • 질문과 본문을 입력 받으면, 본문의 일부분을 추출해서 답변을 하는 것.

    ex) 강우가 떨어지도록 영향을 받는 것은? / 기상학에서 강우는 대기 수증기가 응결되어 중력의 영향을 받고 떨어지는 것을 의미합니다. => 중력

1.5. Summary

  1. Model Architecture

    • BERT BASE : L = 12, H = 768, A = 12

    • BERT LARGE: L = 24, H = 1024, A = 16

  2. Input Representation

    • WordPiece embeddings (30,000 Word Piece) -> Subword

    • Learned positional embedding

    • [CLS] - Classification embedding -> 문맥정보를 담고 있음

    • Packed sentence embedding (SEP)

    • Segment embedding

  3. Pre-Training Tasks

    • Masked Language Model

    • Next sentence Prediction

GPT-1 vs BERT

Training Size

  • GPT : BookCorpus(800M words)

  • BERT : BookCorpus and Wikipedia (2,500M)

Training special tokens during training

  • BERT : [SEP], [CLS] and sentence A/B embedding(segment emb) during pre-training

Batch size

  • GPT : 32,000

  • BERT : 128,000

큰 배치를 사용할 수록 성능 향상과 안정화가 될 수 있다. 경사하강법을 할 때, 일부의 데이터로 하는 것보다 많은 양의 데이터로 수행하여야 안정화가 되기 때문이다. 단, GPU 메모리 소모가 크다.

Task-specific fine-tuning

  • GPT : 5e-5 learning rate for all fine-tuning experiment

  • BERT : choose a task-specific fine-tuning learning rate

Last updated