Soohyun’s Machine-learning

[NLP] RoBERTa : A Robustly Optimized BERT Pretraining Approach 본문

Review of Papers

[NLP] RoBERTa : A Robustly Optimized BERT Pretraining Approach

Alex_Rose 2021. 10. 2. 02:17

BERT가 충분하게 트레이닝되지 않았다-고 주장하고 시작한다.

 

RoBERTa의 contribution

1) 더 나은 downstream task 성능을 낼 수 있는, BERT의 디자인 선택 (design choices), 그리고 트레이닝 전략 (training strategies)을 제시

2) CC-NEWS라는 새로운 데이터셋을 사용, 또한 사전학습(pretraining)에서 더 많은 데이터를 사용하는 것이 downstream tasks에서의 성능을 향상시키는 걸 확인

3) 트레이닝 향상은 masked language modeling이 올바르게 디자인 된 조건하에서, 최근에 발표된 방법들에 비견할만 함

 

 

RoBERTa (로베르타)의 특징 == 오리지널 BERT와의 차이점

1) dymanic masking (오리지널 BERT의 masking은 STATIC으로 분류) mask의 position이 다이나믹하게 변경

2) FULL-SENTENCES (Next Sentence Prediction 목적함수 삭제) 중간에 짧은 길이의 sequence가 들어가는 일 없이, 오로지 full max-length 512 tokens로만 학습을 진행 

3) 큰 미니배치 (더 많은 데이터 (160BG)로, 더 큰 배치 사이즈로, 더 오랜 steps 동안 트레이닝)

4) 큰 byte-level Byte Pair Encoding

 

여기에 추가로 이전 작업들에서 덜 강조된 것 같은 팩터들을 체크했다.

 

1) pretraining을 위해서 사용된 데이터

2) 데이터를 지나는 training pass의 횟수

 

 

RoBERTa를 길게 트레이닝 시킨 (pretraining step을 100K에서 300K로, 더 나아가 500K로 트레이닝), 특히 300K와 500K 모델들은 XLNet(large)를 대부분의 태스크들에서 outperform했다. (그럼에도 160GB 데이터에 대해 overfit된 모습은 없었어서, 더 트레이닝하면 성능 향상이 더 있을 수도 있다)

 

 

 

BERT (base)

 

1) BERT의 input : 두 개의 segments (a sequence of tokens)를 붙인 것을 입력으로 받음

[x1, ... ,xn]과 [y1, ... ,ym]의 concatenate. 연결이 완료된 input의 모습은 하단의 그림과 같다

 

 

 

[CLS] task-specific 정보

[SEP] 토큰 X와 Y를 구분함

[SEP] 토큰 X와 Y의 끝을 알려줌

[MASK] 모델이 예측할 마스크 토큰

 

여기서 앞의 X의 길이 N과 Y의 길이 M을 합한 것은 전체 길이 512 보다 작아야 한다. N + M < T 

(T는 512)

 

 

2) L개의 트랜스포머 (Attention is all you need) 아키텍쳐를 사용했고, 각 트랜스포머 블록은 A개의 Selt-Attention 헤드와 H개의 Hidden dimension을 사용했다.

 

BERT base : L (layer) = 12, H (hidden dim) = 768, A (selt-attention head) = 12, Parameters = 110M

BERT large : L layer = 24, H (hidden dim) = 1024, A (selt-attention head) = 16, Parameters = 340M  

 

 

3) BERT는 2개의 training objectives를 사용했다.

 

Masked Language Model (MLM) 

   - input으로 들어온 토큰 중 15%를 uniform하게 선택하고, 그 (15%의 선택된) 토큰 중에서 80%를 스페셜 토큰 [MASK]로 대체했다. 10%는 바꾸지 않고 그대로 두었으며, 나머지 10%는 vocab에서 랜덤하게 선택한 단어로 바꾸었다.

   - MLM의 objective는 예측한 masked tokens의 cross-entropy loss이다. 

 

 

Next Sentence Prediction (NSP)

   - 두 개의 segments가 이어지는지 아닌지를 예측하기 위한 binary classification loss이다.

   - positive samples는 동일한 문서에서 이어지는 문장들로 얻을 수 있고, negative samples는 서로 다른 문서에서 문장을 골라 페어링하는 것으로 얻을 수 있다. 각각 샘플은 0.5의 동일한 확률로 샘플링된다.

 

 

 

 

최적화 (Optimization)

 

1) Adam Optimizer : β1 = 0.9   /   β2 = 0.999  /  ε = 1e-6

2) L2 weight decay : 0.01

3) learning rate는 10,000 스텝동안 피크값인 1e-4까지 갔다가, 그 다음에 선형으로 decay

4) 모든 레이어에 0.1의 dropout을 적용. attention weight도 씀

5) GELU 함수를 씀

6) 모델은 최대 길이 T = 512 토큰의, B = 256 미니배치로, S = 100만 업데이트로 pretraining 했다

 

+ Adam optim에서 epsilon tem에 트레이닝이 민감하게 반응했다. 

큰 미니배치 사이즈로 트레이닝을 할 때, β2를 0.98로 하는 것이 안정성이 높았다. 

 

 

 

데이터 (Data)

 

1) BOOK CORPUS + 영어 위키피디아 (16GB)  -- BERT

2) CC-News (common crawl news, 76GB)  

3) Open Web Text (38GB)

4) Stories (31GB)

 

오리지널 BERT는 1)번만 사용했지만, RoBERTa는 160GB 가량의 데이터를 사용

 

 

 

 

Static vs. Dynamic masking

오리지널 BERT는 전처리 단계에서 랜덤 마스킹을 1번만 했는데, 이를 static이라 부른다.

