기억의 기록(나의 기기)

[BERT] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 논문 리뷰 (기초부터 꼼꼼히) 본문

논문 리뷰

[BERT] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 논문 리뷰 (기초부터 꼼꼼히)

황경하 2025. 6. 22. 17:52
반응형

BERT: Pretraining of Deep Bidirectional Transformers for Language Understanding 

안녕하세요, 데이터과학 전공하고 있는 황경하입니다.

오늘은 저번에 Word Embedding을 배웠기 때문에 BERT 논문을 공부하며 Transformer에 대한 이해를 더 올려보겠습니다. BERT는 Transformer를 변형하여 만든 LLM 모델로 여러 언어 태스크에서 우수한 성능을 보였습니다.

 

* 리뷰할 논문: https://arxiv.org/abs/1810.04805

 

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

We introduce a new language representation model called BERT, which stands for Bidirectional Encoder Representations from Transformers. Unlike recent language representation models, BERT is designed to pre-train deep bidirectional representations from unla

arxiv.org

* 참고 자료: https://github.com/codertimo/BERT-pytorch

 

GitHub - codertimo/BERT-pytorch: Google AI 2018 BERT pytorch implementation

Google AI 2018 BERT pytorch implementation. Contribute to codertimo/BERT-pytorch development by creating an account on GitHub.

github.com

* 참고 자료(위 코드에 한국어 주석 추가): https://github.com/kyeongha-git/Study/tree/main/BERT-pytorch

 

Study/BERT-pytorch at main · kyeongha-git/Study

Paper Review and Implementation. Contribute to kyeongha-git/Study development by creating an account on GitHub.

github.com

 

* 해당 글에 첨부된 사진들은 모두 위 논문에서 발췌한 것임을 미리 밝힙니다.

* 해당 글에 설명은 논문을 기반으로 한 주관적 해석이므로 틀린 부분이 있다면, 댓글로 지적 부탁드립니다!


# Abstract

 

  • BERT는 deep bidirectional Transformer 기반의 언어 표현 모델이다.
  • 기존 언어 모델들은 좌→우 혹은 얕은 양방향 구조에 국한되어 있었으나,
    BERT는 완전한 양방향성을 갖춘 구조로 설계되었다.
  • 사전학습은 Masked Language Model(MLM)과 Next Sentence Prediction(NSP) 두 과제를 통해 이루어진다.
  • 다양한 NLP 태스크에 fine-tuning 방식으로 적용 가능하며 GLUE, SQuAD, SWAG 등에서 기존 최고 성능을 능가하였다.

# Introduction

최근 NLP 분야에서는 비지도 학습을 기반을 한 전이학습이 주목을 받고 있습니다. 그러나, 대부분의 모델은 대부분 단방향(GPT)이거나 Shallow bi-directional 한 구조(ELMO)로 만들어져 있습니다. BERT는 이 문제를 해결하고자 깊은 양방향 Transformer 인코더 구조로 설계되었습니다. 또한, 이렇게 사전학습된 BERT 모델은 여러 태스크에 적용될 때 같은 파라미터를 가지며 분류기 하나만 태스크에 맞게 설계하고 Fine-Tuning 한다면 SOTA 성능을 기록합니다.

 

아래 그림과 같이 E1, E2, .., E_N이 각 단어들이라고 한다면 BERT는 모든 단어들 간의 관계를 포함하여 T1, T2,... 의 결과를 생성합니다. 반면에 GPT는 이전 단어만 활용하여 좌 → 우로 진행되고, ELMo는 좌 → 우, 우 → 좌 모두 진행하고 마지막에 Concat하여 T1, T2,.. 결과를 생성합니다. ELMo도 어떻게 보면 양방향이지만, 이는 하나의 구조로 되어 깊게 학습하는 것이 아닌 따로 학습하고 합치는 것이므로 Shallow Bi-Directional이라고 표현합니다.

BERT vs GPT vs ELMo

 

 


