Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기
NLP

[NLP] BERT : Pre-training of Deep Bidirectional Transformers forLanguage Understanding 논문 리뷰 2

by Tiabet 2025. 3. 14.

이번 포스팅은 지난 포스팅에서 다루지 못한 BERT의 Pre-train 및 파인튜닝 Approach를 다뤄보도록 하겠다.

 

https://tiabet0929.tistory.com/90

 

[NLP] BERT : Pre-training of Deep Bidirectional Transformers forLanguage Understanding 논문 리뷰 1

이번 포스팅에선 BERT를 리뷰해보려고 한다. 워낙 유명한 모델이고 또 전세계적으로 많은 분들이 잘 정리해주신 게 많기 때문에, 나는 내가 잘 몰랐던 부분을 중점적으로 정리해보려고 한다.  ht

tiabet0929.tistory.com

 

글을 시작하기에 앞서 최근 내가 여러 모델들의 논문을 읽으면서, 후대에 공부를 시작한 사람으로서 깨달은 점을 적어보려고 한다.

 

현대(최소 2024년, 아마도 ChatGPT가 등장한 2023년 이후) LLM들은 전부 Transformer의 Decoder 아키텍처만을 사용한 Auto-Regressive 방식으로 학습되고, 사용자가 사용 시 여러 Task를 수행할 수 있다. 그 이유는 수많은 방식을 연구한 끝에 이 방식이 제일 좋다고 결론이 났기 때문이다. OpenAI는 GPT1 이후 2,3을 통해 괴랄한 성능을 보이는 GPT를 선보였고, 이 때문에 그동안 연구되던 다른 모든 방식들은 LLM의 트렌드가 생성으로 옮겨가면서 묻혀버렸다. BERT류의 모델도 마찬가지고.

 

하지만 OpenAI의 방식이 가장 옳았다고 판단하는 건 후대의 영역이고, 당시엔 뭐가 제일 좋은 지 일일이 다 해보는 수밖엔 없었을 것이 당연하다. 앞으로 소개할 BERT의 선 Pre-train 후 Fine-tuning, 그리고 사용한 모든 기법들 모두 지금은 사용되진 않는다는 것을 감안(물론 특정 Task에선 BERT같은 모델들을 파인튜닝해서 사용하는 것이 가능)하고, 당대의 지성들이 어떤 방식으로 무엇을 연구했는지 알아보는 방식으로 공부하면 좋을 것 같다.

Pretraining BERT

이제 BERT가 사용한 Pre-train 방식이 무엇인지 살펴보자. BERT는 총 두 가지의 Pre-train 방법을 합쳐서 사용했다. 

 

MLM (Masked Language Modeling)

BERT의 가장 큰 Contribution이라고 볼 수 있는 MLM이다. 간단하게 설명하자면 문장의 단어를 [MASK] 토큰으로 가려버리는 것이다.

원래 문장:
"자연어 처리는 인공지능 분야에서 중요한 연구 주제 중 하나이다."

MLM 적용 후:
"자연어 처리는 [MASK] 분야에서 중요한 연구 주제 중 하나이다."

 

이렇게 단어를 랜덤하게 [MASK] 해버리고, BERT는 훈련 과정에서 이 [MASK] 토큰을 예측하도록 학습하게 된다. 이 Pre-train 방법이 가장 큰 Contribution이라고 하는 이유는 뒤에 나오는 NSP는 성능 발전에 큰 영향이 없다는 연구들도 있어서 버리고 진행하는 경우도 많았지만, MLM처럼 토큰을 가리거나 삭제하는 방법은 정말 수많은 모델들이 차용한 방식이다. BERT의 인용수가 이렇게 높은 것도 다 이 방법때문인 것 같다.

 

