BERT
BERT는 각 position이 왼쪽과 오른쪽 문맥을 함께 읽는 Transformer Encoder다. 양쪽을 볼 수 있으므로 원래 token을 그대로 둔 채 그 token을 맞히게 하면 답을 읽어 버릴 수 있다. MLM은 입력 일부를 바꾸고 원래 token을 복원하도록 하여 문맥으로부터 유용한 representation을 배우게 하는 과제를 만든다. 이후 task별 head와 함께 fine-tune하여 그 표현을 재사용한다.
- Corrupted tokens
- Bidirectional Encoder
- selected-position MLM / task head
- fine-tuning
Bidirectional Representations
BERT Base/Large는 layers 12/24, hidden size 768/1024, heads 12/16, parameters 110M/340M이다. MLM+NSP, 약 30K WordPiece, max 512 tokens를 사용한다.
the / cat / sat / on / the / mat에서 position 3의 BERT state는 양쪽 문맥을 모두 읽을 수 있고, causal Decoder는 j≤3만 읽는다. BERT의 입력은 [CLS] sentence A [SEP] sentence B [SEP]처럼 구성하며, 각 position에 Token + Segment + Position Embeddings를 더한다. Segment는 A/B 소속을, Position은 sequence 내 순서를 알려 준다.
WordPiece의 ##는 앞 piece와 공백 없이 이어진다는 뜻이다. 슬라이드의 unhappiness는 un / ##happiness로 나뉜다. Greedy longest-match로 Vocabulary에서 pieces를 고르는 과정은 WordPiece에서 본 내용과 같다. 512 input 한도는 WordPiece positions 기준이며, 긴 text는 잘라내거나 구간을 나누는 처리가 필요했다.
Masked Language Modeling
MLM은 WordPiece positions의 15%를 targets로 선택한 뒤 그 안의 80% MASK / 10% random / 10% unchanged를 쓴다. 전체 input 기준으로는 12% MASK / 1.5% random / 1.5% unchanged다.
MLM loss의 집합 M은 [MASK]가 놓인 위치만이 아니라 prediction targets로 선택한 모든 positions다. Random token으로 바꾸었거나 원래 token을 남긴 경우에도 원래 token을 정답으로 채점한다. 식의 x̃는 corrupted input, xᵢ는 바꾸기 전 token이다.
왜 15%를 전부 [MASK]로 바꾸지 않을까? Pre-training에는 [MASK]가 있지만 일반적인 task fine-tuning과 test 입력에는 없어서 input 분포가 어긋날 수 있다. Random과 unchanged targets를 섞는 것은 이 mismatch를 완화하려는 선택이다. 100 input tokens라면 약 15개가 targets이고, 실제 [MASK]는 12개, random과 unchanged는 각각 1.5개 비중이라는 분모 차이를 기억해야 한다.
Masking을 너무 적게 하면 직접 채점할 targets가 적고, 너무 많이 하면 남은 context가 부족하다. 교수님은 비율 자체보다 이 trade-off를 이해하라고 설명했다. ModernBERT의 30%처럼 모델과 recipe가 달라지면 다른 rate를 사용할 수 있으므로, 15%가 모든 Encoder의 필수 조건은 아니다.
Task Heads
하나의 checkpoint 위에 Sequence/pair classification은 [CLS] classifier, Token classification은 위치별 label, Extractive QA는 start/end score heads를 붙인다. Backbone과 head를 함께 2–4 epochs fine-tune한다. BERT-Large GLUE test 80.5(+7.7), SQuAD 1.1 dev F1 90.9는 당시 보고 수치다.
What the Head Predicts
Sequence/pair classification은 [CLS]의 최종 state를 classifier에 준다. Bidirectional Attention으로 여러 tokens를 읽은 [CLS]가 문장·문장쌍의 표현 역할을 하며, sentiment의 두 classes나 NLI의 세 classes처럼 task에 맞는 scores를 만든다. Token classification은 문장 전체 label 대신 각 token state로 NER/POS label을 예측한다. WordPiece로 한 단어가 나뉜 경우 원래 word labels와 pieces의 대응도 맞추어야 한다.
Extractive QA는 [CLS] question [SEP] passage [SEP]를 함께 읽고 각 passage position의 start/end scores를 만든다. State 에 start/end vectors를 적용하는 설명은 다음과 같이 적을 수 있다.
시작과 끝의 score로 passage 안의 answer span을 고른다. “BERT was released by Google in 2018”에서 회사가 무엇인지 물으면 Google 위치를 찾는 식이다. 새 문장을 생성하는 QA가 아니라 입력 passage의 구간을 추출하는 QA다.
“One checkpoint, many tasks”는 weights 하나가 여러 heads로 모든 task를 동시에 처리한다는 뜻이 아니다. Checkpoint를 복사해 task head를 붙인 뒤 각 task에 맞게 backbone과 head 전체를 fine-tune하는 recipe다. 원형의 2–4 epochs와 당시 GLUE/SQuAD 수치는 그 조건의 결과로 읽는다.
Check
100 input tokens에서 MASK/random/unchanged의 기댓수와 loss 대상 수는?
Answer
15 positions를 targets로 선택한다. 전체 input 기준 기댓수는 12 MASK/1.5 random/1.5 unchanged다. Loss는 선택된 15 positions의 original token을 맞춘다.
[CLS] classification, token classification, Extractive QA의 output 차이는?
Answer
Sequence 전체 label, token별 label, passage의 start/end span이다. 같은 pretrained backbone 위에 다른 head를 붙인다.
Unchanged token도 MLM loss target으로 남겨야 하는 이유는?
Answer
Target 선택과 input corruption은 별개이기 때문이다. 먼저 고른 15% positions 모두 원래 token을 맞히며, 그중 일부는 random 또는 unchanged input으로 제시된다. [MASK] 위치만 채점하면 강의의 objective와 달라진다.
BERT · RoBERTa · ELECTRA를 축별로 비교하고 그 차이가 필요한 이유를 설명하세요.
Answer
Encoder 발전은 objective와 training recipe의 서로 다른 축을 건드렸다.
Objective: BERT=MLM + NSP / RoBERTa=MLM, NSP 제거 / ELECTRA=Generator MLM + Discriminator RTD
Loss 위치: BERT=MLM 15% targets / RoBERTa=MLM 선택 positions / ELECTRA=RTD 모든 positions
주요 변화: BERT=Bidirectional reusable backbone / RoBERTa=Data/batch/length/dynamic mask/vocab / ELECTRA=Small generator로 plausible replacements
이후 사용: BERT=Task head fine-tuning / RoBERTa=Task head fine-tuning / ELECTRA=Discriminator fine-tuning