Devlin et al. · Google AI Language · NAACL 2019 · arXiv:1810.04805
BERT Bidirectional Encoder Representations from Transformers
한 줄 요약: Transformer Encoder를 양방향으로 사전학습하면, 적은 파인튜닝만으로 거의 모든 NLP 태스크에서 최고 성능을 낸다.
왜 사전학습이 강력한가
언어 이해를 위한 모델을 태스크별로 처음부터 학습하는 것은 비효율적이다. 감성 분석을 하든 질의응답을 하든, 공통적으로 필요한 것은 "언어 자체를 이해하는 능력"이다. BERT의 핵심 통찰은 이 공통 능력을 대규모 비지도 학습으로 먼저 획득하고, 이후 각 태스크에 맞게 소량의 레이블 데이터로 파인튜닝한다는 것이다.
BERT는 BooksCorpus(800M 단어)와 Wikipedia(2.5B 단어)로 사전학습했다. 이 모든 텍스트는 레이블이 없어도 된다 — 자기 자신의 내용이 학습 신호가 된다.
단방향 vs 양방향
왜 단방향이 NLU에 불충분한가?
GPT 같은 단방향 모델은 "The cat sat on the ___"처럼 왼쪽 문맥만 보고 다음 단어를 예측하는 데 탁월하다. 하지만 "The animal didn't cross the street because it was too tired"에서 it이 animal인지 street인지 판별하려면 오른쪽 문맥("was too tired")도 함께 봐야 한다. 이해(Understanding)에는 양방향 컨텍스트가 필수다.
두 가지 사전학습 태스크
1. Masked Language Model (MLM)
입력 토큰의 15%를 랜덤으로 선택해 마스킹한 후, BERT가 마스킹된 원래 토큰을 맞추도록 학습한다. 선택된 15% 중에서:
80%는 실제로 [MASK] 토큰으로 교체
10%는 랜덤한 다른 토큰으로 교체 (노이즈 내성 학습)
10%는 그대로 유지 (표현 일관성 유지)
이 세 가지 전략을 섞는 이유: 파인튜닝 시에는 [MASK]가 등장하지 않기 때문에 항상 [MASK]로만 학습하면 사전학습-파인튜닝 불일치가 발생한다.
2. Next Sentence Prediction (NSP)
두 문장 A, B를 이어 붙여 BERT에 입력하고, B가 A 다음에 실제로 오는 문장인지(IsNext) 아닌지(NotNext)를 [CLS] 토큰으로 분류한다. 50%는 실제 연속 문장, 50%는 랜덤하게 뽑힌 문장을 사용. 이를 통해 질의응답, 자연어 추론 같은 문장 간 관계 이해 능력을 획득한다.
참고: 이후 연구인 RoBERTa(2019)에서 NSP가 실제로는 별 도움이 안 된다는 것이 밝혀졌고, 이를 제거해도 성능이 오른다는 것이 증명됐다.
Masked Language Model — 직접 해보기
토큰을 클릭해서 마스킹하면 BERT가 예측하는 결과를 확인할 수 있어요.
토큰을 클릭해서 마스킹해보세요.
입력 표현
BERT의 입력 임베딩은 세 가지 임베딩의 합으로 구성된다. 각각은 별도의 임베딩 테이블에서 가져와서 요소별로 더한다.
세 임베딩의 역할:
Token Embedding: 어휘 사전(30,522 토큰)에서 해당 토큰의 의미 벡터. WordPiece 토크나이저로 분리 (예: "playing" → "play" + "##ing").
Segment Embedding: 첫 번째 문장(A)의 모든 토큰은 Embedding A, 두 번째 문장(B)은 Embedding B. 두 문장을 구분하는 신호.
Position Embedding: Transformer는 순서를 모르므로 위치를 학습된 벡터로 인코딩. BERT는 sin/cos 대신 학습 가능한 위치 임베딩 사용. 최대 512 토큰 지원.
[CLS] 토큰: 문장 맨 앞에 항상 붙이는 특수 토큰. 마지막 레이어에서 이 토큰의 출력 벡터가 문장 전체의 표현으로 사용됨 (분류 태스크용).
[SEP] 토큰: 두 문장 사이와 마지막에 삽입해 문장 경계를 명시.
파인튜닝 방법 (태스크별)
사전학습된 BERT에 태스크별로 얇은 출력 레이어 하나만 추가하고, 전체 모델을 소량의 레이블 데이터로 파인튜닝한다. 대부분의 태스크에서 학습 시간은 수 시간 이내다.
각 태스크의 파인튜닝 방식:
분류 (감성분석, NLI): [CLS] 토큰의 출력에 선형 레이어 + softmax. 단 하나의 레이어 추가.
NER/POS: 각 토큰의 출력에 독립적으로 레이블 예측. 입력 길이만큼 출력이 나옴.
SQuAD QA: 지문+질문을 입력으로, 답의 시작(Start)과 끝(End) 위치를 각각 별도의 선형 레이어로 예측.
NSP/문장 관계: [CLS] 벡터로 두 문장의 관계를 분류.
BERT-base vs BERT-large
BERT-base
레이어: 12개
히든 크기: 768
Attention 헤드: 12개
파라미터: 110M
학습: 16 TPU 4일
BERT-large
레이어: 24개
히든 크기: 1024
Attention 헤드: 16개
파라미터: 340M
학습: 64 TPU 4일
BERT 이후 NLP는 "사전학습 + 파인튜닝" 패러다임으로 완전히 전환. 11개 NLP 벤치마크에서 동시에 SOTA를 달성해 AI 커뮤니티에 충격을 줬다. RoBERTa(더 많은 데이터 + NSP 제거), ALBERT(파라미터 공유로 경량화), DistilBERT(지식 증류로 60% 소형화)가 뒤를 잇는다.