dukim's blog

[WK07-Day033][21.09.16.Thu] BERT, MT-DNN, GPT-3, ALBERT, ELECTRA, ETC 본문

Boostcamp AI Tech 2th

[WK07-Day033][21.09.16.Thu] BERT, MT-DNN, GPT-3, ALBERT, ELECTRA, ETC

eliza.dukim 2021. 9. 27. 06:43

Intro

  • 강의에서 소개된 논문 + 멘토링에서 다룬 논문 요약

학습 내용

[논문 읽기 모임] BERT, MT-DNN

BERT

image

주요 특징

  • Special token : [CLS], [SEP], [MASK], [PAD]
    • 참고: GPT-1은 special token을 fine-tuning시만 사용하지만 BERT는 pre-training에서도 사용
  • BERT 모델 입력 : 토큰 임베딩 + 세그먼트 임베딩 + 포지션 임베딩
  • FFN에서 ReLU 대신 GeLU
  • WordPiece Tokenizer

Pre-training task

  1. Masked Language Modeling(MLM, a.k.a. Cloze test)

    • 빈칸 넣기 과제, 양방향 학습이 가능해짐
    • GPT의 경우엔 예측해야할 단어들(현재 시점 이후의 단어)간의 attention이 불가능하지만, BERT는 모든 단어에 대해 attention 계산 가능
    • 입력된 토큰 시퀀스 중 15% 토큰에 대하여 다음과 같은 처리를 하고 원래의 토큰을 예측하도록 함
      • 80% : [MASK] 토큰으로 대체
      • 10% : 임의의 토큰으로 대체
      • 10% : 그대로 둠
    • 2, 3번째와 같은 처리를 한 이유: [MASK] 토큰이 downstream task에서는 등장하지 않기 떄문에 pre-training 방식과 실제 적용과의 불일치가 발생함. 이를 보완하기 위한 장치, 이후 XLNet에서는 이마저도 적절한 방식이 아니라고 지적하면서 새로운 방식을 제안
    • 전체의 15% 토큰에 대해서만 학습이 이뤄지므로 left-to-right 방식의 GPT 보다 느리게 수렴함, 이후 ELECTRA에서 이에 대한 해결책을 제시함
    • 코드 상에서 Token-level classification
  2. Next Sentence Prediction(NSP)

    • 두 문장이 서로 연속된 문장인지 여부 판단
    • 절반은 True, 나머지 절반은 False(다른 문서에서 추출한 문장)
    • 코드 상에서 pooler layer가 [CLS] token의 hidden states로 학습(IsNext, NoNext)

Pre-training 절차

  • Batch size : 256 sequence * 512 tokens = 128,000 tokens/batch)
  • Step : 1,000,000 steps(Epoch로 환산시 3.3B word corpus에 대해 약 40 epoch)
  • Optimizer : Adam with learning rate = 1e-4, $\beta_1 = 0.9, \beta_2 = 0.999$
  • L2 Weight decay : 0.01
  • Learning rate schedule : linear decay, warm-up over the first 10,000 steps
  • Dropout : 0.1 for all layers
  • Loss : meaned MLM loss + NSP loss
  • 학습 속도를 높이기 위해 pre-train의 처음 90% steps 동안은 max seq len 128, 나머지 10% steps 동안엔 512

Fine-tuning 절차

  • 대부분 pre-training과 동일한 hyperparameter 사용

    • batch size, learning rate, epochs 제외
    • search space
      • batch size : 16, 32
      • learning rate(Adam): 5e-5, 3e-5, 2e-5
      • number of epochs: 2, 3, 4
    • downstream task의 data set이 클수록(100K+ samples), hyperparameter에 덜 민감함
  • sequential-level tasks: (a), (b) : [CLS] 토큰의 마지막 hidden state 벡터를 classifier layer의 입력으로 사용

  • token-level tasks: (c), (d) : (c): 각 토큰이 문제 풀이와 관련 있는 시작점인지, 끝점인지를 예측, (d)는 각 위치에 해당하는 entity class를 예측
    image