그리고 BERT의 B가 의미한 Bidirectoinal, 즉 양방향성도 이 MLM으로부터 나온다. 트랜스포머 인코더는 원래 디코더와 달리 Masked Multi-head Attention을 사용하지 않아서 처음부터 문장의 시작부터 끝을 다 보고 학습한다. BERT의 저자들은 이런 방식보다 ELMo처럼 양방향 문맥을 다 학습하는 것이 효과적이라고 파악했고, 고민한 끝에 이런 방법론을 제시한 것으로 보인다. ELMo처럼 양방향으로 모델을 쌓는 것이 아닌데 왜 양방향이라고 하냐면, 결국 모델은 MASK 토큰을 예측하기 위해 문장의 앞과 뒤를 모두 참고하기 때문. GPT 같은 방식은 left-to-right, 즉 왼쪽을 보고 오른쪽을 예측하는 방법이다. 인코더층을 겹겹히 쌓지 않고도 데이터셋을 조작한 끝에 양방향성을 구현한 것이다.

 

여담으로 이 MLM은 고전적인 언어 평가 능력 시험인 Cloze Task에서 영감을 얻었다고 한다.

https://en.wikipedia.org/wiki/Cloze_test

 

Cloze test - Wikipedia

From Wikipedia, the free encyclopedia "Fill-in-the-blank" language learning technique A student dragging terms on a smartboard to fill cloze text A cloze test (also cloze deletion test or occlusion test) is an exercise, test, or assessment in which a porti

en.wikipedia.org

 

추가적으로 이 MASK 토큰은 파인튜닝 단계에서는 당연히 사용되지 않는데, 저자들은 이 점을 충완하기 위하여 학습 데이터셋의 전체 토큰의 15%를 MASK 토큰으로 바꾸되, 15% 중 10%는 MASK 토큰이 아닌 아예 랜덤한 단어로, 다른 10%는 MASK 씌우지 않고 원래 단어로 둔다고 했다. 단 랜덤한 경우던 원래 단어인 경우던, MASK 토큰을 예측하는 것처럼 이쪽도 label로 지정된 위치에 대해선 예측을 하긴 해야한다.

NSP (Next Sentence Prediction)

이전 포스팅에서 BERT의 Input은 문장 맨 앞의 [CLS] 토큰과 두 문장 사이의 [SEP] 토큰으로 구성된다고 말했다.

NSP는 이 두 문장이 서로 이어지는지, 이어지지 않는지 판단하는 목적을 갖고 있다. 저자들은 Pre-train 데이터 중 50%는 두 문장이 서로 이어지게, 나머지 반은 이어지지 않도록 데이터셋을 구성했다. 그리고 이 두 문장이 서로 이어지는지 판단하는 것은 [CLS] 토큰으로 수행한다. 전 포스팅에서도 언급했지만, [CLS] 토큰은 파인튜닝 단계에서도 많은 목적으로 사용된다. NSP에서 [CLS] 토큰의 Final Hidden State는 Linear Layer를 거쳐서 이 두 문장이 이어지는지, 그렇지 않은지 값을 내놓고 훈련하게 된다. (MLM의 [MASK] 토큰 예측 및 학습도 마찬가지로 Linear Layer를 거친다.)

 

이러한 방법은 GLUE 벤치마크 중 QA나 NLI(두 문장의 관계 파악 task) 등에서 효과를 노리고자 채택된 것 같다.

 

 

Fine-tuning

이땐 선 Pre-trian, 후 Fine-tuning으로 각 벤치마크의 성능지표를 높이는 것이 굉장히 중요했다. (물론 벤치마크 성능은 지금도 중요하다.) 

 

BERT는 ELMo같은 인코더 모델로써, 여러 태스크를 한 번에 수행하는 능력은 없고 Task에 맞는 파인튜닝 방식이 따로 존재한다.

GLUE와 SQuAD 데이터셋에 파인튜닝한 예시를 보여준다. sequence length를 n이라고 했을 때, nd의 행렬이 아웃풋으로 나오게 되는데 이 뒤에 dd 크기의 Linear Layer가 있고, 빨간색 화살표로 된 부분이 유의미하게 Linear Layer에 들어가는 토큰이라고 생각하면 된다. 

 