# Related Work

BERT는 언어 표현 모델입니다. 즉, 분류 모델이 아니라 분류기에 들어가기 전에 각 단어들의 의미를 확장하고 이를 통해 분류할 수 있도록 단어의 표현을 바꾸어주는 모델입니다. 따라서, BERT 모델 뒤에는 태스크에 맞는 분류기가 필요합니다.

 

따라서, 논문에서는 이 분류 과정을 Feature-Based  방식과 Fine-Tuning 방식으로 나누는데 이 둘은 단순 "학습의 차이"에 있습니다. Feature-Based 방식은 사전 학습된 언어 표현 모델을 통해 단어의 벡터를 추출하고 이를 분류기에 넣어 분류합니다. 반면, Fine-Tuning 방식은 사전 학습된 언어 표현 모델 뒤에 분류기를 붙이고 Fine-Tuning 데이터로 미세 조정을 실시합니다. 즉, BERT 모델의 파라미터도 학습된다는 특징이 있습니다.

 

관련 연구는 아래와 같습니다.

ELMo는 LSTM 기반 양방향 표현 사용합니다. 단점은 feature-based로 task별 구조 설계 필요합니다.

GPT는 Transformer 기반 사전학습 + fine-tuning 구조지만, 단방향(좌→우) 구조입니다.

BERT는 두 모델의 장점을 결합하고, 완전한 양방향 구조 + fine-tuning 방식을 채택합니다.

 

우리는 여기서 왜 양방향 학습이 필요한지에 대해 의문점을 가질 필요가 있습니다. 기존 Transformer의 Decoder 구조는 아래와 같습니다.

Masked Multi-Head Attention이라는 layer가 존재합니다. 이는 모델이 현재 단어를 예측한다고 했을 때, 이전 단어를 보지 못하도록 마스킹하는 것입니다. GPT는 이런 Transformer의 Decoder 구조를 채택하였습니다. 실제로, 이런 구조를 가진 Transformer는 기계 번역에서 SOTA 성능을 보였으며 사실상 NLP 분야의 표준이 되었습니다.

 

하지만, 기계 번역 태스크가 아닌 질문응답 태스크를 생각해봅시다. 질문응답 태스크는 질문과 문단이 주어지며, 정답은 문단 안에 존재합니다. 모델은 주어진 문단에서 질문에 답변이 될만한 문장을 찾아 반환해야 합니다.

 

이 경우에도 좌 → 우로만 보는 것이 맞을까요? 올바른 답변을 하기 위해서는 두 문장을 모두 봐야 하며 앞 뒤 맥락정보를 모두 고려해야 합니다. 따라서, 마스킹이 포함된 디코더 구조는 적절치 않습니다. 이 경우에는 양쪽 맥락을 모두 볼 수 있도록 설계해야 합니다. 아래는 Transformer의 인코더 구조입니다.

 모든 문장의 정보를 파악하고 양쪽 맥락을 볼 수 있도록 하는 것은 Transformer의 인코더가 하는 일입니다. 이 안에서는 Multi-head Self-Attention을 통해 모든 단어 간의 맥락 정보를 각 단어에 주입합니다. 이를 통해 모든 단어의 정보를 포함시킬 수 있습니다. 이를 사용한다면 질문응답 태스크에서도 양쪽 맥락을 모두 파악하여 답변할 수 있을 것입니다. 따라서, BERT에서는 Transformer의 인코더를 채택하여 사용합니다.


# BERT

## Input Representation

입력 구조: 문장쌍 (문장 A, 문장 B가 결합된 형태)

임베딩: Token + Segment + Position Embedding

WordPiece Embedding 사용, max length = 512

 

Token Embedding에서는 언어로 되어 있는 정보를 벡터 형태로 변환합니다. 이를 위해 WordPiece Embedding을 사용합니다.

이후에는 [CLS] 토큰을 데이터 맨 앞에 삽입합니다.

 

