자연어 전이학습 (NLP Transfer Learning)

이원준·2026년 4월 10일

NLP

목록 보기
8/9

1. 전이학습이란?

NLP 전이학습은 범용 언어 지식을 먼저 학습(Pre-training) 해두고, 내가 원하는 특정 task에 짧게 추가 학습(Fine-tuning) 하는 방식입니다.

✅ 전이학습의 두 가지 핵심 이점

이점설명실제 사례
Training Time 절감처음부터 학습할 필요 XGPT-3를 처음부터 학습하면 약 2개월 소요. 전이학습으로 며칠로 단축 가능
예측 성능 향상소량 데이터로도 높은 성능감성 분석 데이터 1,000개만 있어도 BERT fine-tuning으로 SOTA 근접이 가능

2. 전이학습의 두 가지 방법

방법 A: Feature-based Transfer Learning - 새로운 모델 생성/훈련

Pre-trained 모델의 출력(feature)을 새로운 모델의 입력으로 사용하는 방법입니다.

Pre-trained Model → [고정된 Feature 벡터] → 새로운 모델 학습

📌 비유: 잘 훈련된 요리사(pre-trained model)가 만든 육수(feature)를 가져다가, 내 식당에서 새로운 찌개 레시피(new model)로 요리하는 것과 같습니다.

  • Pre-trained 모델의 가중치(weight)는 변경하지 않습니다
  • 추출한 feature를 입력값으로 삼아 별도 모델을 새로 생성/훈련합니다
  • 대표 사례: ELMo

방법 B: Fine-Tuning

Pre-trained 가중치를 초기값으로 삼아, 동일한 모델 구조를 적은 데이터셋으로 추가 학습하는 방법입니다.

Pre-trained Model (가중치 복사) → 동일 모델을 downstream task로 미세조정

📌 비유: 영어를 이미 유창하게 구사하는 사람(pre-trained)이, 법률 번역사가 되기 위해 법률 용어만 추가로 익히는(fine-tuning) 것과 같습니다. 영어 실력은 그대로 유지하면서 전문성을 더하는 방식입니다.

  • Pre-trained 모델의 끝에 마지막 레이어(last layer)만 추가합니다
  • 기존 모델 전체를 downstream task 데이터로 다시 미세조정합니다
  • 대표 사례: BERT, GPT

Fine-Tuning 장단점 정리

장점단점
더 빠른 개발이 가능모델 크기가 큼 (BERT-Base: 417 MB)
필요한 데이터가 적음Fine-tuning 속도가 느림
더 나은 결과를 얻을 수 있음추론(Inference) 속도가 느림
언어의 많은 것이 이미 인코딩되어 있음특정 도메인 전문 용어를 모를 수 있음(Fine-Tuning을 통해 해결 가능)

3. 주요 Pre-trained 모델 비교

세 모델 모두 "언어를 대규모로 사전학습한 모델"이지만, 학습 방식구조가 다릅니다.

🔵 ELMo (Embeddings from Language Model) (RNN모델 → 더 이상 사용 X)

  • 구조: Bidirectional LSTM
  • 학습 방식: 앞→뒤, 뒤→앞 두 방향으로 각각 독립적으로 언어 모델을 학습합니다. (n-gram 방식)
  • 특징: 양방향으로 문맥을 파악하지만, 두 방향의 학습이 서로 독립적입니다(진정한 양방향이 아닙니다)

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


🟢 OpenAI GPT (Generative Pre-Training Transformer)

  • 구조: Transformer의 Decoder 12개를 쌓아서 구성합니다
  • 학습 방식: 이전 단어들만으로 다음 단어를 예측합니다 (단방향, autoregressive) (n-gram 방식) )(Decoder 사용 → 일방향)
  • 특징: 텍스트 생성에 강하지만, 문장 전체 맥락을 동시에 보지 못합니다

📌 비유: 추리 소설을 처음부터 읽으면서 "다음 장에 무슨 일이 일어날까?"를 예측하는 독자와 같습니다. 앞 내용만 보고 뒤를 추론합니다.


