NLP 전이학습은 범용 언어 지식을 먼저 학습(Pre-training) 해두고, 내가 원하는 특정 task에 짧게 추가 학습(Fine-tuning) 하는 방식입니다.
| 이점 | 설명 | 실제 사례 |
|---|---|---|
| Training Time 절감 | 처음부터 학습할 필요 X | GPT-3를 처음부터 학습하면 약 2개월 소요. 전이학습으로 며칠로 단축 가능 |
| 예측 성능 향상 | 소량 데이터로도 높은 성능 | 감성 분석 데이터 1,000개만 있어도 BERT fine-tuning으로 SOTA 근접이 가능 |
Pre-trained 모델의 출력(feature)을 새로운 모델의 입력으로 사용하는 방법입니다.

Pre-trained Model → [고정된 Feature 벡터] → 새로운 모델 학습
📌 비유: 잘 훈련된 요리사(pre-trained model)가 만든 육수(feature)를 가져다가, 내 식당에서 새로운 찌개 레시피(new model)로 요리하는 것과 같습니다.
- Pre-trained 모델의 가중치(weight)는 변경하지 않습니다
- 추출한 feature를 입력값으로 삼아 별도 모델을 새로 생성/훈련합니다
- 대표 사례: ELMo
Pre-trained 가중치를 초기값으로 삼아, 동일한 모델 구조를 적은 데이터셋으로 추가 학습하는 방법입니다.

Pre-trained Model (가중치 복사) → 동일 모델을 downstream task로 미세조정
📌 비유: 영어를 이미 유창하게 구사하는 사람(pre-trained)이, 법률 번역사가 되기 위해 법률 용어만 추가로 익히는(fine-tuning) 것과 같습니다. 영어 실력은 그대로 유지하면서 전문성을 더하는 방식입니다.
- Pre-trained 모델의 끝에 마지막 레이어(last layer)만 추가합니다
- 기존 모델 전체를 downstream task 데이터로 다시 미세조정합니다
- 대표 사례: BERT, GPT
| 장점 | 단점 |
|---|---|
| 더 빠른 개발이 가능 | 모델 크기가 큼 (BERT-Base: 417 MB) |
| 필요한 데이터가 적음 | Fine-tuning 속도가 느림 |
| 더 나은 결과를 얻을 수 있음 | 추론(Inference) 속도가 느림 |
| 언어의 많은 것이 이미 인코딩되어 있음 | 특정 도메인 전문 용어를 모를 수 있음(Fine-Tuning을 통해 해결 가능) |
세 모델 모두 "언어를 대규모로 사전학습한 모델"이지만, 학습 방식과 구조가 다릅니다.

📌 비유: 책을 앞에서 뒤로 한 번, 뒤에서 앞으로 한 번 각각 읽고 두 독후감을 합치는 방식입니다. 동시에 앞뒤를 같이 보는 건 아닙니다.

