쉬엄쉬엄블로그

(NLP) Self-supervised Pre-training Models 본문

부스트캠프 AI Tech 4기

(NLP) Self-supervised Pre-training Models

쉬엄쉬엄블로그 2023. 7. 11. 12:38
728x90

이 색깔은 주석이라 무시하셔도 됩니다.

Self-Supervised Pre-Training Models

Transformer

Recent Trends

  • Transformer model and its self-attention block has become a general-purpose sequence(or set) encoder and decoder in recent NLP applications as well as in other areas.
    • 트랜스포머 모델에서 제안된 self-attention block은 범용적인 sequence encoder, decoder로써 최근 자연어처리의 다양한 분야에서 좋은 성능을 내고 있고 심지어 다른 분야에서도 활발히 사용됨
  • Training deeply stacked Transformer models via a self-supervised learning framework has significantly advanced various NLP tasks through transfer learning, e.g., BERT, GPT-3, XLNet, ALBERT, RoBERTa, Reformer, T5, ELECTRA…
    • 트랜스포머는 self-attention block을 약 6개 정도만 쌓아서 사용했다면 최근 모델의 발전 동향은 모델 구조 자체의 변경은 특별히 없이 트랜스포머에서 제시된 self-attention block을 점점 더 많이 쌓은 모델을 만들고 이를 대규모 학습 데이터를 통해 학습할 수 있는 self-supervised learning framework으로 학습한 후 이를 다양한 task들의 transfer learning형태로 finetuning하는 형태로 좋은 성능을 내고 있음
  • Other applications are fast adopting the self-attention and Transformer architecture as well as self-supervised learning approach, e.g., recommender systems, drug discovery, computer vision, …
    • self-attention 모델은 추천 시스템, 신약 개발, 영상처리 분야까지 적용 분야를 넓혀가고 있음
  • As for natural language generation, self-attention models still requires a greedy decoding of words one at a time.
    • self-attention에 기반한 모델들도 자연어생성이라는 task에서 greedy decoding이라는 framework에서 벗어나지 못하는 한계점도 가짐
      • greedy decoding
        • 처음부터 왼쪽에서 단어를 하나씩 생성하는 방법

GPT-1

Improving Language Understanding by Generative Pre-training

  • GPT-1

    • It introduces special tokens, such as <S> / <E> / $, to achieve effective transfer

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

      • <S>, <E>, $ 등과 같은 다양한 스페셜 토큰을 제안하여 간단한 task뿐만 아니라 다양한 자연어처리에서의 많은 task들을 동시에 커버할 수 있는 통합된 모델을 제안했다는 것이 주요한 특징
    • main task에 사용할 때

      • 이미 학습된 트랜스포머 encoder와 main task를 위한 추가적인 layer를 하나 덧붙이고 main task를 위한 학습 데이터로 전체 네트워크를 학습하는 과정을 거침

      • 마지막 layer는 random initialization을 통해 시작이 되기 때문에 학습이 충분히 되어야 하지만 이전에 이미 학습되어 있는 layer에는 lr을 상대적으로 작게 줌으로써 큰 변화가 일어나지 않도록하고 기존에 학습했던 여러 지식들을 충분히 잘 담고 있으면서 그 정보를 우리가 원하는 main task에 활용할 수 있는 형태로 fine-tuning을 진행함

        https://blog.openai.com/language-unsupervised/

      • GPT 모델은 sequence encoding을 하기 위한 attention block으로 트랜스포머의 decoder 부분에서 사용되던 masked self attention을 사용함

      • 하지만 BERT 모델은 mask로 치환된 토큰들을 주로 예측하게 되고 mask 단어를 포함하여 전체 주어진 모든 단어들을 접근이 가능하도록 함으로써(attention 패턴이 모두를 볼 수 있도록 하여) 트랜스포머의 encoder 부분에서 사용되던 self-attention을 사용함

  • Experimental Results

    https://blog.openai.com/language-unsupervised/

BERT

BERT : Pre-training of Deep Bidirectional Transformers for Language Understanding

  • Learn through masked language modeling task
  • Use large-scale data and large-scale model