🔴 BERT (Bidirectional Encoder Representations from Transformers)

업로드중..

  • 구조: Transformer의 Encoder 12개(Base) 또는 24개(Large)를 쌓아서 구성합니다
  • 학습 방식: MLM(Masked Language Model) : 주변 단어의 context만을 보고 mask된 단어를 예측 + Next Sentence Prediction : 두 문장이 이어지는 문장인지 아닌지 맞추는 것 (Encoder → 양방향)
  • 특징: 앞뒤 문맥을 동시에 보고 학습합니다 → 진정한 양방향 이해

📌 비유: 빈칸 채우기 문제를 푸는 학생과 같습니다. "나는 오늘 학교에 ___을 타고 갔다"에서 앞 단어("학교에")와 뒤 단어("갔다")를 동시에 보고 "버스"를 채울 수 있습니다.

📊 세 모델 구조 비교 한눈에

ELMo:   [←LSTM]  +  [LSTM→]   (양방향 독립 학습)
GPT:    [→→→→→→→→→→→Decoder]  (단방향, 생성 특화)
BERT:   [Encoder ↔ Encoder ↔ Encoder]  (진정한 양방향)
모델아키텍처방향성강점
ELMoBidirectional LSTM양방향(독립)문맥 임베딩
GPTTransformer Decoder단방향텍스트 생성
BERTTransformer Encoder양방향(통합)언어 이해

참고: GPT-2는 GPT와 동일한 구조이지만 크기가 훨씬 큽니다. GPT-2의 두 번째 사이즈가 BERT의 가장 큰 모델 사이즈와 동일할 정도입니다.


4. BERT 완전 해부

📋 BERT 기본 스펙

항목BERT-BaseBERT-Large
Transformer Encoder 층 수12개24개
총 파라미터110M340M
파일 크기약 417 MB약 1.3 GB
어휘 사전 크기30,000 (영어) / 110,000 (104개국어)동일
  • 2018년 11월 Google이 발표
  • 104개 다국어 모델을 동시에 발표
  • 파생 모델: ALBERT, RoBERTa, TinyBERT, DistilBERT, SpanBERT
  • Pre-trained 토큰 임베딩 방식: WordPiece 사용

🚀 BERT의 학습 전략

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)에서 인간 수준을 능가했습니다.


✅ BERT가 할 수 있는 것 vs. 없는 것

CAN DO ✅CANNOT DO ❌
텍스트 분류 (Classification)다음 단어 예측 (Language Model)
개체명 인식 (NER)텍스트 생성 (Text Generation)
품사 태깅 (POS Tagging)번역 (Translation)
질의응답 (Question Answering)

BERT는 "이해(Understanding)" 에 특화된 모델입니다. "생성(Generation)" 은 GPT 계열의 영역입니다.


5. BERT의 학습 방법

BERT는 두 가지 Task를 동시에 학습하여 언어를 이해하는 능력을 키웁니다.


Task 1: Masked Language Modeling (MLM)

핵심 아이디어: 문장에서 일부 단어를 가리고, 주변 맥락으로 그 단어를 맞추도록 합니다.

마스킹 규칙

전체 학습 데이터 토큰의 15%를 선택하여 아래와 같이 처리합니다.

처리 방식비율설명
[MASK] 토큰으로 교체80%가장 일반적인 마스킹 방식입니다
랜덤 단어로 교체10%노이즈 주입으로 일반화 성능을 높입니다
원래 단어 유지10%태깅만 변경하고 실제 단어는 그대로 둡니다

예시

원문:  오늘 저는 도서관에 가서 파이썬 책을 빌렸습니다.

입력:  오늘 저는 [MASK]에 가서 파이썬 [MASK]을 빌렸습니다.
정답:  도서관, 책

BERT는 앞 단어 "파이썬"과 뒤 단어 "빌렸습니다"를 동시에 보고 "[MASK] = 책"이라고 예측합니다.