Results

  • 11개 NLP tasks에 대해 제시(GLUE 8개 + SQuAD v1.1 + SQuAD v2.0, SWAG)

  • GLUE

    • 모든 Task에서 기존 SoTA였던 GPT를 뛰어넘음
      image
  • SQuAD v1.1

    • Wikipedia에 대해서 수집한 100k 개의 질문 답변 쌍으로, 주어진 질문에 대한 답을 지문 안에서 시작점과 끝점의 위치를 찾는 task

    • [CLS] Question [SEP] Passage [SEP]의 형태로 모델에 입력

    • fine-tuning 단계에서 start vector $S \in \mathbb{R}^H$, end vector $E \in \mathbb{R}^H$를 도입, paragrah 내의 단어 $i$의 마지막 hidden state vector를 $T_i$라 할 때, paragrah 내의 모든 단어에 대해 다음과 같이 softmax를 계산

      • 단어 $i$가 시작점일 확률 $P_i = \frac{e^{S \cdot T_i}}{\sum_j S \cdot T_j}$
      • 단어 $i$가 끝점일 확률 $P_i = \frac{e^{E \cdot T_i}}{\sum_j E \cdot T_j}$
    • i 부터 j까지의 span의 점수 : $S \cdot T_i$, where $i \ge j$, 이것의 값이 가장 큰 것을 정답으로 선택

    • training objective : 정답인 시작점과 끝점의 log-likelihood 가 최대가 되도록 학습

    • hyperparameter : learning rate 5e-5, batch size 32, epoch 3

    • data augementation : TriviaQA dataset으로 학습한 다음 다시 SQuAD에 대해 학습, 적용시 F1 score에서 0.1-0.4점 정도의 근소한 차로 점수 상승

      image

  • SQuAD v2.0

    • SQuAD v1.1의 확장판으로 지문 내에 답이 없는 경우도 존재

    • 정답이 없는 경우의 확률을 위의 방식에서 지문 내에 각 단어의 임베딩 $T_i$에 대해 확률을 계산하듯이, [CLS] 토큰 임베딩 $C$의 확률을 계산하는 방식으로 처리, $s_{null} = S \cdot C + E \cdot C$

    • 정답이 있을 경우의 확률을 기존 방식대로 계산($\hat{s_{i,j}} = \text{max}_ {j \ge i} S \cdot T_{i} + E \cdot T_j$)하고, 다음과 같이 $\hat{s_{i,j}}$과 대소 비교하여 정답 존재 여부를 예측함.

    • $\hat{s_{i,j}} > s_{null} + \tau$ 여기서 $\tau$는 threshold로 dev set의 F1을 최대화하도록 설정하는 hyperparameter

    • hyperparameter : learning rate 5e-5, batch size 48, epoch 2

    • TriviaQA는 사용하지 않음

      image

  • SWAG

    • The Situations With Adversarial Generations(SWAG)

    • 113k 개의 문장쌍 완성 과제로, 일반 상식에 기반한 추론 능력을 평가

    • 주어진 문장에 이어질 4가지 후보 문장 중 가장 적절한 것을 선택

    • [CLS] given sentence [SEP] possible continuation_# [SEP]의 형태로 모델에 입력

    • 각 후보 문장에 대해 [CLS] 토큰의 임베딩 벡터를 구한 뒤 task-specific parameter vector에 내적하여 각각의 점수를 구하고, softmax layer로 normalize하여 최종 분류

    • hyperparameter : learning rate 2e-5, batch size 16, epoch 3

      image

Ablation studies

  • 다음 내용을 다루고 있지만 지금 이걸 살펴볼 이유는 없을 것 같다. 항목만 파악해두고 스킵
    • Pre-training task의 효과를 세 가지 조건(NSP, No NSP, Left-To-Right & No NSP)으로 비교
    • 모델 사이즈의 효과
    • ELMo 처럼 Feature-based Approach로 사용하는 경우

MT-DNN

MT-DNN Architecture

image

Training a MT-DNN model

image

Results

  • Summary of the benchmark dataset : GLUE, SNLI and SciTail
    • 각 데이터셋에 대한 크기, label 수 및 평가지표
    • (코멘트) BERT 논문의 실험결과에 WNLI가 제외되었던 이유는 당시 GLUE 리더보드에서 발생한 이슈 때문(데이터셋 구성상의 실수로 하나의 majority class로 예측하면 accuracy가 65.1%가 나오는데, 제출한 모든 모델이 이를 넘지 못함, BERT에서도 majority class로만 예측한 결과를 제출함)
      image
  • 성능 평가 결과 기존 BERT의 성능을 능가함, 여기서 $\text{MT-DNN}_{no-fine-tune}$은 multi-task-learning으로 학습할 때 사용했던 head layer를 그대로 사용한 결과이며, 일반 MT-DNN은 각 task 별로 다시 head-layer를 초기화하여 학습한 모델
    image

[강의 내용] GPT-3, ALBERT, ETC.

GPT-3

  • Brown et al., Language Models are Few-show Learners, NeurIPS 2020
  • LM의 규모를 키울수록 모든 task에서 few-shot 성능이 높아진다는 것을 보여줌
  • T5가 11B, Turing-NLG가 17B 였는데, 175B parameter의 모델을 제시함
  • 너무 길어서(40 + 32 pages) 강의에 소개된 요약 내용만 정리, 추후 읽어야할 논문

