반응형

RoBERTa 배경 설명

  • RoBERTa는 워싱턴 대학과 Facebook에서 2019년에 나온 BERT에 대한 연구 & 개선 논문이다.
  • BERT의 등장으로 언어 모델의 뼈대가 통일(?)된 상황에서, 그것을 개선할 방법을 제안하였다. 
  • BERT 같은 대용량 언어 모델은 학습과 재현이 힘들 것으로 알았는데, 역시 facebook이어서 가능한가 싶다. 
  • pretrained model을 사용할때, orginal BERT보다는 RoBERT를 많이 사용하는 것 같다.  

 

Abstract

  • 언어모델을 Pretraining 방식으로 학습하는 방법이 큰 성능 향상을 이끌었다. 
  • Training은 매우 계산 cost가 많이 들고, 모델마다 각기 다른 사이즈의 다른 데이터셋을 통해서 수행된다.
  • 모델의 성능에서 Hyperparameter의 선택은 결과에 중요한 영향을 미친다. 
  • 이 논문에서는 주요 hyperparameter들과 training 데이터 사이즈를 달리하면서 BERT의 pretraining의 과정을 살펴본다. 
  •  또한, 기존 BERT가 학습이 덜되었다는 것을 밝히고, 이것을 개선해서 BERT가 이후의 언어모델에 필적하거나 그보다 높은 성능을 보이도록 하였다. 

Introduction

  • self-training 방법을 사용한 다양한 언어모델들이 나와서 성능 향상을 이끌었지만, 각 언어모델의 어느 측면이 성능 향상에 영향을 미치는지 밝히는 것은 어렵다.
  • Training에 계산 cost가 크고, 각기 다른 크기의 다른 종류의 학습 데이터가 사용되기 때문에, 모델링 향상을 위한 각 방법들이 어떤 영향을 미치는지 알기 어렵다, 
  • 이 논문에서는 hyperparameter tuning과 training set size의 영향을 파악하고, BERT의 학습이 덜 되었다(개선할 여지가 있다는 것)을 밝힌다.
  • 또한, RoBERTa라는 BERT 성능을 향상할 수 있는 학습 방법들을 제안하여, 기존 BERT를 뛰어넘는 성능을 기록했다. 
  • RoBERTa의 개선은 다음과 같다. 
    • 학습에 더 길고, 큰 batch를 이용
    • 다음 문장 예측 objective를 삭제
    • 긴 문장으로 학습
    • training data의 masking pattern을 계속 바꿔줌
  • 추가적으로 RoBERTa는 "CC-NEWS"라는 새로운 대용량 데이터셋으로 학습되었다. 

 

Background

  • BERT 기반이다보니, BERT에 대한 Background를 설명한다.  BERT 설명은 아래 글을 참조

2023.05.16 - [NLP 논문] - BERT(Pre-training of Deep Bidirectional Transformers for Language Understanding) 논문 리뷰
 

Experimental Setup

[Implementation]

  • 우선, 이 논문은 original BERT를 재현하기 위해 일부 조건을 제외하고는 기존 BERT 논문에 나온 setup을 따랐다. 

[Data]

  • BERT 방식의 pretraining은 대용량 텍스트 데이터에 의존한다.
  • 이전 연구에서 data size가 performance 향상을 일으킬 수 있다고 하여, 많은 연구들이 BERT에 더 많고 다양한 데이터들을 이용해 봤지만, 모든 연구가 학습 모델을 공개하지는 않았다.
  • 이 논문에서는 크기와 domain이 다양한 5가지의 영어 데이터셋(총합 160GB)을 이용하였다.

[Evaluation]

  • 과거 연구들을 따라서, 3개의 benchmark(GLUE, SQuAD, RACE)들을 이용하여 성능을 평가했다.

 

Training Procedure Analysis

  • BERT의 pretraining 과정의 각 과정을 연구해본다. 비교를 위해, 모델 아키텍처는 고정하였다.(BERT Base 버전)

[Masking 방식 비교]

  • BERT의 학습 과정에는 token에 mask를 random하게 넣어, 이를 예측하는 과정이 있다. 이 과정에서 mask의 위치는 미리 후보지가 정해져 있고, 이 중 한 token에만 고정적으로 넣는다. 이를 이 논문에서는 "single static mask"라고 한다. 이러한 방식은 masking 될 위치가 고정되어 있기 때문에, 학습 epoch이 늘수록 중복되는 학습이 많아진다.
  • 이 논문에서는 dynamic masking이라는 방법을 제안하고 "single static mask"와 비교한다. dynamic masking은 model에 sentence를 전달하는 과정에서 masking pattern을 만든다. 
  • 결과 : dynamic masking이 기존 방법인 static 방법보다 약간의 성능 향상을 가져온다. 이후 연구에서는 dynamic 방식을 사용한다.

 