📌 비유: 추리 소설을 처음부터 읽으면서 "다음 장에 무슨 일이 일어날까?"를 예측하는 독자와 같습니다. 앞 내용만 보고 뒤를 추론합니다.
📌 비유: 빈칸 채우기 문제를 푸는 학생과 같습니다. "나는 오늘 학교에 ___을 타고 갔다"에서 앞 단어("학교에")와 뒤 단어("갔다")를 동시에 보고 "버스"를 채울 수 있습니다.
ELMo: [←LSTM] + [LSTM→] (양방향 독립 학습)
GPT: [→→→→→→→→→→→Decoder] (단방향, 생성 특화)
BERT: [Encoder ↔ Encoder ↔ Encoder] (진정한 양방향)
| 모델 | 아키텍처 | 방향성 | 강점 |
|---|---|---|---|
| ELMo | Bidirectional LSTM | 양방향(독립) | 문맥 임베딩 |
| GPT | Transformer Decoder | 단방향 | 텍스트 생성 |
| BERT | Transformer Encoder | 양방향(통합) | 언어 이해 |
참고: GPT-2는 GPT와 동일한 구조이지만 크기가 훨씬 큽니다. GPT-2의 두 번째 사이즈가 BERT의 가장 큰 모델 사이즈와 동일할 정도입니다.
| 항목 | BERT-Base | BERT-Large |
|---|---|---|
| Transformer Encoder 층 수 | 12개 | 24개 |
| 총 파라미터 | 110M | 340M |
| 파일 크기 | 약 417 MB | 약 1.3 GB |
| 어휘 사전 크기 | 30,000 (영어) / 110,000 (104개국어) | 동일 |
Pre-training - 언어 자체를 이해시키는 단계
① No human labeling (비지도 학습)
② 대규모 corpus 사용
- BooksCorpus: 8억 단어
- English Wikipedia: 25억 단어
③ 대규모 computing resource 사용
- BERT-Base: TPU 64개 × 4일
Fine-Tuning - 특정 문제를 잘 풀게 만드는 단계
다양한 downstream NLP task에 적용
① MINL(Multi-Genre Natural Language Inference) : 두 문장이 논리적으로 맞는지 판단
② Named Entity Recongnition : 사람 이름, 장소, 기관
③ SQuAD : 독해
BERT의 핵심 철학: "범용 솔루션을 Scalable하게 만들어, 많은 머신 리소스로 성능을 높인다."
발표 당시 SQuAD(Stanford Question Answering Dataset)에서 인간 수준을 능가했습니다.
| CAN DO ✅ | CANNOT DO ❌ |
|---|---|
| 텍스트 분류 (Classification) | 다음 단어 예측 (Language Model) |
| 개체명 인식 (NER) | 텍스트 생성 (Text Generation) |
| 품사 태깅 (POS Tagging) | 번역 (Translation) |
| 질의응답 (Question Answering) |
BERT는 "이해(Understanding)" 에 특화된 모델입니다. "생성(Generation)" 은 GPT 계열의 영역입니다.
BERT는 두 가지 Task를 동시에 학습하여 언어를 이해하는 능력을 키웁니다.
핵심 아이디어: 문장에서 일부 단어를 가리고, 주변 맥락으로 그 단어를 맞추도록 합니다.
전체 학습 데이터 토큰의 15%를 선택하여 아래와 같이 처리합니다.
| 처리 방식 | 비율 | 설명 |
|---|---|---|
[MASK] 토큰으로 교체 | 80% | 가장 일반적인 마스킹 방식입니다 |
| 랜덤 단어로 교체 | 10% | 노이즈 주입으로 일반화 성능을 높입니다 |
| 원래 단어 유지 | 10% | 태깅만 변경하고 실제 단어는 그대로 둡니다 |
원문: 오늘 저는 도서관에 가서 파이썬 책을 빌렸습니다.
입력: 오늘 저는 [MASK]에 가서 파이썬 [MASK]을 빌렸습니다.
정답: 도서관, 책
BERT는 앞 단어 "파이썬"과 뒤 단어 "빌렸습니다"를 동시에 보고 "[MASK] = 책"이라고 예측합니다.
[MASK] 위치의 예측만 loss에 반영됩니다핵심 아이디어: 두 문장이 실제로 연속된 문장인지 판별하는 이진 분류 학습입니다.
전체 학습 pair의 50%는 실제 연속 문장, 나머지 50%는 무작위 추출 문장으로 구성됩니다.
[Case A] IsNext (연속 문장) ✅
문장 A: 비가 와서 우산을 챙겼다.
문장 B: 덕분에 옷이 젖지 않았다.
[Case B] NotNext (무관 문장) ❌
문장 A: 비가 와서 우산을 챙겼다.
문장 B: 오늘 주식 시장이 상승 마감했다.
[CLS] 문장A [SEP] 문장B [SEP] 형태로 입력합니다[CLS] 토큰의 출력 벡터를 2-class Softmax 분류기에 통과시킵니다
[CLS]토큰은 "문장 전체의 의미를 집약한 벡터" 역할을 합니다. 모든 NLP 분류 문제에서 이 벡터가 prediction으로 사용됩니다.
두 가지 task의 Loss를 합산하여 동시에 최소화합니다.
Total Loss = MLM Loss + NSP Loss
이를 통해 BERT는 단어 수준의 이해(MLM)와 문장 수준의 이해(NSP)를 동시에 획득합니다.
BERT는 세 가지 임베딩의 합을 입력으로 사용합니다.
e = token_embed(x) + pos_embed(pos) + seg_embed(seg)
| 임베딩 종류 | 역할 | 차원 |
|---|---|---|
| Token Embedding | 각 단어/서브워드의 의미를 표현합니다 | (30,522, 768) |
| Segment Embedding | 첫 번째 문장(0)과 두 번째 문장(1)을 구분합니다 | (2, 768) |
| Position Embedding | 토큰의 순서 위치 정보를 담습니다 | (512, 768) |
WordPiece 토크나이징 예시:
- "달리기" →
달리+##기- "공부하다" →
공부+##하다##는 앞 토큰에 이어지는 서브워드임을 나타냅니다
| 토큰 | 역할 |
|---|---|
[CLS] | 모든 입력의 맨 앞에 위치하며, 분류 task의 출력으로 사용됩니다 |
[SEP] | 두 문장을 구분하는 구분자 역할을 합니다 |
[MASK] | MLM 학습 시 가려진 단어 자리를 나타냅니다 |
💡MLM과 NSP는 사람이 레이블을 달지 않아도 데이터 자체에서 정답이 자동 생성됩니다. 이를 Self-supervised Learning이라고 하는데, 덕분에 인터넷의 모든 텍스트가 학습 데이터가 될 수 있습니다. BERT가 수십억 단어로 학습 가능한 이유가 바로 이것입니다.
Pre-training이 끝난 BERT에서 pre-training task layer를 제거하고, 해결할 task에 맞는 task-specific layer로 교체한 뒤 재학습합니다.
[Pre-training BERT] → pre-training layer 제거
→ task-specific layer 추가
→ n epoch 재학습 (Fine-Tuning)
입력: [CLS] 이 영화는 정말 감동적이었다. [SEP]
출력: [CLS] 토큰 → 분류 레이어 → Positive / Negative
입력: [CLS] 세종대왕은 언제 훈민정음을 창제했나요? [SEP] 훈민정음은 1443년에...
출력: 각 토큰 위치 벡터 → Start 위치, End 위치 예측
(본문 중 정답이 시작하는 위치 ~ 끝나는 위치를 찾습니다)
| Task | 입력 1 | 입력 2 |
|---|---|---|
| CoLA (문법 판별) | 문장 하나 | (없음) |
| QQP (질문 유사성) | 질문 A | 질문 B |
| QNLI (질문-답변 포함 여부) | 질문 | 단락 |
| SQuAD (질의응답) | 질문 | Wikipedia 단락 |
BERT는 기본적으로 두 문장 입력을 지원하도록 설계되었기 때문에, 대부분의 GLUE 태스크에 입력 구조 변경 없이 바로 적용할 수 있습니다.
General Language Understanding Evaluation — 하나의 NLP 모델을 여러 태스크에 대해 동시에 평가하는 벤치마크입니다.
BERT와 같은 전이학습 모델들의 성능을 비교하기 위한 표준 척도로 활용됩니다.
| Task | 설명 | 형식 |
|---|---|---|
| CoLA | 문장의 문법적 올바름을 판단합니다 | 이진 분류 |
| SST-2 | 영화 리뷰의 감성을 분류합니다 | 긍정/부정/중립 |
| MRPC | 두 문장이 같은 의미인지 판별합니다 (Paraphrase) | 이진 분류 |
| STS-B | 두 문장의 의미적 유사도를 측정합니다 | 0~5 점수 |
| QQP | 두 질문이 같은 의미인지 판별합니다 | 이진 분류 |
| MNLI | 문장 B가 문장 A에 대해 함의/모순/무관인지 분류합니다 | 3-class 분류 |
| QNLI | 문장이 질문의 답을 포함하는지 판별합니다 | 이진 분류 |
| RTE | MNLI와 유사하지만, 상대적으로 더 적은 데이터를 사용합니다 | 이진 분류 |
| WNLI | 애매한 대명사를 올바른 명사로 대체했는지 판별합니다 | 이진 분류 |
MRPC (Paraphrase 판별)
문장 A: 서울의 인구는 약 천만 명이다.
문장 B: 서울에는 약 1,000만 명의 사람이 살고 있다.
정답: True (같은 의미)
MNLI (문장 관계 추론)
문장 A (Premise): 경기에서 홈팀이 3-0으로 이겼다.
문장 B (Hypothesis): 홈팀이 경기에서 패배했다.
정답: Contradiction (모순)
SQuAD (질의응답)
Context: 세종대왕은 1443년에 훈민정음을 창제하였다. 이는 한국 고유의 문자 체계이다.
Question: 세종대왕이 훈민정음을 창제한 연도는?
Answer: 1443년
참고: SQuAD는 GLUE에 포함되지 않는 별도 벤치마크이지만, BERT 성능 평가에 함께 활용됩니다.
MLM과 NSP 모두 사람이 레이블을 달지 않아도 데이터 자체에서 정답이 자동으로 생성됩니다. 이를 Self-supervised Learning(자기지도학습) 이라고 합니다.
일반 지도학습: 입력 문장 + 사람이 달아준 레이블 → 학습
Self-supervised: 입력 문장에서 자동으로 [MASK] 생성 → 원래 단어가 레이블
사람이 주석 작업을 하지 않아도 인터넷의 모든 텍스트가 학습 데이터가 될 수 있습니다. 이것이 BERT가 수십억 단어로 학습 가능한 이유입니다.
NLP 기술을 누구나 쉽게 사용할 수 있도록 기술 민주화(Democratization) 를 목표로 하는 오픈소스 그룹입니다.
🔗 https://huggingface.co | https://github.com/huggingface
| 패키지 | 설명 |
|---|---|
| transformers | BERT, GPT, T5 등 최신 NLP 모델 구현체입니다 (PyTorch, TensorFlow, JAX 지원) |
| datasets | 대규모 NLP 데이터셋 허브입니다 |
| tokenizers | 고속 토크나이저 라이브러리입니다 |
| accelerate | Multi-GPU, TPU 학습을 지원합니다 |
from transformers import pipeline
# 감성 분석 (BERT 기반)
classifier = pipeline("sentiment-analysis", model="snunlp/KR-FinBert-SC")
result = classifier("오늘 출시된 신제품이 기대 이상으로 완성도가 높습니다.")
# [{'label': 'positive', 'score': 0.98}]
from transformers import BertTokenizer, BertForMaskedLM
import torch
# 한국어 BERT로 빈칸 채우기
tokenizer = BertTokenizer.from_pretrained("klue/bert-base")
model = BertForMaskedLM.from_pretrained("klue/bert-base")
text = "오늘 점심으로 [MASK]을 먹었다."
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
# 예측 단어: "김치찌개", "비빔밥", "라면" 등
[대규모 텍스트 데이터]
↓
Pre-training
(MLM + NSP)
↓
[BERT Pre-trained Model]
↓ ↓ ↓
감성 분석 질의응답 NER 태깅
Fine-tuning Fine-tuning Fine-tuning
| 용어 | 의미 |
|---|---|
| Pre-training | 대규모 데이터로 범용 언어 능력을 먼저 학습하는 단계입니다 |
| Fine-tuning | 특정 task 데이터로 pre-trained 모델을 미세조정하는 단계입니다 |
| MLM | 문장 내 일부 단어를 마스킹하고 맞추는 학습 방식입니다 |
| NSP | 두 문장의 연속성을 판별하는 이진 분류 학습입니다 |
| [CLS] | 문장 전체의 의미를 담는 분류용 특수 토큰입니다 |
| [SEP] | 두 문장을 구분하는 구분자 토큰입니다 |
| WordPiece | 단어를 서브워드 단위로 분리하는 토크나이징 방식입니다 |
| GLUE | 다양한 NLP task로 모델 성능을 평가하는 벤치마크입니다 |
| Self-supervised | 레이블 없이 데이터 자체에서 정답을 자동 생성하는 학습 방식입니다 |
Q1. BERT가 ELMo, GPT와 달리 "진정한 양방향(Truly Bidirectional)" 모델이라고 불리는 이유는?
정답 : ELMo는 앞→뒤, 뒤→앞 방향을 각각 독립적으로 학습한 뒤 결과를 합칩니다. GPT는 앞 단어만 보는 단방향입니다. BERT는 MLM(Masked Language Model) 방식으로 [MASK] 토큰을 예측할 때 앞뒤 문맥을 Transformer Encoder 안에서 동시에 참조하므로, 두 방향이 서로 영향을 주는 진정한 양방향 학습이 가능합니다.
Q2. BERT의 MLM에서 마스킹된 15% 토큰을 전부 [MASK]로 바꾸지 않고, 10%는 랜덤 단어로, 10%는 원래 단어 그대로 두는 이유는?
정답 : 전부 [MASK]로 바꾸면 모델이 "[MASK] 토큰이 있을 때만 예측하면 된다"고 학습합니다. 실제 Fine-tuning 및 추론 시에는 [MASK]가 등장하지 않으므로 Pre-training과 괴리가 생깁니다. 랜덤 단어와 원래 단어를 섞음으로써 모델이 모든 위치의 토큰이 잠재적으로 틀릴 수 있다고 학습하게 되어 더 강건하고 풍부한 표현을 배우게 됩니다.
Q3. BERT의 [CLS] 토큰은 왜 필요하며, Fine-tuning 시 어떻게 활용되는가?
정답 : Transformer는 입력 토큰 각각에 대해 출력 벡터를 생성합니다. 분류 task에서는 문장 전체를 대표하는 단일 벡터가 필요한데, 특정 단어 위치를 고르면 편향이 생깁니다. [CLS]는 항상 맨 앞에 위치하는 특수 토큰으로, Self-Attention을 거치며 문장 전체의 의미를 집약합니다. Fine-tuning 시 이 벡터에 분류 레이어를 붙여 감성 분석, MNLI 등 분류 task의 출력으로 사용합니다.
Q4. Feature-based Transfer Learning과 Fine-Tuning의 결정적 차이는 무엇이며, 언제 Feature-based 방식을 선택하는 것이 유리한가?
정답 : Feature-based는 Pre-trained 모델의 가중치를 고정(Frozen)한 채 출력 벡터만 뽑아 별도 모델의 입력으로 씁니다. Fine-Tuning은 Pre-trained 가중치 전체를 downstream task 데이터로 다시 업데이트합니다. 컴퓨팅 자원이 부족하거나 모델을 수정할 수 없는 환경, 혹은 여러 task에 동일한 임베딩을 재사용해야 할 때 Feature-based가 유리합니다. 반면 성능이 최우선이고 충분한 자원이 있다면 Fine-Tuning이 일반적으로 더 높은 성능을 냅니다.