Loss 계산 방식

  • [MASK] 위치의 예측만 loss에 반영됩니다
  • Non-masked 단어는 loss 계산에서 제외됩니다
  • Encoder 출력 상단에 Softmax 분류 레이어를 추가하여 단어 확률 분포를 예측합니다

Task 2: Next Sentence Prediction (NSP)

핵심 아이디어: 두 문장이 실제로 연속된 문장인지 판별하는 이진 분류 학습입니다.

학습 데이터 구성

전체 학습 pair의 50%는 실제 연속 문장, 나머지 50%는 무작위 추출 문장으로 구성됩니다.

[Case A] IsNext (연속 문장) ✅
문장 A: 비가 와서 우산을 챙겼다.
문장 B: 덕분에 옷이 젖지 않았다.

[Case B] NotNext (무관 문장) ❌
문장 A: 비가 와서 우산을 챙겼다.
문장 B: 오늘 주식 시장이 상승 마감했다.

작동 원리

  1. 두 문장을 [CLS] 문장A [SEP] 문장B [SEP] 형태로 입력합니다
  2. Transformer 전체를 통과시킨 후
  3. [CLS] 토큰의 출력 벡터를 2-class Softmax 분류기에 통과시킵니다
  4. IsNext / NotNext 를 예측합니다

[CLS] 토큰은 "문장 전체의 의미를 집약한 벡터" 역할을 합니다. 모든 NLP 분류 문제에서 이 벡터가 prediction으로 사용됩니다.


🔗 BERT 목적 함수

두 가지 task의 Loss를 합산하여 동시에 최소화합니다.

Total Loss = MLM Loss + NSP Loss

이를 통해 BERT는 단어 수준의 이해(MLM)와 문장 수준의 이해(NSP)를 동시에 획득합니다.


📐 BERT의 입력 임베딩 구조

BERT는 세 가지 임베딩의 합을 입력으로 사용합니다.

e = token_embed(x) + pos_embed(pos) + seg_embed(seg)

예시: "내 강아지는 귀엽다 [SEP] 그는 공놀이를 좋아한다"

임베딩 종류역할차원
Token Embedding각 단어/서브워드의 의미를 표현합니다(30,522, 768)
Segment Embedding첫 번째 문장(0)과 두 번째 문장(1)을 구분합니다(2, 768)
Position Embedding토큰의 순서 위치 정보를 담습니다(512, 768)

WordPiece 토크나이징 예시:

  • "달리기" → 달리 + ##기
  • "공부하다" → 공부 + ##하다
  • ##는 앞 토큰에 이어지는 서브워드임을 나타냅니다

특수 토큰

토큰역할
[CLS]모든 입력의 맨 앞에 위치하며, 분류 task의 출력으로 사용됩니다
[SEP]두 문장을 구분하는 구분자 역할을 합니다
[MASK]MLM 학습 시 가려진 단어 자리를 나타냅니다

💡MLMNSP는 사람이 레이블을 달지 않아도 데이터 자체에서 정답이 자동 생성됩니다. 이를 Self-supervised Learning이라고 하는데, 덕분에 인터넷의 모든 텍스트가 학습 데이터가 될 수 있습니다. BERT가 수십억 단어로 학습 가능한 이유가 바로 이것입니다.


6. BERT Fine-tuning

🔧 Fine-tuning 과정

Pre-training이 끝난 BERT에서 pre-training task layer를 제거하고, 해결할 task에 맞는 task-specific layer로 교체한 뒤 재학습합니다.

[Pre-training BERT] → pre-training layer 제거
                   → task-specific layer 추가
                   → n epoch 재학습 (Fine-Tuning)

분류 Task vs 비분류 Task

Classification Task (분류)

입력: [CLS] 이 영화는 정말 감동적이었다. [SEP]
출력: [CLS] 토큰 → 분류 레이어 → Positive / Negative

Non-Classification Task (질의응답 등)

입력:  [CLS] 세종대왕은 언제 훈민정음을 창제했나요? [SEP] 훈민정음은 1443년에...
출력:  각 토큰 위치 벡터 → Start 위치, End 위치 예측
       (본문 중 정답이 시작하는 위치 ~ 끝나는 위치를 찾습니다)