Model Architecture

  • GPT-2와 구조 동일(modified initialization, pre-normalization, reversible tokenization 포함), 단 Sparse Transformer와 비슷하게 dense와 locally banded sparse attention pattern을 transformer layers에 사용

  • 96 Attention layers, 12888 Hidden-dim, 96 Attention heads, 3.2M Batch size

  • 큰 모델에 대해서는 더 큰 배치를 사용하되 learning rate는 줄임(참고 자료 - lunit 기술 블로그 - Batch Size in Deep Learning)

    image

Summary

  • Prompt: the prefix given to the model
  • Prompt에 제시되는 예시의 개수에 따라 zero-shot, one-shot, few-shot
  • 모델 규모가 커짐에따라 성능이 향상되며, 제시되는 예시의 수가 많을 수록 큰 폭으로 증가
    image

ALBERT

Factorized Embedding Parameterization

  • PLM에서 embedding parameter는 모델 전체 parameter 중에서 상당수를 차지함
  • 이를 줄이기 위해서 Embedding layer의 각 token의 dimension을 factorization technique으로 줄임
  • 아래 그림에서 V를 vocab size, H를 hidden-state dimension, E를 word embedding dimension이라 할 떄, 다음과 같이 E를 줄이고, 여기에 학습가능한 weight matrix를 곱한 값을 embedding vector로 사용
  • 예를 들어 V = 30,000, H = 768, E = 128 이라 할 때
    • 기존 embedding layer의 parameter 수 : 30,000 * 768 = 23,.040,000
    • ALBERT의 embedding layer의 parameter 수 : 30,000 * 128 + 128 * 768 = 3,938,304

Cross-layer Parameter Sharing

  • 모든 n개의 Transformer block을 동일한 parameter로 사용하여 parameter 수를 줄임

  • 아래 세 가지 조건을 실험한 결과, 모든 조건에서 성능 하락이 있었으나 Factorized Embedding Parameterization을 사용한 조건($E=128$)에서는 성능 하락 폭이 적었고(-1.5 on Avg), 특히 Shared-Attention 조건에서 성능하락이 제일 적었다.

    • Shared-FFN: Transformer block 간에 Feed-Forward Network parameters 만을 sharing
    • Shared-Attention: Transformer block 간에 Attention parameters 만을 sharing
    • All-shared: 위 두 조건 모두 적용

    image

Sentence Order Prediction

  • BERT의 Next Sentence Prediction task가 지나치게 쉬운 task라 효과적이지 않음을 지적

  • 하나의 문서 내에서 두 개의 연속된 segment의 순서를 예측(연속된 두 segment가 정상적인 순서면 True, 뒤집힌 순서면 False)

    • 참고 : 전체 텍스트(문서)의 일부분을 segment라 함, 입력 형태에 대한 자세한 설명 및 비교 실험은 RoBERTa 논문 참고, ALBERT에서는 RoBERTa에서 segment pair를 이용한 방식이 다른 방식(e.g. sentence-pair 등)보다 성능에서 이점을 얻을 수 있다고 보고하여 해당 방식을 선택함

    image

Experimental Setup

  • Pre-training

    • Dataset : BERT와 동일(BookCorpus, English Wikipedia, 16GB of uncompressed text)
    • Max seq len : 최대 512, 이보다 짧은 길이의 샘플을 10% 확률로 생성
    • Tokenizer: WordPiece를 사용한 BERT와는 달리 XLNet에서 처럼 SentencePiece 사용
    • MLM : SpanBERT(Joshi et al., 2019)의 n-gram masking 사용(n의 최대값 = 3)
    • Batch size : 4,096
    • Optimizer : LAMB, learning rate 0.00176
    • 125,000 steps
    • 동일 조건 비교를 위해 직접 구현한 BERT에 대해서도 동일한 셋업 사용
  • Fine-tuning
    image

Results

  • GLUE benchmark
    image
  • SQuAD, RACE benchmarks
    image

ELECTRA

  • Clark et al., ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators, ICLR 2020
  • ELECTRA: Efficiently Learning an Encoder that Classifies Token Replacements Accurately
  • MLM pre-training objective의 한계점(전체 토큰의 15%만 학습에 이용됨, [MASK] 토큰은 downstream task에서 등장하지 않음)을 지적하며 Replaced Token Detection을 이용한 효율성 높은 방식을 제안
  • (참고) BERT 파생 모델들의 pre-training objective 요약 & 비교
    • BERT = MLM + NSP
    • RoBERTa = MLM
    • ERINIE = MLM + NSP + dEA
    • ALBERT = MLM + SOP(Sentence Order Prediction)