[Model Input Format & 다음 문장 예측]

  • BERT 학습 과정 중에, 문장 묶음(Segment) 다음에, 실제 연결되는 문장과 아닌 문장을 넣고, 연결성에 대한 Ture/False를 학습하는 내용이 있다. (auxiliary Next Sentence Prediction Loss, 약칭 NSP Loss)
  •   과거 연구들에서 NSP Loss를 지우면, 성능에 큰 악화가 생긴다고 증명했지만, 최근(당시) 연구에서는 NSP Loss의 필요성에 대해서 의문을 제기한다. 
  • 이 모순을 해결하기 위해 다양한 Input Format을 사용해보고, 이를 비교해 본다.

 

  1. Sentence-pair NSP : 각 input이 한 쌍의 natural sentence를 포함한다. 이 두 문장은 같은 documentation에서 왔을 수도 있고, 각기 다른 문서에서 왔을 수도 있다. NSP Loss를 유지한다. 
  2. Full-Sentences : 각 input은 여러 문서에서 sampling 된 전체 문장을 포함한다. input은 문서 간의 경계를 넘을 수 있다. (한 문서의 sentences 뒤에 다른 문서의 sentences가 연결될 수 있다.) 다른 NSP Loss가 없다. 
  3. DOC-Sentences : Full-Sentences 방법과 비슷하지만, 다른 문서와 연결되는 부분은 없다.(한 문서에서만 샘플링) NSP Loss가 없다. 
  • 결과
    • 우선 기존 방법인 Segment -pair와 Sentence-pair를 비교해 보았다. 둘 다 NSP Loss를 사용하지만, 후자의 성능이 더 낮았다.  즉, sentences 단위의 학습은 downstream 학습에서 성능 악화를 이끌 수 있다. 이것은 long-range의 dependency들을 학습할 수 없기 때문으로 보인다. 
    • 다음은 DOC-Sentences와 기존 BERT 성능을 비교해 본다. 이때, 전자의 성능이 미세하게 높다. 이는 NSP Loss를 제거하면 downstream 학습에서 기존과 비슷하거나, 약간 높은 성능을 보여준다. 
    • 마지막으로, 여러 문서가 포함될 수 있는 FULL-Sentences와 한 문서의 내용만 포함된 DOC-Sentences의 비교이다. 후자가 조금 더 높은 것을 봐서, 한 문서에서 문장을 추출하는 게 좋을 수 있다. 하지만, DOC-Sentences들은 데이터 사이즈가 다양해서(문서 당 문장의 길이와 개수가 다르므로) 논문의 이후 연구에서는 FULL-Sentences 방법을 사용한다.

[Large Batch]

  • 과거 연구에서는 큰 batch들을 이용하는 게 optimization 속도와 성능을 향상한다고 알려졌다. 
  • 최근(당시) 연구에서 BERT에서 Large Batch를 사용할 수 있다는 것을 보여주었다. 
  • Batch size를 다양하게 실험해 봤다. 
  • 결과 : BERT도 Batch size가 크면 성능이 좋았다. 하지만, 너무 커지면, 오히려 떨어진다. 

[Text Encoding]

  • 기존 연구들에서 Byte 단위의 BPE를 이용해서, Unknown token을 줄이는 좋은 방법을 사용했다.
  •  기존 BERT에서는 character-level의 BPE 어휘(30K)를 사용했지만, 이 논문에서는 byte-level의 BPE 어휘(50K)를 사용한다. 
  • 앞선 연구들에서 두 encoding 방법이 약간의 차이만 있다고 하지만, 다양한 어휘 처리를 위해 byte-level을 따른다.

 

RoBERTa

  • 앞선 section에서 BERT의 pretraining의 다양한 부분을 비교 & 연구해 보았다. 이 연구들을 종합해서 RoBERTa라는 방식을 제안한다. 
  • RoBERTa는 1) dynamic masking을 사용하고, 2) NSP Loss를 제거한 Full-sentences를 사용하고, 3) Large mini-batches를 사용한다. 또한, 4) byte-level의 BPE을 사용한다. 
  • 추가적으로 이전 연구들에서 중요하다고 인지하지 못했던 1) pretrainind 과정에서 사용되는 데이터, 2) training pass의 개수에 대해 탐구해 봤다.

 

  • 결과 
    • 앞서 분석한 요소를 다 넣은 RoBERTa가 기존에 비해 성능이 좋다. (BERT_large VS RoBERTa)
    • 추가 데이터셋을 넣었을 때, 성능이 더 좋아진다. (additional data)
    • pretraining 과정이 길수록 성능이 향상된다. (pretrain longer, pretrain even longer)

Reference

RoBERTa: A Robustly Optimized BERT Pretraining Approach, Yinhan Liu and Myle Ott and Naman Goyal and Jingfei Du and Mandar Joshi and Danqi Chen and Omer Levy and Mike Lewis and Luke Zettlemoyer and Veselin Stoyanov (arxiv:1907.11692.)


 

총평

  • BERT 등장 이래로, 참신한 모델링을 짜는 것보다 데이터 엔지니어링을 어떻게 할 것인지가 중요해진 흐름을 반영한 논문인 것 같다.
  • 개인적으로 이렇게 다양한 실험을 할 수 있는 환경이 부럽기도 하고, BERT를 재현하고 실험한 저자들이 대단하다는 생각이 든다. 

+ Recent posts