1. Abstract
■ 언어 모델(LM) 사전 훈련(pre-training) 방식은 상당한 성능 향상을 이끌었지만, 다양한 방식들을 서로 비교하기는 어렵다.
■ 그 이유는, ① 학습 과정에서 계산 비용이 많이 들고 ② 모델마다 다른 크기의 비공개 데이터셋을 사용한 경우가 있으며 ③ 하이퍼파라미터 선택이 최종 결과(모델 성능)에 큰 영향을 미치기 때문이다.
■ 저자들은 BERT 사전 훈련에 대한 재현 연구(replication study)를 통해, 여러 "주요 하이퍼파라미(key hyperparameter)"와 "훈련 데이터의 크기"가 미치는 영향을 측정했으며
■ 그 결과, BERT가 충분히 훈련되지 않았다(undertrained)는 점을 발견했다. BERT를 제대로 최적화된 방식으로 훈련시키니, 그 이후에 발표된 모든 모델의 성능에 필적하거나 능가할 수 있었다.
■ 이 논문에서 제안하는 최적의 모델은 GLUE, RACE, SQuAD에서 SOTA를 달성했는데, 이러한 결과들은 이전에 간과되었던 설계 선택(design choices)의 중요성을 부각시키며, 최근 보고된 성능 향상들의 근본적인 원인이 무엇인지에 대한 질문을 제기한다.
- 여기서 말하는 설계 선택이란 훈련 방식을 어떻게 설계할 것인지에 대한 선택을 의미
[1907.11692] RoBERTa: A Robustly Optimized BERT Pretraining Approach
RoBERTa: A Robustly Optimized BERT Pretraining Approach
Language model pretraining has led to significant performance gains but careful comparison between different approaches is challenging. Training is computationally expensive, often done on private datasets of different sizes, and, as we will show, hyperpar
arxiv.org
2. Introduction
■ ELMo, GPT, BERT, XLM, XLNet과 같은 방법들은 상당항 성능 향상을 보여주지만, 어떤 요소가 성능 향상에 크게 기여하는지 확인하기 어려울 수 있다.
■ 훈련에 계산 비용이 많이 들어 튜닝에 한계가 있고, 크기가 다른 비공개 훈련 데이터를 사용하여 모델의 개선 효과를 측정하기 어렵기 때문이다.
■ 이 논문에서는 하이퍼파라미터 튜닝과 훈련 데이터셋의 크기가 미치는 영향을 파악하고, BERT가 상당히 불충분하게 훈련되었다는 것을 발견했으며, BERT 이후의 모든 방법들의 성능에 필적하거나 능가할 수 있는 개선된 BERT 모델인 \( \text{RoBERTa} \)를 제안한다.
■ \( \text{RoBERTa} \)는 기존 BERT의 훈련 방식에서 다음과 같은 주요한 변경점을 적용하였다.
(1) 더 많은 데이터에 대해 더 큰 배치로 모델을 오래 훈련시키기
(2) 다음 문장 예측(NSP) 제거
(3) 더 긴 시퀀스로 훈련하기
(4) 훈련 데이터에 적용되는 마스킹 패턴을 동적으로 변경하기
■ 또한, 다른 비공개 데이터셋과 비슷한 크기의 대용량 데이터셋(CC-NEWS)을 수집하여 사용한다.
3. Background
■ 이 섹션에서는 BERT에 대한 백그라운드를 설명한다.
3.1 Setup
■ BERT는 \( x_1, \cdots, x_N \)과 \( y_1, \cdots, y_M \)같은 두 개의 세그먼트(segement)의 연결을 입력으로 사용했다.
- segement는 언어학적으로 자연스러운 문장(sentence)이 아닌 연속적인 텍스트의 임의의 범위이다.
■ 이 두 개의 세그먼트는 special token으로 구분되어 하나의 입력 시퀀스로 사용되었다.
■ \( M \)과 \( N \)은 \( M + N < T \)라는 제약 조건을 가지며, 여기서 \( T \)는 훈련 중 최대 시퀀스 길이를 제어하는 파라미터이다.
■ 모델은 먼저 대규모의 레이블이 없는 텍스트 말뭉치(corpus)에서 사전 훈련(pre-training)된 후, 특정 작업(end-task)의 레이블이 있는 데이터를 사용하여 파인튜닝(fine-tuning)한다.
3.2 Architecture
■ BERT는 트랜스포머 아키텍처(트랜스포머 인코더)를 사용한다. 이 논문에서도 L개의 레이어(layer)를 가진 트랜스포머 아키텍처를 사용한다. 각 인코더 블록은 A개의 셀프 어텐션 헤드와 H의 은닉 차원을 사용한다.
3.3 Training Objectives
■ BERT는 pre-training data로 BookCorpus와 English Wikipedia를 사용했으며, 사전 훈련 단계에서 두 가지 training objectives(MLM, NSP)를 학습하도록 설계되었다.
■ MLM task를 위해 입력 시퀀스에서 토큰들을 무작위로 선택하여 마스킹을 적용하였다.
■ 이 과정에서 80%/10%/10% mix 전략을 사용했으며, 이 전략은 선택된 토큰 중 80%는 [MASK} 토큰으로, 10%는 랜덤 토큰으로 대체하고, 나머지 10%는 그대로 유지하는 전략이었다.
■ 이는 학습 시, [MASK] 토큰에만 편향되는 것을 방지하고, 실제 관찰된 단어(또는 토큰) 쪽으로도 편향되도록 하기 위한 조치였다.
■ MLM의 학습 목표는 마스킹된 토큰을 예측하는 것이며, 이를 위해 cross entropy loss를 사용하였다.
■ 원래 BERT 구현에서는 데이터 전처리 과정에서 마스킹을 한 번만 수행하여, MLM을 위해 토큰을 무작위로 마스킹하고 다른 토큰으로 대체하는 과정은 학습 시작 시점에 한 번 수행된다. 이렇게 생성된 마스크(single static mask) 패턴으로 인해 모델은 특정 문장에 대해 항상 동일한 마스크 패턴만 보게 된다.
- 매 에폭마다 각 학습 인스턴스에 대해 동일한 마스크를 사용하는 것을 피하기 위해, input sequence에 10개의 서로 다른 마스크 버전을 만들어서 사용했다.
- 이를 통해 모델은 40 에폭 동안 특정 문장에 대해 10가지 다른 마스크를 보게 되므로, 동일한 특정 마스크를 4번 보게 된다.
- 즉, 여전히 마스크가 미리 결정되어 고정되어 있다. 40 에폭 동안 10가지 다른 마스크를 보더라도, 10가지 마스크 자체가 변하지 않기 때문이다.
- 이 문제에 대해 \( \text{RoBERTa} \)는 동적 마스킹(dynamic masking) 방법을 제안한다.
■ NSP는 두 개의 문장이 원본 텍스트에서 서로 이어지는지(IsNext) 아닌지(NotNext) 예측하는 이진 분류(binary classification)였으며, 손실 또한 이진 분류에 대한 손실이다.
■ IsNext example은 텍스트 말뭉치에서 연속적인 문장을 가져와서 생성된다. NotNext example은 서로 다른 문서에서 가져온 문장(세그먼트)를 짝지어 생성된다. IsNext example과 NotNext example은 동일한 확률로 샘플링된다.
■ 이러한 NSP는 문장 쌍 간의 "관계"에 대한 추론을 요구하는 자연어 추론(NLI)과 같은 downstream task의 성능을 향상시키기 위해 설계되었다.
3.4 Optimization
■ BERT는 Adam 옵티마이저를 사용하며, 다음과 같은 매개변수들을 사용하였다.
\( \beta_1 = 0.9, \; \beta_2 = 0.999, \; \varepsilon = 1e-6, \; L_2 \; \text{weight decay} = 0.01 \)
■ 학습률의 경우, 처음 10,000 step 동안 점진적으로 증가(warmup)하여 최고치인 1e-4까지 증가시킨 후, 선형적으로 감소(linearly deacyed)한다.
■ BERT는 모든 레이어와 어텐션 가중치(attention weights)에 0,1의 드롭아웃을 적용하고, GELU 활성화 함수를 사용하여 훈련한다.
# `attention_scores` = [B, N, F, T]
attention_scores = tf.matmul(query_layer, key_layer, transpose_b=True)
attention_scores = tf.multiply(attention_scores, 1.0 / math.sqrt(float(size_per_head)))
...,
# Normalize the attention scores to probabilities
# `attention_probs` = [B, N, F, T]
attention_probs = tf.nn.softmax(attention_scores)
# This is actually dropping out entire tokens to attend to, which might
# seem a bit unusual, but is taken from the original Transformer paper.
attention_probs = dropout(attention_probs, attention_probs_dropout_prob)
...,
# `context_layer` = [B, N, F, H]
context_layer = tf.matmul(attention_probs, value_layer)
bert/modeling.py at master · google-research/bert
bert/modeling.py at master · google-research/bert
TensorFlow code and pre-trained models for BERT. Contribute to google-research/bert development by creating an account on GitHub.
github.com
■ 모델은 1,000,000 업데이트(가중치 업데이트) 동안 사전 훈련되며, 각 미니 배치(mini batch)는 입력 시퀀스의 최대 길이 \( T = 512 \) 토큰인 \( B = 256 \)개의 시퀀스를 포함한다.
3.5 Data
■ BERT는 BOOKCORPUS와 영어 위키피디아를 합친 조합으로 훈련되며, 압축되지 않은 텍스트 기준으로 총 16GB이다.
4. Experimental Setup
■ 이 섹션에서는 BERT의 replication study를 위한 설정(setup)에 대해 설명한다.
4.1 Implementation
■ FAIRSEQ 프레임워크를 사용하여 BERT를 재구현하였으며, 섹션 2에 명시된 원래 BERT의 최적화 하이퍼파라미터를 따른다. 다만, 예외적으로 최고 학습률(peek learning rate)와 warmup steps 수는 각각의 설정에 따라 별도로 조정하였다.
■ 그리고 훈련이 Adam 엡실론 항(epsilon term)에 매우 민감하다는 것을 발견했으며, 어떤 경우에는 엡실론 항을 조정하여 더 나은 성능이나 향상된 안정성을 얻었다고 한다.
■ 또한, 큰 배치 크기로 훈련할 때, \( \beta_2 = 0.98 \)로 설정하는 것이 안정성을 향상시킨다는 것을 발견했다.
- 원래 BERT의 \( \beta_2 = 0.999 \)
■ 기존 BERT와 달리, 짧은 시퀀스를 무작위로 주입하지 않으며, 업데이트의 처음 90% 동안 줄어든 시퀀스 길이(128 토큰)로 훈련하지도 않습니다. \( \text{RoBERTa} \)에서는 시퀀스의 길이는 \( T = 512 \) 토큰으로 설정하여 사전 훈련한다.
- BERT 구현을 보면, short_seq_prob이라는 확률값을 통해 랜덤 값이 short_seq_prob 값보다 작으면 무작위 길이의 훈련 시퀀스를 생성하여 사용한다.
4.2 Data
■ BERT 스타일의 사전 훈련은 많은 양의 텍스트에 크게 의존한다. 데이터 크기를 늘리면 end-task의 성능이 향상된다는 점은 여러 선형 연구를 통해 입증되어 왔다.
■ 여러 연구에서 original BERT보다 더 크고 다양한 데이터셋으로 훈련을 시도했다. 그러나 이러한 추가 데이터셋 중 일부는 공개적으로 배포될 수 없는 데이터셋이다.
■ 그래서 저자들은 비교 실험을 위해 가능한 한 많은 데이터를 수집하였으며, 비교에 적합한 데이터의 전체적인 질과 양을 맞추는 데 중점을 두었다.
■ 다음과 같이 크기와 도메인이 다양한 영어 말뭉치들을 사용하였으며, 이는 압축되지 않은 텍스트 기준으로 총 160GB가 넘는다.
- (1) BOOKCORPUS + English WIKIPEDIA: 이는 original BERT에서 훈련에 사용된 데이터 (16GB)
- (2) CC-NEWS: CommonCrawl 뉴스 데이터셋의 영어 부분에서 수집한 데이터. (76GB)
-- 2016년 9월부터 2019년 2월 사이의 6,300만 개 영어 뉴스 기사를 포함
-- news-please라는 것을 이용해 필터링 후 76GB
- (3) OPENWEBTEXT: 레딧에서 최소 3개 이상의 추천을 받은 URL에서 추출한 웹 콘텐츠(web content) (38GB)
-- WebText 말뭉치를 오픈소스로 재현한 것
- (4) STORIES: Winograd schemas(일종의 추론 문제 형태)의 stroy-like 스타일과 일치하도록 필터링된 CommonCrawl 데이터의 subset 포함 (31GB)
4.3 Evaluation
■ 이전 연구들을 따라, 세 가지 벤치마크(GLUE, SQuAD, RACE)를 사용하여 평가한다.
4.3.1 GLUE(General Language Understanding Evaluation)
■ GLUE 벤치마크는 자연어 이해 시스템을 평가하기 위한 9개의 데이터셋 모음이다. task는 단일 문장 분류 또는 문장 쌍 분류로 구성된다.
■ Training Procedure Analysis 섹션에서, single-task 훈련 데이터(즉, multi-task 훈련이나 앙상블 없이)에 사전 훈련된 모델을 파인튜닝한 후, dev set에 대한 결과를 제시한다. 파인튜닝 과정은 기존 BERT 논문을 따른다.
- multi-task training data는 여러 task에 대한 example의 입력 및 출력으로 구성되며, 이는 single-task training data가 확장된 형태이다.
- 예를 들어 multi-task training data에는 요약, 리뷰, 객체 인식 등 다양한 task를 수행하도록 모델에 지시하는 example이 포함되어 있다.
4.3.2 SQuAD(Stanford Question Answering Dataset)
■ 스탠포드 질의응답 데이터셋(SQuAD)은 정답(answer)을 담고 있는 단락(paragraph)과 질문(question)을 제공한다. task는 단락의 문맥에서 정답에 해당되는 구간(span)을 추출하여 질문에 답하는 것이다.
■ 저자들은 두 가지 버전(V1.1과 V2.0)의 SQuAD에서 평가한다.
■ V1.1에는 문맥에 항상 답이 포함되어 있지만, V2.0에서는 일부 질문의 경우 제공된 문맥에서 답을 찾을 수 없어 V1.1보다 task가 더 어렵다.
■ V1.1의 경우 기존 BERT와 동일한 방식의 구간 예측(span prediction) 방법을 사용하며,
■ V2.0의 경우 질문에 답변할 수 있는지 여부를 예측하는 이진 분류기(binary classifier)를 추가하여, 분류 손실(classification loss)과 구간 예측에 대한 손실(span loss) 항을 합산하여 훈련한다.
■ 이때, 답변이 가능하다고 분류된 쌍에 대해서만 정답이 존재할 수 있는 구간의 인덱스를 예측한다.
- V2.0에는 주어진 질문에 대한 답이 없을 수도 있다. 그래서 먼저 모델이 질문에 답이 있는지 없는지 여부를 판단하고, 답이 있다면 그 답을 추출하므로 V1.1보다 task가 더 어렵다.
4.3.3 RACE(ReAding Comprehension from Examinations)
■ RACE는 28,000개 이상의 지문과 약 100,000개의 질문을 포함하는 영어 독해 데이터셋이다.
■ 각 지문에 여러 개의 질문이 연관되어 있다. 모든 질문에 대해 네 가지 선택지 중 하나의 정답을 고르는 것이 task이다.
- 하나의 긴 지문이 주어지고, 그 지문과 관련된 질문들이 있으며, 모든 질문은 4개의 선택지가 주어지며, 모델은 이 중 정답을 하나 골라야 한다.
■ 다른 독해 데이터셋보다 훨씬 긴 문맥을 가지고 있기 때문에 추론(reasoning)을 요구하는 질문의 비율이 매우 높다는 특징이 있다.
5. Training Procedure Analysis
■ 이 섹션은 BERT 모델을 성공적으로 사전 훈련(pretraining)하는 데 어떤 선택들이 중요한지 제시한다.
■ 모델 아키텍처는 \( \text{BERT}_{BASE} \)와 동일한 구성(\( L = 12, \; H = 768, \; A = 12, 110\text{M params} \)으로
모델을 훈련한다.
5.1 Static vs. Dynamic Masking
■ BERT의 핵심 중 하나는 토큰을 무작위로 마스킹하고 예측하는 방식이다.
■ 기존 BERT 구현에서는 데이터 전처리 중에 마스킹을 한 번만 수행하여 하나의 정적 마스크(static mask)를 생성했다.
■ 매 에폭(epoch)마다 각 훈련 인스턴스에 동일한 마스크를 사용하는 것을 피하기 위해, 훈련 전 미리 훈련 데이터를 10번 복제하여 각 시퀀스가 40 에폭의 훈련 동안 10가지 다른 방식으로 마스킹되도록 했다.
■ 이는 각 훈련 시퀀스가 훈련 중에 동일한 마스크로 모델에 4번 보여지게 됨을 의미한다. 즉, 약간의 다양성은 주지만 모델은 여전히 동일한 마스크 패턴을 학습하게 된다.
■ 논문에서는 이 방법과 동적 마스킹(dynamic masking)을 비교한다. 동적 마스킹에서는 모델에 시퀀스를 입력할 때마다 마스킹 패턴을 생성한다. 즉, 모델 입장에서는 매번 다른 마스킹 패턴을 학습하는 것이다.
■ 이는 더 많은 steps로 훈련하거나 더 큰 데이터셋을 사용할 때 중요해진다고 한다.
■ Table 1은 \( \text{BERT}_{BASE} \)의 결과와 동적 마스킹을 사용하여 재구현한 결과를 나타낸다.
■ 정적 마스킹 적용 시, 원래 BERT 모델과 유사한 성능을 보였으며, 동적 마스킹은 정적 마스킹과 비슷하거나 약간 더 나은 성능을 보였다.
■ 이러한 결과와 동적 마스킹의 효율성을 고려하여, 동적 마스킹을 채택하였다.
- 기존 BERT에서는 데이터를 10배 복제하지만 동일한 마스킹 패턴이 생기므로,
- 데이터를 복제할 필요 없이, 훈련 시에 마스크를 생성하는 동적 마스킹에 비해 기존 BERT의 정적 마스킹은 비효율적이다.
- 특히, 데이터셋이 매우 클 경우 이 차이는 더욱 커지게 될 것이다.
5.2 Model Input Format and Next Sentence Prediction
■ 기존 BERT는 문서(document)에서 두 개의 세그먼트(segment) 연결을 입력으로 사용하며, 두 개의 세그먼트를 연결할 때, 50% 확률로 동일한 문서에서 연속적으로 샘플링되거나 서로 다른 문서에서 샘플링 된다.
■ 또한, 기존의 BERT는 MLM 손실(loss) 외에도 연결된 세그먼트들이 동일한 문서에서 왔는지, 아니면 서로 다른 문서에서 왔는지를 예측하는 보조(auxiliary)의 loss인 NSP loss가 있다. MLM loss와 NSP loss 항을 활용하여 모델을 훈련한다.
■ NSP는 자연어 추론과 같이 문장 쌍 간의 추론을 요구하는 downstream task의 성능을 향상시키기 위해 고안되었다.
■ NSP 손실은 기존 BERT 모델 훈련에 중요한 요소로 가정되었다. BERT 논문에서는 NSP를 제거하면 QNLI, MNLI, SQuAD 1.1에서 성능 저하가 발생한다고 하였다.
■ 그러나 BERT 논문 이후, 일부 연구에서는 NSP 손실의 필요성에 대한 의문이 제기됨에 따라, \( \text{RoBERTa} \) 논문에서는 이러한 차이(NSP 필요하다 vs 필요하지 않다)를 확인하기 위해 다음과 같은 4가지 훈련 방식(format)을 설정하여 비교하였다.
- (1) SEGMENT-PAIR+NSP
- 이 방식은 원래 BERT의 방식이다.
- 원래 BERT에서 사용된 기존 입력 형식(segment pair)을 따르며 NSP loss를 사용한다.
- 각 입력은 한 쌍의 세그먼트로 구성되며, 각 세그먼트는 여러 개의 자연스러운 문장을 포함할 수 있지만, 결합했을 때 총 길이는 512 토큰 미만이어야 한다.
- (2) SENTENCE-PAIR+NSP
- SEGMENT-PAIR + NSP의 입력 형식과 다르게, 입력은 한 쌍의 자연스러운 문장으로 구성되며, 이는 한 문서의 연속된 부분에서 샘플링되거나 별개의 문서에서 샘플링된다.
- 이러한 입력은 512 토큰보다 짧기 때문에 총 토큰 수가 SEGMENT-PAIR+NSP와 비슷한 수의 토큰 개수로 훈련될 수 있도록 배치 크기를 늘린다.
- NSP loss를 사용한다.
- (3) FULL-SENTENCES
- 각 입력은 하나 이상의 문서에서 연속적으로 샘플링된 전체 문장들(full sentences)로 채워지며, 총 길이가 최대 512 토큰이 되도록 한다.
- 이때, 입력은 문서의 경계를 넘어 서로 다른 문서에서 추출될 수 있다.
-- 만약, 현재 문서의 내용을 모두 사용했는데 길이가 512보다 짧다면, 다음 문서에서 입력을 채운다.
- 한 문서의 끝에 도달하면, 다음 문서에서 문장 샘플링을 시작하고 문서 사이에 추가적인 구분자 토큰을 추가한다.
- NSP loss는 제거한다.
- (4) DOC-SENTENCES
- 입력은 FULL-SENTENCES와 유사하게 구성되지만, 입력을 구성하기 위한 추출 범위는 문서 경계를 넘지 않도록 제한한다.
- 문서 끝 근처에서 샘플링된 입력은 512 토큰보다 짧을 수 있으므로, FULL-SENTENCES와 유사한 총 토큰 수를 달성하기 위해 배치 크기를 늘린다.
- NSP loss는 제거한다.
- 이 방법도 NSP를 제거하였으며, FULL-SENTENCES와의 차이점은 문서 간 혼합 여부이다.
■ 이 네 가지 방식의 결과는 아래 Table 2에서 확인할 수 있다.
■ 먼저, 기존 BERT의 입력 형식인 SEGMENT-PAIR와 단일 문장을 사용한 SENTENCE-PAIR 형식을 비교한 결과, SENTENCE-PAIR 형식을 사용할 경우 모든 task에서 기존 방식에 비해 성능 저하가 발생한 것을 확인할 수 있다.
■ SENTENCE-PAIR 형식은 단일 문장으로 만들어진 것이다. 즉, 단일 문장을 사용하는 것이 downstream task의 성능을 저하시키는 것으로 나타났는데, 이는 모델이 장거리 의존성(long-range dependencies)을 학습할 수 없기 때문이라고 추정하였다.
- 장거리 의존성(또는 장기 의존성)이란 먼 위치에 있든 단어/구문 간의 의존 관계를 의미한다.
-- 예를 들어, "철수는 학교에 갔다. ~~~~~. 그는 거기서 영희를 만났다."에서
-- '철수는 학교에 갔다.'라는 문장과 '그는 거기서 영희를 만났다.'라는 문장이 서로 멀리 떨어져 있는 문장이라고 하자.
-- 단어 '그'가 단어 '철수'를 가리키는 것을 이해하려면 두 문장을 함께 봐야 한다.
- 하지만 SENTENCE-PAIR에 입력 형식으로 사용되는 단일 문장들은 문서의 연속된 부분에서 샘플링되거나 별개의 문서에서 샘플링되기 때문에 512 토큰보다 짧다고 하였다.
-- 그러므로 이 예시처럼 서로 멀리 떨어진 문장 간의 긴밀한 문맥 연결을 포착하기 어렵다.
■ 다음으로, NSP loss 없이 훈련하고 단일 문서의 긴 텍스트 블록으로 훈련하는 DOC-SENTENCES 방식과 비교하면, SQuAD task에서 \( \text{BERT}_{BASE} \)보다 성능이 뛰어난 것을 확인할 수 있다.
■ 나머지 task들의 결과를 비교하면, 기존 BERT 논문과 대조적으로 NSP loss를 제거하는 것이 downstream task 성능을 약간 향상시키거나 비슷하게 유지되는 것을 확인할 수 있다.
■ 그러나 DOC-SENTENCES 방식은 시퀀스를 단일 문서에서 가져오도록 제한되어 있어 문서 끝 근처에서 샘플링된 시퀀스의 길이는 최대 시퀀스 길이와 다를 수 있다. 그러므로 가변적인 배치 크기를 유발할 수 있다는 문제가 있다.
■ 그래서 저자들은 관련 연구와 비교를 위해, 이후 실험에서는 배치 크기를 일정하게 유지할 수 있는 FULL-SENTENCES를 사용한다.
5.3 Training with large batches
■ Neural Machine Translation 분야의 기존 연구들은 학습률(learning rate)을 적절히 증가시키면, 매우 큰 미니 배치로 훈련하는 것이 최적화 속도와 end-task 성능을 모두 향상시킬 수 있음을 보여주었다.
■ 또한, 최근 연구에서는 BERT 역시 큰 배치 크기 학습에 적합하다는 것을 보여주었다.
■ BERT 논문에서는 \( \text{BERT}_{BASE} \)를 배치 크기 256으로 1M 스텝 동안 학습시켰다.
- 기존 BERT: 256(배치 크기) \( \times \) 1,000,000 = 256,000,000이다.
■ 저자들은 2K 배치 크기로 125K 스텝 동안 훈련, 8K 배치 크기로 31K 스텝 돟안 훈련. 이런 식으로 배치 크기를 늘려, 모델이 학습 과정에서 보는 총 데이터 양을 기존 BERT와 동일하게 맞추었다.
- 이렇게 모델이 학습 과정에서 보는 총 데이터 양을 기존 BERT와 맞춰 총 계산 비용은 기존 BERT와 거의 같게 유지하면서, 배치 크기 변화가 학습에 미치는 영향을 확인하였다.
■ Table 3.을 보면, 큰 배치 크기로 학습하는 것이 Masked LM의 퍼플렉시티와 end-task의 정확도를 모두 향상시키는 것을 볼 수 있다.
■ 그러나 배치 크기 8K의 결과를 보면, 오히려 성능 향상이 제한되는 것을 볼 수 있다. 지나치게 큰 배치 크기는 학습 효율에 한계가 있는 것으로 보인다.
5.4 Text Encoding
■ BPE(Byte-Pair Encoding)는 문자(또는 글자) 수준(character-level)과 단어 수준(word-level) 표현 방식 사이의 혼합 방식으로서, 완전한 단어 대신,
■ 학습 코퍼스(training corpus)에서 자주 등장하는 문자 쌍을 반복적으로 병합하여 추출된 서브워드(subword) 단위를 사용한다. 이때의 단어 집합(vocabulary) 크기는 보통 10K에서 100k 개의 서브워드 단위로 구성된다.
■ 그러나 크고 다양한 코퍼스를 모델링할 때는, 유니코드 문자 자체가 단어 집합에서 상당 부분을 차지할 수 있다.
■ 단어 집합의 크기는 임베딩 행렬의 크기를 결정하기 때문에 중요한 요소이다. 예를 들어, 임베딩 차원이 128이고 단어 집합에 등록된 토큰 개수가 10,000이라면, 128 X 10000 크기의 임베딩 행렬이 필요하다.
■ 만약, 유니코드에 포함된 모든 문자를 토큰으로 사용한다면, 그에 따라 매우 큰 크기의 임베딩 행렬이 필요하게 된다.
■ gpt-2 논문에서 기본 서브워드 단위로 유니코드 문자 대신 바이트(byte)를 사용하는 BPE의 구현 방식을 제안했다.
Tokenization 방법론들에 대한 쉽고 직관적인 이해
NLP에서 BPE, 워드피스, 유니그램 등 다양한 토크나이제이션 방법을 이해하고 적용하세요.
medium.com
■ 바이트 단위를 사용하면, 어떤 입력 텍스트(이모티콘 등)라도 unknown 토큰을 만들지 않고 인코딩할 수 있으며(OOV 제거), 적당한 크기의 서브워드 단어 집합을 학습하는 것이 가능해진다.
■ 기존 BERT는 휴리스틱한 토큰화 규칙으로 입력을 전처리한 후, 30K 크기의 문자 수준 BPE 단어 집합을 학습하여 사용하였다.
■ 저자들은 byte-level BPE 방식을 사용하면, 50K 개의 서브워드를 포함하는 byte-level BPE 단어 집합으로 BERT를 학습하는 것을 고려하였다.
■ 단어 집합의 크기가 50K로 더 커지고, 성능도 약간 감소하지만, 입력에 대한 어떠한 추가적인 전처리나 토큰화 과정 없이 사용할 수 있는 범용적인 인코딩 방식이라는 이점이 있었기 때문이다.
■ 저자들은 초기 실험 결과, byte-level BPE가 일부 task에서 약간 더 낮은 성능을 보이기도 했지만, byte-level BPE 방식의 이점이 약간의 성능 저하를 상쇄하고도 남는다고 믿으며, 이후 모든 실험에서 이 인코딩 방식을 사용했다.
- byte-level BPE 방식을 사용할 경우, BERT_BASE와 BERT_LARGE 모델에 각각 약 15M, 20M 개의 파라미터가 추가된다고 한다.
■ 이렇게 \( \text{RoBERTa} \)는 기존 BERT의 텍스트 처리 방식(WordPiece)을 버리고, GPT-2의 Byte-level BPE 방식을 채택하였다. 이로 인해 '알 수 없는(unk)' 토큰 문제가 해결되어 모델이 어떤 종류의 텍스트에도 대응할 수 있는 강건함을 갖추게 되었다.
6. RoBERTa
■ 이 섹션에서는 Training Procedure Analysis에서 제안한 "end-task 성능을 향상시키는 BERT 사전 훈련 과정에 대한
개선 사항들(dynamic masking, FULL-SENTENCES without NSP loss, large mini-batches, a larger byte-level BPE)"을
종합하여 세 가지 벤치마크(GLUE, SQuAD, RACE)에 사용한 다음, 이 개선 사항들의 결합된 영향을 평가한다.
■ 저자들은 이를 \( \text{RoBERTa} \)(Robustly optimized BERT approach)라고 명명하였다.
■ 또한, "사전 훈련(pre-training)에 사용되는 데이터", "데이터를 학습한 횟수". 이 두 가지 요소에 대해 \( \text{RoBERTa} \)와 다른 모델들을 비교한다.
- XLNet 아키텍처는 기존 BERT보다 거의 10배나 더 많은 데이터로 사전 학습되었으며, 8배 더 큰 배치 크기를 사용하면서 최적화를 통해 사전 학습 과정에 기존 BERT보다 4배나 더 많은 시퀀스를 사용하였다.
■ \( \text{RoBERTa} \)는 \( \text{BERT}_{LARGE} \) 아키텍처(\( L = 24, H = 1024, A = 16, 355\text{M parameters} \))를 기반으로, BERT 논문에서 사용된 것과 유사한 BOOKCORPUS와 WIKIPEDIA 데이터셋을 사용하여 100K 스텝 동안RoBERT를 사전 훈련한다. 이에 대한 결과는 아래의 Table 4.와 같다.
■ Table 4.에서 RoBERTa with BOOKS + WIKI는 기존 \( \text{BERT}_{LARGE} \)와 동일하게 적용했을 때의 결과이다. 기존 \( \text{BERT}_{LARGE} \)의 결과보다 큰 성능 향샹을 보여준다. 이를 통해 design choices의 중요하다는 것을 확인할 수 있다.
■ 그다음, Experimental Setup의 Data 섹션에서 설명한 3개의 데이터셋을 추가한다. 이 통합된 데이터셋에 동일한 학습 스텝(100K0으로 \( \text{RoBERTa} \)를 사전 훈련한다. 결과를 보면, 모든 downstream task에서 성능이 향상되는 것을 볼 수 있다.
■ 추가된 데이터셋은 크기와 도메인이 다른 데이터셋이었다. 즉, RoBERTa with BOOKS + WIKI + additional data의 결과는 사전 훈련에서 데이터의 크기와 다양성이 중요하다는 것을 보여준다.
- RoBERTa with BOOKS + WIKI에 사용된 텍스트 데이터의 크기는 16GB
- RoBERTa with BOOKS + WIKI + additional data에 사용된 텍스트 데이터의 크기는 160GB이다.
■ 마지막 단계인 RoBERTa with BOOKS + WIKI + additional data + pretrain longer에서는 \( \text{RoBERTa} \)를 훨씬 더 오래 학습시켰다. 사전 훈련의 스텝 수를 100K에서 300K로, 그리고 다시 300K에서 500K로 늘렸다.
■ 그 결과, downstream task의 성능이 다시 한번 크게 향상되는 것을 볼 수 있다. 특히, 300K와 500K 스텝으로 훈련시킨 모델 모두 대부분의 task에서 \( \text{XLNet}_{LARGE} \)를 능가한 것을 볼 수 있다.
■ 논문에 따르면, 가장 오래 학습(500K)시킨 모델이 데이터에 과적합되는 현상이 보이지 않았으므로, 추가적인 학습을 통해 더 성능이 좋아질 가능성이 있다고 한다.
■ 이렇게 학습시킨(500K) \( \text{RoBERTa} \) 모델을 GLUE, SQuAD, RACE에서 평가한다.
■ 저자들이 선택한 사전 훈련과 파인튜닝의 하이퍼파라미터의 범위는 다음과 같다.
6.1 GLUE Results
■ 저자들은 두 가지 파인튜닝 설정(single-task & dev set, 앙상블 기법 & test set) GLUE에서 \( \text{RoBERTa} \)를 평가한다.
■ 첫 번째 설정(single task, dev)에서는 GLUE의 각 task마다 주어지는 학습 데이터만 사용하여 각 task에 대해 \( \text{RoBERTa} \)를 개별적으로 파인튜닝한다.
■ 각 task에 대해 하이퍼파라미터는 배치 크기는 {16, 32} 중에서, 학습률은 {1e-5, 2e-5, 3e-5} 중에서 선택한다.
■ 학습 초기 6%의 스텝 동안은 학습률을 선형적으로 증가시키는 warmup을 적용하고, 이후 0까지 선형적으로 감소시킨다.
■ 10 에폭(epoch) 동안 파인 튜닝을 진행하며, dev set에서의 평가 지표를 기준으로 조기 종료(early stopping)을 수행한다. 나머지 하이퍼파라미터는 사전 훈련 때와 동일하게 유지한다.
■ 이 설정에서는 모델 앙상블 없이 5번의 실행 결과 중 medain값을 결과로 제시했다.
■ 두 번째 설정(ensembles, test)에서는 GLUE 리더보드에 제출된 multi-task 파인 튜닝에 의존하는 다른 접근법들과는 달리 single-task 파인튜닝을 수행한다.
■ RTE, SST, MRPC task의 경우, 사전 훈련된 \( \text{RoBERTa} \)에서 바로 파인 튜닝을 시작하지 않고, MNLI single task 모델에서부터 파인튜닝된 모델을 가져와서 다시 파인튜닝하는 것이 성능에 더 도움이 된다는 것을 발견했다.
■ 그리고 조금 더 넓은 범위의 하이퍼파라미터를 탐색했으며, task마다 5개에서 7개의 모델을 앙상블했다고 한다.
■ 두 가지 파인튜닝 설정에 대한 결과는 아래의 Table 5.에 기술되어 있다.
■ 첫 번째 설정에서 \( \text{RoBERTa} \)는 9개의 모든 GLUE task의 dev set에서 SOTA를 달성하였다.
■ \( \text{RoBERTa} \)는 \( \text{BERT}_{LARGE} \)와 동일한 아키텍처와 masked language modeling의 사전 훈련 목적 함수를 사용했음에도 불구하고, \( \text{BERT}_{LARGE} \), \( \text{XLNet}_{LARGE} \)보다 더 우수한 성능을 나타낸다.
■ 이 결과는 5번의 실행 결과의 중앙값(medain)이기 때문에, 단순한 운에 따른 결과라고 보기는 어렵다. 즉, \( \text{RoBERTa} \) 모델 자체의 순수한 성능이 \( \text{BERT}_{LARGE} \)와 \( \text{XLNet}_{LARGE} \)를 능가한다고 볼 수 있다.
■ 두 번째 설정에서는 9개 중 4개 task에서 SOTA를 달성했으며, \( \text{RoBERTa} \)가 multi-task 파인튜닝에 의존하지 않았기 때문에, 저자들은 더 정교한 multi-task 파인튜닝 과정을 통해 이 결과를 더욱 향상시킬 수 있을 것으로 기대한다.
6.2 SQuAD Results
■ SQuAD의 경우 BERT와 XLNet은 SQuAD 학습 데이터에 추가로 질의응답(QA) 데이터셋을 추가하여 학습 데이터를 보강하였지만, \( \text{RoBERTa} \)에서는 오직 SQuAD 학습 데이터만 사용하여 RoBERTa를 파인튜닝한다.
■ 또한, XLNet에서는 파인튜닝 시, 계층별(layer-wise)로 학습률을 다르게 설정하는 기법을 사용했지만, \( \text{RoBERTa} \)는 모든 계층에 동일한 학습률을 사용한다.
■ SQuAD v1.1에 대해서는 BERT와 동일한 파인튜닝 절차를 따르며, SQuAD v2.0에 대해서는 주어진 질문에 답을 할 수 있는지 없는지를 추가로 분류한다.
■ 즉, classifier와 정답 구간을 예측하는 predictor를 함께 학습시켜 분류 손실(classification loss)과 구간 손실(span loss)을 합산하여 모델을 학습시킨다. 이에 대한 결과는 아래의 Table 6.과 같다.
■ 어떠한 추가 데이터를 사용하지 않고도, SQuAD v1.1 dev set에서 XLNet이 세운 SOTA 기록과 동등한 성능을 보이며, v2.0 dev set에서는 \( \text{RoBERTa} \)가 SOTA를 달성한 것을 확인할 수 있다.
6.3 RACE Results
■ RACE는 하나의 지문에 관련된 질문 그리고 네 개의 보기가 주어진다. 네 개의 보기 중 어느 것이 정답인지 분류하는 task이다.
■ 이 task를 위해 각 보기를 해당 질문 및 지문과 이어 붙이는 방식을 사용하였다. 그 후 만들어진 네 개의 시퀀스를 각각 인코딩하고, 그 결과로 나온 [CLS] representation을 완전 연결 계층(fully-connected layer)에 통과시켜 정답을 예측하였다.
■ 질문-보기 쌍이 128토큰보다 긴 경우 잘라내고, 지문도 잘라내어 전체 길이가 최대 512토큰이 되도록 하였다. 이에 대한 결과는 아래의 Table 7.과 같으며, middle-school, high-school 평가 모두에서 \( \text{BERT}_{LARGE} \), \( \text{XLNet}_{LARGE} \)를 능가하는 성능을 보였다.