Masked Language Model

  • Motivation
    • Language models only use left context or right context, but language understand bi-directional
      • 기존에는 전후 문맥을 보지 못하고 앞쪽의 문맥만을 보고 다음 단어를 예측해야하는 한계가 존재했음
      • 한 쪽의 문맥 정보만으로 예측하는 것이 아니라 양쪽의 문맥 정보를 보고 예측하는 것이 좀 더 유의미한 예측이 가능할 것이라 생각 하여 제안
  • If we use bi-directional language model?
    • Problem : Words can “see themselves” (cheating) in a bi-directional encoder

Pre-training Tasks in BERT

  • Masked Language Model (MLM)

    • Mask some percentage of the input tokens at random, and then predict those masked tokens.
      • 입력 토큰 중 무작위로 몇 %정도를 mask하고 그 mask된 토큰들을 예측함
    • 15% of the words to predict
      • 80% of the time, replace with [MASK]
      • 10% of the time, replace with a random word
      • 10% of the time, keep the sentence as same
  • Next Sentence Prediction (NSP)

    • Predict whether Sentence B is an actual sentence that proceeds Sentence A, or a random sentence

      • B문장이 A문장 다음에 오는 문장이 맞는지 아닌지 예측함

      https://nlp.stanford.edu/seminar/details/jdevlin.pdf

Pre-training Tasks in BERT : Masked Language Model

  • How to

    • Mask out $k%$ of the input words, and then predict the masked words

      • e.g., use $k$=15%

  • Too little masking : Too expensive to train

  • Too much masking : Not enough to capture context

  • mask로 치환하는 비율을 너무 높이게 되면 주어진 문장에서 너무 많은 부분을 mask로 처리하게 되어 mask 단어를 맞추기에 충분한 정보가 제공되지 않는 문제가 발생

  • mask로 치환하는 비율을 너무 낮추게 되면 학습 효율이 좋지 않거나 학습 속도가 충분히 빠르지 않게 되는 문제가 발생

  • BERT에서는 적절한 비율이 15%라고 함

  • Problem

    • Mask token never seen during fine-tuning
  • Solution

    • 15% of the words to predcit, but don’t replace with [MASK] 100% of the time.
    • Instead:
      • 80% of the time, replace with [MASK]
        • went to the store → went to the [MASK]
      • 10% of the time, replace with a random word
        • went to the store → went to the running
      • 10% of the time, keep the same sentence
        • went to the store → went to the store
    • 15% 중에 80% 정도는 [MASK]라는 특수한 토큰으로 치환하여 해당 단어를 맞추도록 함
    • 15% 중에 10% 정도는 무작위 단어로 치환하여 해당 본래 단어를 맞추도록 함
    • 15% 중에 10% 정도는 단어를 전혀 바꾸지 않고 그 단어가 다른 단어로 바뀌어야 하는지 바뀌지 않아야 하는지 맞추도록 함

Pre-training Tasks in BERT : Next Sentence Prediction

  • To learn the relationships among sentences, predict whether Sentence B is an acutal sentence that proceeds Sentence A, or a random sentence

    • A, B 두 문장이 연속된 문장이 맞는지 예측하도록 학습이 진행되고 backpropagation으로 [CLS] 토큰을 통해 전체 네트워크가 학습이 진행됨

    • [CLS] : classification token

      • 다수의 문장 레벨에서 예측 task를 수행하는 역할을 담당하는 토큰

BERT Summary

  • Model Architecture

    • BERT BASE : L = 12, H = 768, A = 12
    • BERT LARGE : L = 24, H = 1024, A = 16
    • A : 각 layer별로 정의되는 attention head의 수
    • H : 각 self attention block에서 같게 유지되는 encoding vector의 차원 수
  • Input Representation

    • WordPiece embeddings (30,000 WordPiece)

      • 명확하게 구분되는 단어(subword)가 합성된 단어들을 단어 단위로 나눠서 embedding함
    • Learned positional embedding

      • positional embedding도 학습에 의해서 결정되도록 만듬
    • [CLS] - Classification embedding

    • Packed sentence embedding [SEP]

    • Segment Embedding

      • 두 문장이 이어져서 한 문장이 이루어진 경우라면 positional embedding에서는 순차적으로 embedding값이 부여되기 때문에 두 번째 문장이 시작되는 단어일지라도 positional embedding 값은 순차적으로 봤을 때 중간 부분의 값이 부여되는 문제가 있음
      • 그래서 segment embedding을 통해 첫 번째 문장은 첫 번째 문장이라는 것을 나타낼 수 있는 embedding 값을 더해주고 두 번째 문장은 두 번째 문장이라는 것을 나타낼 수 있는 embedding 값을 더해줘서 각각의 문장이 이어졌다는 것을 나타내줌
      • token embedding, segment embedding, positional embedding 값들을 모두 더하여 최종 embedding 값을 만들게 됨
  • Pre-training Tasks

    • Masked LM
    • Next Sentence Prediction

