BERT (Bidirectional Encoder Representations from Transformers)의 핵심 혁신 중 하나가 바로 이 '마스크드 언어 모델(Masked Language Model, MLM)'입니다. 이 개념이 왜 중요하고 어떻게 작동하는지 자세히 설명합니다.
1. MLM이란 무엇이며 왜 필요한가?
전통적인 언어 모델(예: GPT-1)은 문장을 왼쪽에서 오른쪽으로 순차적으로 처리하며 다음 단어를 예측하는 방식으로 학습되었습니다.
- "나는 학교에 [?]" -> 모델이 "가서"를 예측
이 방식은 문맥을 한쪽 방향(왼쪽)으로만 학습한다는 한계가 있습니다. 반면, BERT는 "깊은 양방향성(deep bidirectionality)"을 구현하고자 했습니다. 즉, 문장 내 모든 단어가 자신의 왼쪽과 오른쪽 모든 문맥을 동시에 참고하여 의미를 파악하도록 하는 것이 목표였습니다.
하지만 단순한 양방향 학습에는 문제가 있습니다. 만약 모델이 예측해야 할 단어(target word)를 입력값에서 이미 볼 수 있다면, 모델은 굳이 문맥을 학습할 필요 없이 그냥 입력값을 복사해오면 되기 때문입니다.
"나는 [학교]에 가서 공부를 했다." -> [학교]를 예측해야 하는데, 입력에서 이미 [학교]를 볼 수 있다면 학습이 무의미해집니다.
MLM은 이 문제를 "입력 문장의 일부를 가리는(masking)" 독창적인 방법으로 해결합니다.
2. MLM의 작동 원리: 15%의 마법
MLM은 "빈칸 채우기(cloze task)"와 유사합니다. 학습 과정은 다음과 같습니다.
- 토큰 선택: 입력 문장에서 15%의 토큰을 무작위로 선택합니다.
- 마스킹 처리: 선택된 15%의 토큰에 대해 다음 세 가지 규칙을 적용합니다.
- [MASK] 토큰으로 교체 (80%의 확률):
- 원본: "나는 학교에 가서 공부를 했다."
- 변경: "나는 [MASK]에 가서 공부를 했다."
- 이것이 가장 일반적인 마스킹 방식입니다.
- 무작위 단어로 교체 (10%의 확률):
- 원본: "나는 학교에 가서 공부를 했다."
- 변경: "나는 책상에 가서 공부를 했다." (예: 학교가 책상으로 임의 변경)
- 이유: 모델이 단순히 [MASK] 토큰의 위치만 찾는 것이 아니라, 문맥상 잘못된 단어까지 파악하고 교정하는 능력을 갖추게 합니다. 즉, 모든 입력 토큰에 대해 풍부한 문맥적 표현을 학습하도록 강제합니다.
- 원래 단어 유지 (10%의 확률):
- 원본: "나는 학교에 가서 공부를 했다."
- 변경: "나는 학교에 가서 공부를 했다." (변경 없음)
- 이유: 모델이 실제 관찰된 단어에 대해서도 편향되지 않고 올바른 표현을 학습하도록 돕습니다. 모델은 어떤 단어가 마스킹 대상이었는지(변경되었는지 혹은 그대로인지) 모르기 때문에, 모든 단어의 문맥적 의미를 파악하려 노력해야 합니다.
- [MASK] 토큰으로 교체 (80%의 확률):
3. 학습 목표: 가려진 단어 예측하기
이렇게 "훼손된" 문장이 BERT의 입력으로 들어갑니다. 모델의 임무는 단 하나, 마스킹 처리된 15% 토큰의 "원본" 단어가 무엇이었는지 맞추는 것입니다.
- 입력: "나는 [MASK]에 가서 공부를 [MASK]."
- 모델의 예측 (최종 출력 레이어):
- 첫 번째 [MASK] 위치에서 -> ... "집", "학교", "회사" ... 등 어휘사전 전체에 대한 확률 분포를 출력 (정답: 학교)
- 두 번째 [MASK] 위치에서 -> ... "했다", "본다", "먹었다" ... 등 확률 분포를 출력 (정답: 했다)
중요한 점은, [MASK]를 예측하기 위해 모델이 문장 전체, 즉 [MASK]의 왼쪽("나는")과 오른쪽("에 가서 공부를") 문맥을 동시에 고려한다는 것입니다. 이것이 바로 BERT가 양방향 문맥을 학습하는 방식입니다.
4. 손실 계산: 15%에만 집중
모델이 모든 입력 토큰 위치에서 원본 단어를 예측하는 확률 분포를 출력하더라도, 손실(loss)을 계산하는 과정은 다릅니다.
- 손실 계산 대상: BERT는 오직 마스킹 처리 대상으로 선택되었던 15%의 토큰 위치에 대해서만 손실을 계산합니다. (여기에는 80%의 [MASK], 10%의 무작위 단어, 10%의 원본 단어가 모두 포함됩니다.)
- 무시되는 85%: 나머지 85%의 변경되지 않은 토큰 위치에서의 예측값은 손실 계산에 전혀 반영되지 않습니다.
- 계산 방식: 15%의 해당 위치에서, 모델의 예측값(확률 분포)과 실제 정답(원본 토큰) 간의 차이를 계산합니다. 이는 일반적으로 교차 엔트로피 손실(Cross-Entropy Loss)을 통해 이루어집니다.
예를 들어, "[MASK]에 가서 공부를 [MASK]"가 입력일 때, [MASK] 두 위치에서만 "학교"와 "했다"를 맞췄는지 채점하고, "에", "가서", "공부를" 등의 위치에서 모델이 무엇을 예측했는지는 MLM 손실 계산에서 무시합니다.이 방식은 모델이 오직 "빈칸"을 채우는 데만 집중하도록 하며, 계산 효율성을 높여줍니다.
참고: 변경되지 않은 토큰 위치에서의 예측값을 손실 계산에서 제외하는 방법
허깅 페이스 Transformers 라이브러리에서 BertForMaskedLM 클래스의 forward() 메쏘드 (토큰 예측 손실 계산 부분)
if labels is not None:
loss_fct = CrossEntropyLoss() # -100 index = padding token
masked_lm_loss = loss_fct(prediction_scores.view(-1, self.config.vocab_size), labels.view(-1))
모델 자체는 입력된 모든 토큰 시퀀스(seq_length)에 대해 전체 어휘 사전(vocab_size) 크기의 예측(logits)을 출력합니다. 하지만 손실(loss)을 계산하는 단계에서, 오직 우리가 예측 대상으로 삼았던 15%의 토큰들(즉, [MASK], random word, original word로 변형되었던 토큰들)의 예측값만을 사용합니다.
이 메커니즘의 핵심은 labels 텐서의 구성과 CrossEntropyLoss의 ignore_index 기능에 있습니다.
labels 텐서의 구조
MLM 훈련을 위해 데이터를 준비할 때 (보통 DataCollatorForLanguageModeling이 이 작업을 수행합니다), labels 텐서는 다음과 같이 특별하게 생성됩니다.
- 예측 대상 토큰 (15%): [MASK]나 무작위 단어로 변경된 위치에는 원래의 정답 토큰 ID (예: 강아지의 ID 456)가 들어갑니다.
- 예측 비대상 토큰 (85%): 마스킹되지 않은 나머지 85%의 위치에는 PyTorch의 CrossEntropyLoss가 기본적으로 무시하는 특별한 값인 -100이 채워집니다.
예시:
- `input_ids`: `[CLS]`, `나의`, `[MASK]`, `##는`, `귀엽고`, `그는`, `컴퓨터`, `##을`, `좋아한다`, `[SEP]`
- `labels`: `-100`, `-100`, `강아지ID`, `-100`, `-100`, `-100`, `간식ID`, `-100`, `-100`, `-100`
5. 80/10/10 비율의 중요성
왜 이렇게 복잡한 80/10/10 비율을 사용할까요?
만약 100%의 확률로 [MASK] 토큰만 사용한다면, 모델은 학습(pre-training) 단계에서는 [MASK] 토큰을 찾는 데만 집중하게 됩니다. 하지만 실제 사용 단계(fine-tuning)에서는 [MASK] 토큰이 존재하지 않습니다. 이로 인해 학습과 실제 사용 간의 불일치(mismatch)가 발생합니다.
10%의 무작위 단어 교체와 10%의 원본 유지를 통해, 모델은 입력으로 들어온 단어가 항상 정확하다고 가정할 수 없게 됩니다. 모델은 "이 단어가 원래 단어가 맞나?" 혹은 "이 단어가 문맥에 적절한가?"를 끊임없이 확인해야 하며, 이를 위해 모든 토큰에 대해 깊은 문맥적 표현을 학습하게 됩니다. 이는 모델의 일반화 성능을 크게 향상시킵니다.
왜 하필 80/10/10이라는 비율을 사용했는가?
이에 대한 가장 직접적인 대답은, "BERT 논문 저자들이 다양한 실험을 통해 찾아낸 경험적인 최적의 비율(hyperparameter)"이라는 것입니다.
이 비율이 수학적인 공식으로 "증명"된 값이라기보다는, 다음과 같은 두 가지 상충되는 목표 사이의 균형점을 찾은 결과입니다.
- 목표 1: 모델이 문맥을 통해 단어를 예측하도록 강력하게 학습시킨다.
- [MASK] 토큰 (80%)이 이 역할을 수행합니다. 이 비율이 높을수록 모델은 "빈칸 채우기" 문제를 더 많이 풀게 되므로 양방향 문맥을 학습할 기회가 많아집니다.
- 목표 2: 사전 학습(Pre-training)과 실제 사용(Fine-tuning) 간의 불일치를 줄인다.
- 이것이 10%의 무작위 단어와 10%의 원본 단어가 필요한 이유입니다.
- 만약 100% [MASK] 토큰만 쓴다면, 모델은 "실제 단어"가 입력으로 들어오는 상황(Fine-tuning 단계)에 전혀 대비가 되지 않습니다.
- [MASK]가 아닌 실제 단어(무작위 단어든, 원본 단어든)를 입력으로 받는 경우를 20% (10%+10%) 포함함으로써, 모델은 [MASK] 토큰이 아닌 위치의 단어에 대해서도 "이 단어가 문맥에 적절한가?"를 항상 고민하게 됩니다.
6. 요약
마스크드 언어 모델(MLM)은 BERT가 문장 내 단어의 의미를 양방향 문맥 속에서 깊이 있게 학습할 수 있도록 고안된 핵심적인 사전 학습(pre-training) 기법입니다. 입력의 일부를 의도적으로 훼손하고(가리고), 모델이 주변 문맥을 총동원하여 원래 단어를 복원하도록 함으로써, 언어에 대한 강력한 이해력을 갖추게 만듭니다.
'인공지능 > BERT 계열 이해' 카테고리의 다른 글
| DistilBERT + KorQuAD MLM 훈련 소요 시간 비교 (RTX 4090, T4, A100) (0) | 2025.10.18 |
|---|---|
| 허깅 페이스 Transformers에서 DistilBERT 기반 작업 클래스들 (0) | 2025.10.13 |
| BERT, GPT-2, XLNet 학습 방식 비교: 양방향, 단방향, 순열 (0) | 2025.10.11 |