- 각 epoch마다 동일한 마스크를 사용하는 걸 피하려고, 트레이닝 데이터를 10배 복제한 다음, 다른 마스킹을 적용해서 트레이닝 40 epochs를 돌림

 

dynamic masking은 모델에 input을 feed 할 때마다, 매번 masking pattern을 생성한다. 

 

Static과 Dynamic masking을 적용한 것을 3개의 데이터셋에 대해서 비교를 해봤다.

static은 오리지널 BERT와 비슷한 성능을 보였고, dynamic은 오리지널과 비슷하거나 약간 더 나은 성능을 보였다.

 

 

 

 

Model Input format and Next Sentence Prediction (NSP)

오리지널 BERT의 pretraining 과정에서는 input으로 들어온 두 개의 segments가 같은 문서에서 샘플링된 것인지 아닌지를 판단한다. Masked Language Modeling은 이걸 확인하기 위해서 Next Sentence Prediction loss를 사용한다.

 

하지만 이 NSP가 퍼포먼스에 영향을 준다는 말들도 있어서, 이를 확인해 보았다.

 

With NSP

   SEGMENTS-PAIR : 오리지널 BERT에서 쓴 것. 512 토큰보다 작은 사이즈의 문장을 input으로 한다. 

   SENTENCE-PAIR : 샘플은 하나의 문서에서 연속되는 문장이거나, 서로 다른 문서에서 온 것이다.

                                  문장이 512보다 너무 짧아서, 배치 사이즈를 늘려서 SEGMENT-PAIR와 비슷한 토큰 개수를 유지

 

Without NSP

   FULL-SENTENCES : input은 하나 또는 다른 문서에서 온 문장들이며, 하나의 문장이 그 문서의 마지막 문장일 경우, 다른 문서에서 샘플링을 했다. 

   DOC-SENTENCES : input이 이전의 FULL-SENTENCES와 비슷하지만, 오로지 하나의 문서에서만 두 개의 sentences를 샘플링 했다. 다만 문서 끝에 있는 샘플이 512보다 작을 수 있어서, 유동적으로 배치 사이즈를 늘려서 FULL-SENTENCES와 전체 토큰 개수를 비슷하게 유지함

 

 

Table 2

 

위의 테이블 2에서 결과를 볼 수 있다. 

 

- SENTENCE-PAIR는 개별 문장(single sentence)을 썼는데, 이게 다운스트림 태스크에서의 퍼포먼스를 떨어트림

  (그 이유를, 모델이 long-dependencies를 못 배우기 때문이라고 생각)

 

- Next Sentence Prediction을 없애니 오리지널 BERT와 비슷하거나 약간 더 나은 성능을 낸다는 걸 볼 수 있다.

- DOC-SENTENCES가 FULL-SENTENCES보다 약간 더 나은 성능을 내고 있음도 볼 수 있다.

- 그럼에도, DOC-SENTENCES는 가변적인 배치사이즈를 요구하므로, 쉬운 비교를 위해서 이후 실험에서는 FULL-SENTENCES를 썼다

 

 

 

Large Batches로 트레이닝하기

 

오리지널 BERT(base)는 256 sequence의 배치 사이즈로 100만 스텝을 트레이닝했는데, 이는 gradient accumulation을 통해, 12만 5천 스텝을 2000 sequences의 배치 사이즈로 트레이닝 한 것, 또는 8000의 배치 사이즈로 31,000 스텝의 트레이닝을 한 것과 computational cost 측면에서 동일함.

 

(즉, batch size (bsz)는 늘렸지만, 전체적인 computational cost는 오리지널 BERT와 비슷하게 유지했다)

 

Table 3

 

 

위의 테이블 3를 보면 배치 사이즈(bsz)를 크게 한 것이 MLM objective의 PPL과 end-task accuracy를 향상시킴을 알 수 있음

 

 

Text Encoding

GPT2 논문에서 BPE (Byte Pair Encoding)을 유니코드 대신에 bytes를 사용했다. 

 

오리지널 BERT에서는 character-level BPE vocab (30K)을 사용했지만, 

우린 GPT2를 따라 BERT를 더 큰 byte-level BPE vocab (50K subword units)으로 트레이닝 시켰다.

 

(이 때문에 BERT(base)는 15M의, BERT(large)는 20M의 추가 파라미터가 생겼다)

 

BPE가 GPT2에서 약간 안 좋은 end-task performance를 보여주기도 했으나, universal encoding scheme으로 인한 이득이 퍼포먼스의 약간의 하락보다 낫다고 판단하여, 다른 실험에서 이 BPE를 사용했다.

 

 

 

결과

 

아래 테이블 5는 GLUE의 9개 데이터셋에 대한 성능 체크이다.

 

1) MNLI (Multi-Genre Natural Language Inference) : 이 문장 다음 문장이 이어지는 문장인지, 반대되는지, 서로 관련이 없는지를 체크

 

2) QNLI (Question Natural Language Inference) : 질의응답 

3) QQP (Quora Question Pairs) : 두 질문이 의미상 같은지 다른지 분류

4) RTE (Recognizing Textual Entailment) : MNLI와 비슷하지만 양이 적음

5) SST (The Stanford Sentiment Treebank) : 영화 리뷰 감정 분류 

6) MRPC (Microsoft Research Paraphrase Corpus) : 뉴스와 사람이 만든 문장이 같은 뜻인지 아닌지

7) CoLA (The Corpus of Linguistic Acceptability) : 문법이 맞는지 틀린지 분류

8) STS (The Semantic Textual Similarity Benchmark) : 뉴스 헤드라인과 사람이 쓴 패러프레이징 문장이 같은지 아닌지

9) WNLI (Winograd NLI) : 문장 분류

 

 

EM : Exact Match score

F1 : F1 score 

 

Comments