Segment Embedding에서는 문장과 문장사이에 [SEP] 토큰을 삽입합니다. 또한, 각 토큰이 어느 문장에 속해있는 것인지에 대한 정보를 삽입합니다.

 

Position Embedding은 Transformer에서도 나온 개념으로, 각 단어가 몇 번째 단어인지에 대한 위치 정보를 주입합니다. 이를 통해, 동음이의어에 대해서도 정확한 정보를 주입할 수 있게 됩니다.

 

데이터: [CLS] 문장 A [SEP] 문장 B [SEP]


## Pre-training Tasks

BERT 모델은 두 가지로 사전학습됩니다. MLM을 통해 각 단어들의 정보를 양방향 문맥을 포함한 정보로 학습시킵니다. 또한, NSP를 통해 입력된 두 문장 사이의 관계를 학습하게 됩니다.

MLM (Masked Language Model)

  • 입력 시퀀스의 15%를 무작위로 마스킹
    • 80% → [MASK], 10% → 랜덤 단어, 10% → 원래 단어 유지
  • 마스킹된 위치의 원래 단어를 예측하는 방식
  • 양방향 문맥을 모두 사용해 예측 가능

이 과정에서 마스킹 되는 데이터의 양이 15%인데, 이를 더 키우면 어떻게 될까요? 예를 들어, 50%라고 해봅시다. 그러면, 모델은 50%의 정보를 가지고 50%를 예측해야 합니다. 당연히, 정확도는 줄어들 것이고 학습하는 데에도 더 오래 걸릴 것입니다. 그렇다면, 아예 줄여서 5% 라면요? 이 경우에는 95%의 정보로 5%를 예측합니다. 이 경우에는 과대적합될 확률이 높습니다. 예측해야 할 양이 적기에 모든 단어가 다른 단어들과의 정보를 학습하기도 전에 과대적합이 일어날 것입니다. 따라서 15%라는 적절한 수치로 선정합니다.

 

그러면, 왜 80%만 마스킹을 진행할까요? 결론부터 말하면, 이는 실험적으로 나온 수치입니다. 논문에서는 아래 그림과 같이 실험적으로 변경하며 성능을 비교하였습니다. 그 결과가 80%는 [MASK] 토큰으로, 10%는 그대로, 10%는 랜덤하게 다른 단어로 변경하는 것이 가장 좋은 성능을 보였습니다.

 

그래도, 우리는 몇 가지 이유를 찾을 수 있습니다. 15%를 모두 [MASK] 토큰으로 설정했다고 해봅시다. 그러면, 모델은 [MASK]가 있는 상황에 과대적합됩니다.

 

예를 들어, Transfer Learning 데이터가 "나는 [MASK]을 먹었다."라고 해봅시다. 그리고, Fine-Tuning 데이터는 "나는 밥을 먹었다,"라고 들어왔다고 해보죠. 그러면, 모델이 학습했던 데이터는 모두 [MASK]가 있었는데 처음으로 없는 문장을 본 것입니다. 이 경우는 학습해 본 경험이 없기에 성능이 떨어지게 됩니다. 즉, 입력 패턴의 다양성 부족으로 인해 다른 입력 패턴에 대해서는 잘 예측하지 못하는 것입니다.

 

따라서, [MASK] 토큰말고 다른 방향으로 마스킹이 필요한데, 노이즈의 견고성을 학습하기 위해 10%는 랜덤 하게 다른 단어로 변환하고, 10%는 그대로 유지하며 Fine-Tuning과 유사한 입력 구조를 학습하게 만들어 주어 모델이 [MASK] 토큰에만 의존하지 못하도록 하고, 일반화 성능을 올려줍니다.

 

NSP (Next Sentence Prediction)

 

  • 두 문장이 실제로 이어지는 문장쌍인지(IsNext) 또는 랜덤인지(NotNext)를 예측
  • [CLS] 토큰의 벡터를 기반으로 이진 분류 수행

