BERT논문을 읽어보지 않으신 분들은 이전의 다룬 BERT 리뷰 포스팅을 참고해주세요.
RoBERTa 논문의 간략한 설명은 다음과 같다.
1) 기존의 BERT에서 간과한 design choice, 학습 전략의 중요성을 강조하며 downstream task 성능을 높이는 새로운 대안을 제시한다.
2) 모델의 학습 데이터로 novel dataset, CC-News를 사용하며, pre-training 과정에서 더 많은 데이터를 사용할수록 모델의 성능은 높아진다.
3) BERT의 MLM 방식을 개선함으로 인해 이후 나온 모델과 비교하여 비슷하거나 더 나은 성능을 보인다.
Introduction
ELMo, GPT, BERT, XLM, 그리고 XLNet과 같은 Self-training 훈련 방식은 성능 개선에 큰 기여를 했지만, 어떤 method가 제일 나은지 판별하는 것은 어려운 문제다. 모델은 제각기 다른 크기의 private data에서 훈련이 이뤄지기도 하고, 모델의 구조 또한 다르기 때문에 공정한 비교를 위해서는 이를 세밀하기 조정하는 것이 필요하다.
RoBERTa는 BERT의 연구를 이어가며, BERT를 개선시켜 더 나은 성능을 보일 수 있음을 증명한다. 모델의 성능을 개선시키기 위해 사용한 method는 다음과 같다.
1. 모델을 더 오래, 큰 배치로 더 많은 데이터 환경에서 학습한다.
2. 기존 BERT의 NSP를 제거한다.
3. 더 긴 sequence에서 학습한다.
4. Dynamic masking 기법을 사용한다.
Areas of Improvement
모델의 구조를 BERT-base(L = 12, H = 768, A = 12, 110M params)로 고정하여 어떠한 방식을 사용해서 BERT의 성능을 높일 수 있었는지 설명한다.
Dynamic Masking
기존의 BERT는 훈련 과정 중에 한 번의 masking 작업을 진행한다. 논문에서는 이 방법을 Static Masking이라고 칭한다.
RoBERTa는 이를 개선한 Dynamic Masking 기법을 제시한다. Dynamic Masking은 모델의 입력 과정에서 매번 masking을 해준다. 이를 통해 성능을 미세하게 개선시킬 수 있었다.
Model Input and NSP
기존의 BERT는 QNLI, MNLI, 그리고 SQuAD 등의 데이터에서 성능을 높이기 위한 방법으로 NSP를 매우 중요시 여겼다. RoBERTa는 NSP를 제거함으로서 모델의 성능을 높이기 위한 실험을 진행한다. 실험을 진행하기 위해 input format을 다음과 같이 설정한다(입력 토큰은 512개로 제한된다):
1. Segment-pair + NSP
Original BERT의 input format과 동일한 형식이다. 입력은 segment pair로 구성되고, NSP loss를 포함한다.
2. Sentence-pair + NSP
1번의 형식과 유사하지만, 입력은 segment가 아닌 문장 본연의 형태로 구성된다. 입력 시퀀스의 형태가 문장으로 제한되어 최대 길이인 512보다 짧으므로, 배치 사이즈를 증가시켜 전체 토큰의 수가 1번과 비슷하게 조절한다.
3. Full-sentences
입력은 한개 이상의 문서에서 추출한 full-sentence로 구성되며, 총 길이는 512보다 짧다. 문서의 끝 문장에 다다르면, 다음 문서를 샘플링하여 입력을 구성한다. 이때, 다른 문서에서 문장을 추출할 경우 문장 사이에 separator token을 추가한다. 이 입력 형태는 NSP를 사용하지 않는다.
4. Doc-sentences
3번과 유사하지만, 입력은 하나의 문서만을 사용해서 구성한다. 따라서 최대 길이인 512보다 짧으므로 배치 사이즈를 증가시켜 총 토큰 개수가 비슷하도록 조절한다. NSP를 사용하지 않는다.
실험 결과는 위와 같다. 실험은 개별 문장에 대한 학습이 성능을 저하시키는 것을 확인할 수 있다. 논문은 이 방식이 long-range dependency의 학습을 방해하기 때문이라고 가정한다. 결과적으로 NSP loss를 제거하는 것이 더 나은 성능을 보임을 알 수 있다. Doc-sentences 입력은 배치 사이즈를 수정하기 때문에, 이후 실험은 Full-sentences 입력으로 진행한다.
Training with large batches
Large batch를 사용한 학습은 최적화 속도와 모델의 성능을 향상시킨다는 내용은 이미 이전 기계 번역 논문에서 다뤄진 바가 있다. 기존의 BERT-base 모델은 (1M steps, batch size 256)으로 학습되었다. 계산 비용으로 따졌을 때, 이는 (125k steps, batch size 2k), 그리고 (31k steps, batch size 8k)와 동일하다.
위 결과표는 이를 직접 학습시킨 결과다. 동일한 계산 비용이 드는 것에 비해 큰 batch size로 학습시킨 모델은 더 나은 성능을 보인다. 또한 large batch로 학습시키면 병렬화가 수월하다. 이후의 실험은 batch size를 8k로 설정한다.
Text Encoding
Byte-Pair Encoding(BPE)는 자주 나오는 문자열을 분리해서 처리하는 인코딩 방식이다. BPE vocabulary size는 보통 10k-100k의 subword unit으로 구성된다. RoBERT는 unicode character대신 byte를 사용하는 BPE를 사용한다. Byte를 사용함으로써 적절한 크기의 subword size를 학습할 수 있으며, "unkown" 토큰의 정의 없이 모든 입력 텍스트를 인코딩할 수 있다.
기존의 BERT에서 사용된 BPE는 30k의 크기로, heuristic tokenization 기법을 따르는 전처리 과정과 함께 사용되었다. 이 논문에서는 전처리 과정을 제거하는 대신 50k 크기의 BPE를 사용한다.
이러한 BPE를 사용하는 방법이 미세한 성능 저하를 일으킨다는 연구 결과가 있지만, universal 인코딩 방식이 가지는 장점이 단점을 상쇄시킬 수 있다는 가정 하에 이 방식을 채택한다.
Experiments
BERT를 XLnet과 비교를 하기 위해서는 pre-training 과정을 살펴봐야 한다. XLnet의 pre-training에서 사용된 데이터 크기는 BERT와 비교했을 때 약 10배 차이가 난다. 또한 BERT와 비교하여 XLnet은 8배 큰 배치 크기와 절반 정도의 최적화 step을 사용한 학습을 진행했다.
실험 단계에 앞서 비교를 명확하게 하기 위해 RoBERTa의 구조를 BERT-large (L = 24, H = 1024, A = 16, 355M parameters)로 설정한다.
RoBERTa 모델은 기존의 BERT-large 모델과 비교해서 확연한 성능 향상을 확인할 수 있다.
XLnet-large와 RoBERTa는 추가 데이터를 활용하여 실험을 진행했다. 표에서 언급된 additional data는 CC-News, OpenWebText, Stories 데이터를 의미한다. Step을 증가시키고 추가 데이터를 사용해서 학습시켰을 때, SQuAD v1.1/2.0, MNLI-m, 그리고 SST-2에서 RoBERTa가 가장 좋은 성능을 보였다.
Discussions
BERT를 읽으면서 NSP의 필요성에 대해 의문을 가졌는데, 그 점에 대한 궁금증을 해결할 수 있었다. BERT에서 크게 달라지지 않았지만 세밀하게 훈련 요소를 조절해서 모델의 성능을 대폭 상승시킨 점이 흥미로운 논문이었다.