주제: 4-1 BERT (Encoder + Masked Language Model Pretraining)
GPT 계열에 익숙하면 BERT도 그냥 또 다른 Transformer처럼 보일 수 있다. 하지만 BERT는 목적 자체가 다르다. 문장을 생성하는 데 최적화된 모델이 아니라, 문장 안에서 단어의 의미를 깊게 이해하는 데 최적화된 encoder 중심 모델이다.
문제 설정
기존 언어 모델(GPT 이전)은 대부분 단방향 언어 모델이었습니다.
예:
즉 이전 단어만 보고 다음 단어를 예측합니다.
하지만 자연어 이해(NLU)에서는 양방향 문맥이 중요합니다.
BERT는 이를 해결하기 위해 bidirectional Transformer Encoder를 사용합니다.
즉 BERT는 왼쪽 문맥만 보거나 오른쪽 문맥만 보는 대신, 문장 전체를 동시에 읽는다. 그래서 분류, 문장쌍 이해, 개체명 인식처럼 "이 문장이 무슨 뜻인가"를 해석하는 작업에서 강점을 보였다.
직관 비유
- 단방향 모델 -> 왼쪽 문맥만 읽음
- BERT -> 문장 전체를 동시에 읽음
즉 문장의 앞뒤 정보를 모두 활용합니다.
그림으로 먼저 잡기
1. BERT 구조
BERT는 Transformer Encoder stack으로 구성됩니다.
Input Tokens
↓
Embedding Layer
↓
Transformer Encoder × N
↓
Contextual Representation
각 Encoder는 다음 구조를 가집니다.
Self-Attention
↓
Feed Forward Network
수식
기호 의미
- X : 입력 토큰 임베딩
- H : contextual embedding
왜 필요한가
각 토큰이 문장 전체 문맥을 반영한 표현을 갖게 됩니다.
2. BERT 입력 구성
BERT 입력은 세 가지 embedding을 합쳐 생성됩니다.
기호 의미
- E_token : token embedding
- E_segment : sentence A/B 구분
- E_position : positional encoding
왜 필요한가
문장 구분과 위치 정보를 모델에 제공합니다.
3. Masked Language Model (MLM)
BERT의 핵심 pretraining 방법은 Masked Language Model입니다.
입력 문장에서 일부 단어를 가립니다.
예:
The cat sits on the [MASK]
모델 목표:
수식
기호 의미
- w_mask : 마스크된 단어
- context : 주변 단어
왜 필요한가
양방향 문맥을 이용해 단어 의미를 학습합니다.
주의점
전체 토큰의 약 15%만 mask합니다.
4. MLM Mask 전략
| 전략 | 확률 |
|---|---|
| [MASK] 토큰 | 80% |
| 랜덤 단어 | 10% |
| 그대로 유지 | 10% |
왜 필요한가
모델이 [MASK] 토큰에만 의존하지 않도록 합니다.
5. Next Sentence Prediction (NSP)
BERT는 또 하나의 pretraining task를 사용합니다.
Next Sentence Prediction
목표:
입력
[CLS] sentence A [SEP] sentence B [SEP]
출력
- IsNext
- NotNext
왜 필요한가
문장 간 관계를 학습합니다.
주의점
이후 모델(RoBERTa)은 NSP를 제거했습니다.
6. BERT Pretraining Loss
BERT는 두 loss를 함께 학습합니다.
기호 의미
- L_MLM : masked language modeling loss
- L_NSP : next sentence prediction loss
왜 필요한가
단어 의미와 문장 관계를 동시에 학습합니다.
7. BERT 특징
| 특징 | 설명 |
|---|---|
| Bidirectional | 양방향 문맥 사용 |
| Transformer Encoder | Self-attention 기반 |
| MLM Pretraining | 마스크 단어 예측 |
8. BERT 한계
- pretrain / finetune mismatch
- generation task에 부적합
- MLM 효율 낮음
그래서 이후 GPT 같은 autoregressive 모델이 발전했습니다.
코드-수식 연결
| 개념 | 코드 | 설명 |
|---|---|---|
| BERT 모델 | transformers.BertModel |
BERT encoder |
| MLM | BertForMaskedLM |
mask prediction |
| tokenize | BertTokenizer |
WordPiece tokenizer |
자주 하는 오해 5개
- BERT는 문장을 생성할 수 있다고 생각한다
- BERT는 GPT와 같은 구조라고 생각한다
- [MASK] 토큰이 실제 입력에서도 사용된다고 생각한다
- BERT는 단어 임베딩만 학습한다고 생각한다
- NSP가 모든 BERT 계열 모델에서 사용된다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- BERT가 bidirectional이라고 하는 이유는 무엇인가?
- BERT의 MLM pretraining 목표는 무엇인가?
- BERT 입력 구조는 어떤 embedding으로 구성되는가?
- NSP task의 목적은 무엇인가?
- BERT가 generation task에 부적합한 이유는 무엇인가?