Model Architecture

  • GAN 처럼 Generator와 Discriminator로 이루어져 있지만 Adversarial Learning 방식은 아니다

    • Generator와 Discriminator 간에는 gradient가 전달되지 않음
  • Generator

    • Transformer Encoder
    • 기존 MLM과 동일하게 [MASK] 토큰이 무엇인지 예측
    • 예측을 통해 얻은 확률분포로부터 corrupt sample을 생성하여 discriminator로 전달
  • Discriminator

    • Transformer Encoder, 단 generator 보다 큰 모델
    • Generator에서 [MASK]에 대해 대체된 토큰이 original인지 replaced인지 분류하도록 학습
    • downstream task에는 generator는 버리고 discriminator만 사용됨

    image

장점

  • 최종적으로 사용하는 Discriminator의 pre-training에 [MASK] 토큰을 제외시킴
  • MLM이 전체 토큰의 15%로 학습하여 학습이 느린 것과 다르게 전체 토큰에 대해 학습
  • Generator가 생성한 corrupt sample은 임의로 생성한 corrupt sample 보다 더 학습에 효과적
  • (코멘트) : 개인적으로 Generator를 따로 쓸거면 굳이 이렇게 할 필요 없이 임의로 대체한 걸 사용하는게 낫지 않나 의문이었는데, Generator가 같이 학습하면서 초반에는 쉬운 샘플을, 후반부에는 점점 어려운 샘플을 제시하게 된다는 점에서 의문이 풀림

Results

  • Replaced Token Detection pre-training을 통해 기존 모델과 동일한 step을 더 적은 연산량(FLOPs)으로 처리하며 비슷한 성능을 보임(RoBERTa-500k steps vs. ELECTRA-large 400ksteps), BERT-base와 ELECTRA-base의 경우 동일한 사이즈, 동일한 연산량에서 더 높은 성능

    image

  • 기존 방식 대비 더 빠르고 더 높은 성능을 보여줌

    image

Light-weight Models

  • 모델 경량화 연구
  • DistillBERT(NIPS, 2019 Workshop)
    • teacher model의 출력 확률분포를 soft-label로 하여 student model을 학습시킴
  • TinyBERT(Findings of EMNLP 2020)
    • Two-stage learning framework: pre-training 과 task-specific learning 모두 distillation
    • 각 레이어의 중간 출력값에 대해서도 teacher model과 student model이 유사해지도록 학습함

Fusing Knowledge Graph into Language Model

  • 기존 PLM과 Knowledge Graph를 연결하는 연구
  • PLM은 문맥이나 단어 유사도 파악은 잘 하지만, 주어진 문장 이외의 추가적인 정보를 활용하는 능력은 떨어짐
    • e.g. QA Task "꽃을 심기 위해서 땅을 팠다"라는 문장이 주어질 때, "땅을 무엇으로 팠는가?"라는 질문에 대해 PLM은 주어진 문장의 정보만으로는 답변하기 어려움(각 상황별 사용하는 도구에 대한 상식 추론이 어려움)
  • 외부 정보나 외부 지식들이 전통적인 인공지능 분야에서 Knowledge Graph로 표현됨
    • e.g. (땅, 부삽, 파다), (땅, 중장비, 파다)
  • 관련 연구

과제 수행

선택과제 3 Byte-Pair Encoding

  • 결국 해결하지 못 하고 과제 해설을 참고했다. 생각외로 간단한 아이디어를 사용했다. 논문에서 제시된 코드에서 vocab을 갱신할 때마다 얻게되는 쌍을 idx2word 리스트에 append 하는 것

피어세션

학습 회고

  • 각 논문을 정리할 때, 직접 사용할 것을 고려해서 학습 세팅과 각 모델간의 성능 비교표를 논문 요약에 포함시켰다.
  • 선택과제 3 BPE에서 상당한 시간을 소요했으나 풀지 못 했고, 다른 학습 일정이 밀렸다. 잘 풀리지 않는 문제를 너무 오래 도전하는 것 보다는 시간을 정해두고 컷하는 것이 좋을 듯하다.

추후 학습할 내용

  • GPT-2, GPT-3, 그리고 관련 내용으로 Sparse Transformer에 대해서도 정리가 필요하다
  • ALBERT 논문에서 소개된 SpanBERT의 n-gram masking과 LAMB optimizer 그리고 RoBERTa에 대한 학습 세팅과 그 결과에 대한 정리도 필요함
  • ELECTRA 논문을 훑은 수준, 세부 학습 세팅과 결과를 보며 꼼꼼히 정리해야함
  • 토크나이저 간 비교, 각 모델에서 사용한 토크나이저에 대한 정리 필요
Comments