BERT : Fine-tuning Process

  • Transfer Learning

    https://blog.openai.com/language-unsupervised/

    • 각각의 main task에 적절한 출력을 만들어주도록 마지막에 적절한 FC 레이어를 추가한다.

BERT vs GPT-1

  • Comparison of BERT and GPT-1
    • Training-data size
      • GPT is trained on BookCorpus(800M words)
      • BERT is trained on the BookCorpus and Wikipedia (2,500M words)
      • BERT가 GPT보다 3배 많은 데이터로 학습 진행
    • Training special tokens during training
      • BERT learns [SEP], [CLS], and sentence A/B embedding during pre-training
      • [SEP], [CLS] 토큰 + segment embedding 추가
    • Batch size
      • BERT - 128,000 words
      • GPT - 32,000 words
      • 한 번 학습할 때 BERT가 GPT보다 더 많은 단어를 학습함
      • 일반적으로 더 큰 batch size를 사용할 때 최종 모델 성능이 좋아지고 학습도 더 안정화된다고 함
        • gradient descent를 수행할 때 일부의 데이터만으로 도출된 gradient로 파라미터를 업데이트할지 아니면 다수의 데이터를 바탕으로 종합적으로 나온 평균 gradient를 바탕으로 파라미터를 업데이트할지에 따라 학습이 달라질 수 있는데 한 번에 더 많은 숫자의 데이터를 사용해서 업데이트를 수행할 때가 학습이 더 안정적이고 성능이 좋다고 함
    • Task-specific fine-tuning
      • GPT uses the same learning rate of 5e-5 for all fine-tuning experiments
        • GPT는 fine tuning에서 lr을 5e-5로 동일하게 사용
      • BERT chooses a task-specific fine-tuning learning rate
        • BERT는 task별로 lr을 다르게 사용

BERT : GLUE Benchmark Results

  • GLUE Benchmark Results

Machine Reading Comprehension (MRC), Question Answering

BERT : SQuAD 1.1

https://rajpurkar.github.io/SQuAD-explorer/

  • BERT의 입력으로 지문과 질문을 두 개의 서로 다른 문장인 것처럼 [SEP]를 통해 concat을 하여 하나의 시퀀스로 만들어서 BERT를 통해 인코딩을 진행함
  • 그러면 각각의 지문 상에서의 단어별로 단어 인코딩 벡터가 나옴
  • 그 벡터들에서 정답에 해당할 법한 위치, 즉 그 위치는 지문상에서 특정한 문구로 정답이 주어지는데 그 문구의 위치를 예측하도록 모델을 학습함
  • 답에 해당하는 문구가 시작하는 위치를 예측하기 위해 각 단어별로 최종 인코딩 벡터가 출력으로 나왔을 때 이를 공통된 출력 레이어를 통해(스칼라 값을 뽑도록 하는 출력 레이어를 통해) 결과값을 얻게 됨
  • 각 단어가 2차원 vector로 최종 인코딩 벡터가 나오게 되면 여기에 각 단어 인코딩 벡터에 적용해야 하는 출력 레이어는 2차원 벡터를 1차원 벡터 또는 스칼라 값으로 변경해주는 FC 레이어가 됨
  • FC 레이어의 파라미터가 random initialization으로 부터 fine tuning되는 대상에 해당하는 파라미터가 됨
  • 각 단어별로 스칼라 값을 얻은 후에는 여러 단어들 중에 답에 해당하는 문구가 어느 단어에서 시작하는지 예측함
  • 가령 단어가 124개 있다면 해당하는 스칼라 값이 124개가 있을 것이고 거기에 softmax를 통과시켜서 softmax의 ground truth로써 첫 번째 단어에 해당하는 단어에 배정될 확률이 최대한 가까워지도록 softmax loss를 통해 모델을 학습함
  • 그 후에는 모델이 끝나는 시점도 예측해야 하는데 그 경우에는 시작 지점을 예측하도록 하는 출력 FC 레이어와 동시에 또 다른 FC 레이어를 두 번째 버전으로 만들고 그것을 통과하여 단어 인코딩 벡터가 스칼라 값이 나오도록 함
  • 거기에 softmax를 통과시킨 후 끝 단어에 대한 위치를 예측하도록 하는 FC 레이어의 결과를 ground truth가 실제 해당하는 답의 마지막 단어의 위치가 되도록 softmax loss를 통해 학습하여 시작, 끝 지점을 예측하는 FC 레이어를 학습하게 됨