입력 데이터는 [CLS] 문장 A [SEP] 문장 B [SEP] 구조로 되어 있습니다. 학습데이터를 구성할 때에는 50%는 문장 B로 넣어주고, 50%는 문장 D (실제로 다음 문장이 아닌 랜덤 하게 다른 문장을 넣음)로 대체하여 구성합니다.

 

이후, Transformer Encoder에 넣어 [CLS] 토큰을 학습하고 이를 Sigmoid 함수에 넣어 이진 분류를 진행합니다.

이를 통해, 모델은 두 문장 사이의 관계를 학습할 수 있습니다. 예를 들어, 문장 A 뒤에 문장 B가 오는 것이 맞다고 한다면, 문장 A와 문장 B의 각 토큰들이 가까운 의미 정보로 학습되고, 아니라고 한다면, 먼 정보로 학습됩니다.


## Fine-tuning Procedure

  • 사전학습된 BERT 본체는 모든 태스크에서 동일하게 사용
  • 태스크에 따라 출력 구조만 다르게 연결하고 end-to-end로 전체 모델을 fine-tuning
  • 문장 분류는 [CLS] 벡터 사용, QA/NER은 각 토큰 벡터 사용

이렇게 학습된 BERT 모델은 모든 태스크에서 같은 파라미터를 가지며 태스크에 따라 분류기를 붙이고 Fine-Tuning하여 사용합니다. 또한, 분류기에 들어가는 데이터는 태스크에 따라 달라질 수 있습니다.


# Experiments

GLUE Benchmark

  • 총 9개의 문장 수준 태스크 (MNLI, QNLI, SST-2, CoLA 등)
  • BERTBASE 및 BERTLARGE 모두 기존 SOTA 성능 초과

 

 

SQuAD v1.1

  • 질문 + 문단 입력 → 각 토큰에 대해 start/end 확률 예측
  • BERTLARGE: F1 93.2로 당시 최고 성능

 

SQuAD v2.0

  • 정답이 없는 경우도 포함
  • 답변 없음 = [CLS] 위치를 정답으로 예측
  • F1 83.1로 기존보다 5.1 향상

 

SWAG

  • 상식 기반의 문장 선택 (4지선다형)
  • BERTLARGE가 OpenAI GPT보다 8.3% 높은 정확도


# Ablation Studies

Pre-training Task Ablation

 

  • NSP 제거 → 문장 관계 태스크 성능 하락
  • LTR (좌 → 우)만 사용 → 전반적 성능 저하
  • BiLSTM 추가해도 BERT보다 못함

 

 

모델 크기 영향

 

  • 층 수, hidden size, head 수가 많을수록 성능 향상
  • MRPC처럼 작은 데이터에서도 성능 이점 존재

 

Feature-based와 Fine-tuning 비교

  • BERT는 feature-based 방식에서도 강력함
  • 마지막 4개 층을 concat하면 성능 높아짐
  • 그러나 여전히 fine-tuning 방식이 가장 강력

 


# Conclusion

BERT는 deep bidirectional 구조와 사전학습 방식을 통해 다양한 자연어 이해 태스크에 강력한 성능을 보입니다.

사전학습 시 MLM과 NSP 조합으로 문맥 및 문장 간 관계를 동시에 학습할 수 있는 특징이 있습니다. 동일한 구조를 다양한 태스크에 fine-tuning만으로 적용 가능하며, 이는 NLP에서 사전학습 기반 패러다임의 전환을 의미할 정도로 유의미한 결과입니다.

 

이후, 연구된 모델들은 입력 데이터의 max length를 높이는 방식으로 연구되었습니다.


마무리...

오늘은 BERT 논문에 대해 공부해 보았습니다. LLM 기초부터 공부하고 있는데, 쉽지가 않네요. 그래도 모두 파이팅입니다.

 

제 부족한 글이 여러분들의 공부에 도움이 되셨으면 좋겠습니다. 감사합니다 :)

 
반응형