BERT가 진행한 파인튜닝은 크게 이미지처럼 4가지 Task로 분류 가능하다. 이때 문장 전체 단계의 Task는 1) NLI 같은 두 문장 사이의 관계 파악 2) Sentiment Analysis 같은 단일 문장 분류 이다. 이런 Task에선 [CLS] 토큰만 Last Linear Layer를 통과한다. 토큰 레벨의 Task는 1) SQuAD 같은 질문에 대한 답변 찾기 2) 개체명 인식 (NER) 로 정리 가능하다. SQuAD Dataset은 우리가 지금 생각하는 질문 - 대답 QA가 아니라 질문에 대한 답을 Passage에서 찾는 Task이기 때문에, 각 토큰에 대해 이게 정답에 포함될 확률을 계산하여 답변의 Start와 End Token을 학습하는 식으로 진행되어 토큰 레벨의 Task이다. 

 

Experiments

실험 결과는 따로 정리할 필요는 없을 것 같고, 내가 봤을 때 중요한 인사이트가 담긴 부분만 정리해보겠다.

 

1) 모델 크기에 따른 성능 비교

 

저자들은 BASE 모델과 LARGE 모델, 두 크기의 BERT를 만들어 성능을 비교했다. 큰 차이는 없지만 벤치마크에서 LARGE 모델이 확실히 BASE 모델보다는 좋은 성능을 보이는 것을 확인할 수 있다. 모델이 클수록 성능이 좋다는 가정은 이후 연구들에서도 꾸준히 실험된 결과 명백한 사실로 드러났고, 그래서 GPU 열풍이 불어서 엔비디아는 세계 1위 기업이 됐다. 

 

2) 훈련 데이터셋

 

BERT의 훈련데이터셋은 BookCorpus와 영어 Wikipidea이다. 각각 800M과 2500M 단어라고 하는데, 후대의 연구에서 볼 땐 이는 너무 적다는 의견이 대다수다. BERT를 발전-개량시킨 대표적인 모델인 RoBERTa에서는 단어 수로는 모르겠으나 총 160GB의 학습데이터셋을 사용했다. GPT2 에서도 훨씬 많은 데이터를 수집한 뒤 정제하여 800만 문서로 된 총 40GB의 데이터로 학습을 시켰다. 보통 단어 한 개가 5~8바이트라고 하니, BERT가 사용한 3300M 단어는 총 대략 20GB 정도 되는 셈. 물론 지금은 또 달라져서 단순히 양만 중요한 건 아니다라고 주장하는 논문들도 많아졌고 양질로 소량만 있으면 된다는 연구도 많으나, 아무튼 BERT에서 사용한 Pre-train 데이터셋은 너무 작다는 시각이 존재한다. 다만, 당시의 GPU 상황으로 보면 이것도 적다고 하긴 어렵다. Pre-train 한 번에 16개의 TPU를 가져다 사용했음에도 4일이나 걸렸다고..

 

3) NSP의 존재 의의

BERT의 저자들은 NSP가 없을 때 성능이 많이 저하된다는 점을 어필, Pre-train에서 MLM과 NSP가 좋다고 말하고 있다. 후대의 연구에 의하면 이는 사실이 아니다. MLM은 인코더 모델에게 분명 좋은 방식이긴 하지만, RoBERTa는 NSP가 필요없다고 말하고 있다. 만약 RoBERTa 리뷰를 내가 쓴다면 거기서 더 자세하게 언급하고 싶지만 안 쓸 것 같아서 그냥 여기에 다 정리하자면, BERT가 나오고 몇몇 연구들에서 이 NSP에 존재 의미에 대해 의문을 제시했고, RoBERTa에서 대대적으로 실험을 돌린 결과 없는 게 더 낫다라는 결론이 나왔다.

RoBERTa 논문의 결과. without NSP loss가 결과가 더 좋은게 확인됨.

 

 

결론

논문의 저자들은 BERT의 훌륭함과 발전가능성을 언급하며 논문을 마친다. BERT가 Transformer와 더불어 몇 년간 NLP에 엄청난 영향을 미친 것은 맞다. 하지만 여태 생존한 GPT 계열과는 달리, BERT 계열은 생성을 못 한다는 이유로 사장되어 버렸다. AGI가 눈앞에 도래하는 마당에 고작 개체명 인식, 감정 분석 같은 거에 연구자들이 흥미를 느낄 리가 없는 것도 당연.