BERT : SQuAD 2.0

https://rajpurkar.github.io/SQuAD-explorer/

  • 질문에 대한 답을 찾을 수 없는 경우의 데이터셋까지도 포함됨
  • 먼저 질문에 대해 답이 있는지 없는지에 대해서 판단함
  • 답이 있다면 위의 SQuAD 1.1에서 적용했던 방식대로 답에 해당하는 문구를 예측하게 됨
  • 답이 있다 없다를 예측하는 task는 high level에서 보면 문단과 질문을 종합적으로 판단해야 하는 task가 됨
  • 그 경우에 [CLS] 토큰을 활용할 수 있고 지문과 질문을 concat하여 하나의 sequence로 만들고 BERT를 통해 인코딩하여 나온 [CLS] 토큰에서 주어진 질문과 지문에 대한 쌍에서 답이 실제로 없는(ground truth가 no answer라고 표시된) 경우는 [CLS] 토큰을 binary classification하는 출력 레이어를 두고 cross-entropy loss를 통해 결과값이 no answer로 적절히 예측되도록 학습하게 됨
  • 최종적으로 예측에 이 모델을 사용할 때는 [CLS] 토큰을 통해 답이 있는지 없는지 예측하고 답이 있는 것으로 예측 결과가 나온 경우에는 SQuAD 1.1에서 적용했던 방법처럼 시작, 끝 지점을 예측하는 출력 레이어를 구동함으로써 답에 해당하는 문구를 예측할 수 있게 됨

BERT : On SWAG

  • 주어진 문장이 있을 때 다음에 나타날 법한 적절한 문장을 고르는 task
  • 기본적으로 [CLS] 토큰을 사용하게 됨
  • 위 예시에서는 가능한 경우의 수가 4가지 이기 때문에 비효율적일 수 있지만 첫 문장과 가능한 4개의 선택지들을 각각 concat하여 BERT를 통해 인코딩하고 나온 [CLS] 토큰에 임베딩 벡터가 2차원이면 출력 FC 레이어를 거쳐서 스칼라 값을 예측하도록 함

BERT : Ablation Study

  • 레이어를 점점 더 깊게 쌓고 레이어별 파라미터를 점점 더 늘리는 방식으로 모델을 학습하면(모델 사이즈를 점점 더 키울수록) 여러 down-stream task에 대한 성능들이 끊임없이 좋아짐
  • 모델 사이즈를 GPU 리소스가 허락하는한 키울 수 있는 만큼 키웠을 때도 계속 개선되는 결과를 보여줌
  • 가능하다면 모델 사이즈를 키워서 pretraining을 통한 down-stream task에 적용했을 때 성능이 점점 더 오를 수 있을 것이라고 전망하고 있음

출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)

'부스트캠프 AI Tech 4기' 카테고리의 다른 글

(Data Viz) 인터랙티브 시각화  (0) 2023.07.13
(NLP) Other Self-supervised Pre-training Models  (0) 2023.07.12
Git  (1) 2023.07.06
(NLP) Transformer - 2  (0) 2023.07.05
(NLP) Transformer - 1  (0) 2023.07.04
Comments