GLUE Task별 Fine-tuning 입력 구조

Task입력 1입력 2
CoLA (문법 판별)문장 하나(없음)
QQP (질문 유사성)질문 A질문 B
QNLI (질문-답변 포함 여부)질문단락
SQuAD (질의응답)질문Wikipedia 단락

BERT는 기본적으로 두 문장 입력을 지원하도록 설계되었기 때문에, 대부분의 GLUE 태스크에 입력 구조 변경 없이 바로 적용할 수 있습니다.


7. GLUE 벤치마크

GLUE란?

General Language Understanding Evaluation — 하나의 NLP 모델을 여러 태스크에 대해 동시에 평가하는 벤치마크입니다.

BERT와 같은 전이학습 모델들의 성능을 비교하기 위한 표준 척도로 활용됩니다.

9가지 Task 구성

Task설명형식
CoLA문장의 문법적 올바름을 판단합니다이진 분류
SST-2영화 리뷰의 감성을 분류합니다긍정/부정/중립
MRPC두 문장이 같은 의미인지 판별합니다 (Paraphrase)이진 분류
STS-B두 문장의 의미적 유사도를 측정합니다0~5 점수
QQP두 질문이 같은 의미인지 판별합니다이진 분류
MNLI문장 B가 문장 A에 대해 함의/모순/무관인지 분류합니다3-class 분류
QNLI문장이 질문의 답을 포함하는지 판별합니다이진 분류
RTEMNLI와 유사하지만, 상대적으로 더 적은 데이터를 사용합니다이진 분류
WNLI애매한 대명사를 올바른 명사로 대체했는지 판별합니다이진 분류

📌 GLUE Task 예시

MRPC (Paraphrase 판별)

문장 A: 서울의 인구는 약 천만 명이다.
문장 B: 서울에는 약 1,000만 명의 사람이 살고 있다.
정답: True (같은 의미)

MNLI (문장 관계 추론)

문장 A (Premise):    경기에서 홈팀이 3-0으로 이겼다.
문장 B (Hypothesis): 홈팀이 경기에서 패배했다.
정답: Contradiction (모순)

SQuAD (질의응답)

Context:  세종대왕은 1443년에 훈민정음을 창제하였다. 이는 한국 고유의 문자 체계이다.
Question: 세종대왕이 훈민정음을 창제한 연도는?
Answer:   1443년

참고: SQuAD는 GLUE에 포함되지 않는 별도 벤치마크이지만, BERT 성능 평가에 함께 활용됩니다.


Self-supervised Learning이란?

MLM과 NSP 모두 사람이 레이블을 달지 않아도 데이터 자체에서 정답이 자동으로 생성됩니다. 이를 Self-supervised Learning(자기지도학습) 이라고 합니다.

일반 지도학습:    입력 문장 + 사람이 달아준 레이블 → 학습
Self-supervised: 입력 문장에서 자동으로 [MASK] 생성 → 원래 단어가 레이블

사람이 주석 작업을 하지 않아도 인터넷의 모든 텍스트가 학습 데이터가 될 수 있습니다. 이것이 BERT가 수십억 단어로 학습 가능한 이유입니다.


8. HuggingFace — 실전 활용 도구

HuggingFace란?

NLP 기술을 누구나 쉽게 사용할 수 있도록 기술 민주화(Democratization) 를 목표로 하는 오픈소스 그룹입니다.

🔗 https://huggingface.co | https://github.com/huggingface

주요 패키지

패키지설명
transformersBERT, GPT, T5 등 최신 NLP 모델 구현체입니다 (PyTorch, TensorFlow, JAX 지원)
datasets대규모 NLP 데이터셋 허브입니다
tokenizers고속 토크나이저 라이브러리입니다
accelerateMulti-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

9. 핵심 개념 정리

용어의미
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이 일반적으로 더 높은 성능을 냅니다.


0개의 댓글