BERT — Bidirectional Encoder Representations from Transformers
BERT는 2018년 Google이 발표한 양방향 인코더 모델로, NLP의 사전학습 패러다임을 본격적으로 열었습니다. 발표 당시 11개 NLP 벤치마크에서 SOTA(State-of-the-Art)를 달성하며, 사전학습 후 Fine-tuning이라는 접근법을 NLP의 표준으로 확립했습니다.핵심 아이디어
기존 언어 모델(ELMo, GPT-1)은 좌에서 우로(left-to-right) 또는 좌우를 독립적으로 학습하는 방식이었습니다. BERT는 **양방향 컨텍스트(bidirectional context)**를 동시에 학습하여, 단어의 의미를 문맥 전체에서 파악합니다. 핵심 차이: GPT는 다음 토큰을 예측하지만, BERT는 문장 중간의 가려진 토큰을 양쪽 문맥을 모두 사용하여 예측합니다.아키텍처 상세
BERT는 Transformer의 인코더(Encoder) 블록만 사용합니다.| 구성 요소 | BERT-Base | BERT-Large |
|---|---|---|
| Transformer 레이어 (L) | 12 | 24 |
| Hidden 차원 (H) | 768 | 1024 |
| Attention Head 수 (A) | 12 | 16 |
| 파라미터 수 | 110M | 340M |
| 최대 시퀀스 길이 | 512 | 512 |
입력 표현 (Input Representation)
BERT의 입력은 세 가지 임베딩의 합으로 구성됩니다.- Token Embedding: WordPiece 토크나이저로 분리된 각 토큰의 임베딩
- Segment Embedding: 첫 번째 문장(A)과 두 번째 문장(B)을 구분하는 임베딩
- Position Embedding: 학습 가능한(learned) 위치 임베딩 (최대 512)
[CLS]: 문장의 시작. 이 토큰의 최종 Hidden State를 분류 태스크에 사용합니다.[SEP]: 문장 사이의 구분자. 두 문장을 하나의 입력으로 연결할 때 사용합니다.[MASK]: MLM에서 가려진 토큰 위치를 나타냅니다.
사전학습 목표 (Pre-training Objectives)
BERT는 두 가지 사전학습 목표를 동시에 학습합니다.1. Masked Language Model (MLM)
입력 토큰의 15%를 무작위로 선택하고, 해당 위치의 토큰을 예측하는 것이 목표입니다. 선택된 15% 토큰의 처리 방식:- 80%:
[MASK]토큰으로 대체 →"I love [MASK]"→"NLP"예측 - 10%: 무작위 토큰으로 대체 →
"I love apple"→"NLP"예측 - 10%: 변경하지 않음 →
"I love NLP"→"NLP"확인
[MASK] 토큰이 없는 환경과의 괴리(mismatch)를 줄이기 위해 설계되었습니다.
MLM 손실 함수:
여기서 은 마스킹된 토큰의 위치 집합이고, 은 마스킹되지 않은 나머지 토큰입니다.
2. Next Sentence Prediction (NSP)
두 문장이 연속된 문장인지 예측하는 이진 분류 태스크입니다.| 입력 | 레이블 |
|---|---|
[CLS] 오늘 날씨가 좋다 [SEP] 산책을 나가자 [SEP] | IsNext |
[CLS] 오늘 날씨가 좋다 [SEP] 주식이 올랐다 [SEP] | NotNext |
[CLS] 토큰의 출력 벡터에 분류 헤드를 달아 예측합니다.
참고: 후속 연구(RoBERTa)에서 NSP는 성능 향상에 기여하지 않거나 오히려 방해가 될 수 있다는 결과가 나왔습니다. 자세한 내용은 RoBERTa, ALBERT, DeBERTa 문서에서 다룹니다.
사전학습 데이터 및 설정
| 항목 | 값 |
|---|---|
| 학습 데이터 | BooksCorpus (800M 단어) + English Wikipedia (2,500M 단어) |
| 배치 크기 | 256 시퀀스 |
| 학습 스텝 | 1,000,000 (약 40 에폭) |
| 옵티마이저 | Adam (lr=1e-4, warmup 10,000 스텝) |
| 학습 시간 | 4일 (TPU v3 Pod 16칩, BERT-Base 기준) |
Fine-tuning 전략
BERT의 가장 큰 강점은 다양한 다운스트림 태스크에 쉽게 적용할 수 있다는 것입니다. 사전학습된 BERT 위에 간단한 출력 레이어를 추가하고, 전체 모델을 태스크 데이터로 미세 조정합니다.Fine-tuning 하이퍼파라미터 권장 값
| 하이퍼파라미터 | 권장 범위 |
|---|---|
| 학습률 (Learning Rate) | 2e-5, 3e-5, 5e-5 |
| 배치 크기 | 16, 32 |
| 에폭 수 | 2~4 |
| Warmup 비율 | 학습 스텝의 10% |
| Weight Decay | 0.01 |
구현 예제
HuggingFace Transformers를 사용하여 BERT로 텍스트 분류를 수행하는 예제입니다.Masked Language Model 추론
Fine-tuning: 텍스트 분류
Feature Extraction (임베딩 추출)
관련 기술 비교
| 모델 | 방향성 | 사전학습 목표 | 주요 용도 |
|---|---|---|---|
| ELMo (2018) | 양방향 (독립적) | 양방향 LM | Feature 추출 |
| GPT-1 (2018) | 단방향 (좌→우) | Autoregressive LM | 생성, Fine-tuning |
| BERT (2018) | 양방향 (동시) | MLM + NSP | 이해, 분류, 추출 |
| XLNet (2019) | 순열 기반 양방향 | Permutation LM | 이해 + 생성 |
BERT의 한계
- 고정 길이 제한: 최대 512 토큰까지만 처리 가능합니다. 긴 문서 처리에 한계가 있습니다.
- [MASK] 토큰 불일치: 사전학습 시 사용하는
[MASK]가 Fine-tuning에는 없어 미스매치가 발생합니다. - 토큰 독립 가정: MLM에서 마스킹된 토큰들이 서로 독립이라고 가정하지만 실제로는 상관관계가 있을 수 있습니다.
- NSP의 효과: 후속 연구에서 NSP가 불필요하거나 해로울 수 있다는 결과가 보고되었습니다.
BERT의 WordPiece 토크나이저는 어떻게 동작하나요?
BERT의 WordPiece 토크나이저는 어떻게 동작하나요?
WordPiece는 BPE(Byte Pair Encoding)의 변형으로, 빈도가 아닌 우도(likelihood)를 기준으로 서브워드를 병합합니다.
"playing"을 ["play", "##ing"]으로 분리하며, ## 접두사는 이전 토큰에 이어지는 서브워드임을 나타냅니다. 어휘 크기는 30,522개입니다.[CLS] 토큰을 문장 임베딩으로 사용해도 되나요?
[CLS] 토큰을 문장 임베딩으로 사용해도 되나요?
BERT의
[CLS] 토큰은 NSP 목표에 최적화되어 있어, 범용 문장 임베딩으로는 부적합할 수 있습니다. 문장 유사도 태스크에는 Sentence-BERT(SBERT)처럼 전용으로 학습된 모델을 사용하거나, 평균 풀링(mean pooling)을 적용하는 것이 더 나은 결과를 보입니다.BERT를 생성 태스크에 사용할 수 있나요?
BERT를 생성 태스크에 사용할 수 있나요?
BERT는 양방향 모델이므로 자기회귀(autoregressive) 텍스트 생성에는 적합하지 않습니다. 생성이 필요하다면 GPT 계열(디코더 모델)이나 T5(인코더-디코더 모델)를 사용하는 것이 적절합니다. 다만, BERT의 MLM 헤드를 활용한 제한적인 빈칸 채우기는 가능합니다.
참고 논문
| 논문 | 저자 | 연도 | 핵심 기여 |
|---|---|---|---|
| BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding | Devlin et al. | 2018 | MLM + NSP 기반 양방향 사전학습 |
| Attention Is All You Need | Vaswani et al. | 2017 | Transformer 아키텍처 (BERT의 기반) |
| Deep contextualized word representations (ELMo) | Peters et al. | 2018 | 문맥 의존적 임베딩의 시초 |

