Skip to main content
< LLM 기초 목차로 돌아가기
LLM이 “똑똑한 챗봇”이 되기까지는 세 단계의 학습 과정을 거칩니다. 각 단계는 목적, 데이터, 비용이 완전히 다릅니다.

Stage 1: Pre-training (사전학습)

인터넷, 도서, 코드 저장소 등 수조 토큰 규모의 텍스트 데이터 를 사용하여 “다음 토큰 예측(Next-Token Prediction)” 과제를 학습합니다.
  • 데이터: 인터넷 크롤링 (Common Crawl), 위키피디아, 책, GitHub 코드 등
  • 규모: 수천 대의 GPU를 수 주~수 개월간 사용
  • 비용: 수백만~수천만 달러 (Llama 3 405B 학습에 GPU 약 16,000대 사용 추정)
  • 결과: 언어 패턴, 문법, 세계 지식을 학습하지만, 아직 “도움이 되는 어시스턴트”가 아님
이 단계의 모델은 프롬프트를 주면 단순히 텍스트를 이어서 생성할 뿐, 질문에 답하거나 지시를 따르지 못합니다.

Stage 2: Supervised Fine-Tuning (SFT, 지도 미세조정)

사람이 직접 작성한 (지시, 이상적인 응답) 쌍 데이터로 학습합니다.
  • 데이터: 인간 전문가(Demonstrator)가 작성한 고품질 (instruction, ideal_response) 쌍 — 수천~수만 개
  • 목적: 모델이 지시를 이해하고, 도움이 되는 방식으로 응답 하도록 행동을 정렬
  • 예시: “서울의 인구는?” → “서울의 인구는 약 950만 명입니다. (2024년 기준)”
  • 비용: Pre-training 대비 매우 적음 (GPU 수십 대, 수 일)

Stage 3: RLHF / DPO (인간 피드백 강화학습)

사람이 모델의 두 가지 출력을 비교하여 더 나은 응답을 선택 하는 선호 데이터를 수집하고, 이를 바탕으로 모델을 최적화합니다.
  • RLHF (Reinforcement Learning from Human Feedback): 선호 데이터로 보상 모델(Reward Model) 을 학습 → PPO(Proximal Policy Optimization) 알고리즘으로 LLM 최적화
  • DPO (Direct Preference Optimization): 보상 모델 없이 선호 데이터로 직접 LLM을 최적화하는 간소화된 방법
  • 효과: 안전성, 유용성, 무해성을 강화 — GPT-3를 ChatGPT로 변환한 핵심 단계
  • 비용: SFT와 유사하거나 약간 높음

3단계 비교 요약

항목Stage 1: Pre-trainingStage 2: SFTStage 3: RLHF/DPO
목적언어 패턴 학습지시 수행 능력 부여응답 품질·안전성 향상
데이터수조 토큰 (인터넷, 도서, 코드)수천~수만 (지시, 응답) 쌍수만 (응답 A vs B 선호) 쌍
컴퓨팅 비용수천 GPU × 수 개월 (수백만~수천만 달러)수십 GPU × 수 일 (수만 달러)수십 GPU × 수 일 (수만 달러)
모델이 배우는 것”다음에 올 단어가 뭘까?""질문에 어떻게 답해야 하지?""어떤 답변이 더 좋을까?”
비유수만 권의 책을 읽은 학생선생님의 시범을 보고 따라하는 학생피드백을 받고 답변을 개선하는 학생
참고 실무 포인트: 대부분의 기업은 Stage 1을 직접 하지 않습니다. Foundation Model API를 통해 이미 학습된 모델을 사용하고, 필요시 Stage 2(Fine-tuning)만 수행합니다. Databricks의 Mosaic AI Training은 Stage 2를 위한 관리형 환경을 제공합니다.

Stage 1.5: Continued Pre-Training (CPT, 도메인 특화 사전학습)

Stage 1(사전학습)과 Stage 2(SFT) 사이에 위치하는 선택적 단계 입니다. 범용 모델이 특정 도메인의 언어, 용어, 패턴을 충분히 학습하지 못한 경우, 도메인 특화 데이터로 추가 사전학습 을 수행합니다.

왜 CPT가 필요한가?

범용 LLM은 인터넷 텍스트로 학습되었기 때문에, 특정 도메인의 전문 용어나 패턴에 약할 수 있습니다.
도메인범용 모델의 한계CPT 학습 데이터 예시
금융재무제표 형식, 금융 규제 용어 이해 부족10-K/10-Q 보고서, 금융감독원 공시, 신용평가 보고서
법률법률 조항 인용 형식, 판례 구조 미숙판례 전문, 법률 조문, 계약서 샘플
의료의학 약어(Dx, Rx), 임상 기록 형식 미숙PubMed 논문, 임상 노트, 약물 데이터베이스
제조설비 코드, 품질 검사 용어 미숙설비 매뉴얼, 품질 보고서, 센서 로그 설명서

CPT 수행 방법

# Databricks Mosaic AI Training으로 CPT 수행 (개념 예시)
from databricks.model_training import foundation_model as fm

# 1. 도메인 데이터를 Delta 테이블에 준비
# 테이블: catalog.schema.finance_corpus (text 컬럼)

# 2. CPT 학습 실행
run = fm.create(
    model="meta-llama/Llama-3.3-70B",
    train_data_path="dbfs:/Volumes/catalog/schema/training/finance_corpus",
    task_type="CONTINUED_PRETRAIN",  # CPT 모드
    register_to="catalog.schema.finance_llama",
    training_duration="1ep",  # 1 epoch
    learning_rate="5e-6",     # 낮은 학습률로 기존 지식 보존
)
주의 CPT의 리스크: 학습률이 너무 높거나 데이터가 편향되면 Catastrophic Forgetting(파괴적 망각) 이 발생합니다. 모델이 도메인 지식을 얻는 대신 범용 능력을 잃는 현상입니다. 학습률을 낮게 설정하고(5e-6 이하), 도메인 데이터와 범용 데이터를 혼합하는 것이 좋습니다.

SFT 심화: 파라미터 효율적 파인튜닝 (PEFT)

Full Fine-Tuning의 문제

70B 모델을 Full Fine-Tuning하려면 수백 GB의 GPU 메모리 가 필요합니다. 대부분의 기업에게 현실적이지 않습니다.

LoRA (Low-Rank Adaptation)

LoRA는 원본 모델의 가중치를 동결(freeze) 하고, 각 레이어에 작은 행렬 쌍(A, B) 만 추가하여 학습합니다.
항목Full Fine-TuningLoRAQLoRA
학습 파라미터전체 (100%)0.1~1%0.1~1%
GPU 메모리 (70B 기준)~280GB (FP16)~80GB~24GB
학습 품질최고Full FT의 95~99%LoRA의 ~98%
학습 속도느림빠름빠름
# Databricks Mosaic AI Training에서 LoRA SFT
run = fm.create(
    model="meta-llama/Llama-3.3-70B",
    train_data_path="dbfs:/Volumes/catalog/schema/training/sft_data",
    task_type="INSTRUCTION_FINETUNE",
    register_to="catalog.schema.my_finetuned_model",
    training_duration="3ep",
    learning_rate="1e-4",
    # LoRA는 기본 활성화됨 — Mosaic AI Training이 자동으로 PEFT 적용
)

QLoRA (Quantized LoRA)

QLoRA는 LoRA에 양자화(Quantization) 를 결합합니다. 원본 모델을 4-bit로 양자화하여 메모리를 극적으로 줄이고, LoRA 어댑터만 16-bit로 학습합니다. 단일 A100 80GB GPU로 70B 모델 파인튜닝이 가능해집니다.

데이터 품질 vs 양: 무엇이 더 중요한가?

SFT에서 데이터 품질이 양보다 압도적으로 중요합니다.
연구핵심 발견
LIMA (Zhou et al., 2023)고품질 1,000개 예시로 SFT한 모델이 52K RLHF 데이터로 학습한 모델과 동등한 성능
Alpaca (Stanford, 2023)GPT-3.5가 생성한 52K 합성 데이터로도 유의미한 SFT 가능
Quality is All You Need데이터 10배 증가보다 품질 2배 향상이 성능에 더 큰 영향
참고 실무 가이드: SFT 데이터는 1,000~10,000개의 고품질 (instruction, response) 쌍 으로 시작하세요. 1만 개를 채우려고 품질을 낮추는 것보다, 1,000개를 도메인 전문가가 직접 작성하는 것이 훨씬 효과적입니다.

Catastrophic Forgetting 방지 전략

파인튜닝 시 모델이 기존에 학습한 범용 능력을 잃는 현상을 파괴적 망각(Catastrophic Forgetting) 이라고 합니다.
  • 낮은 학습률 사용: 1e-5 ~ 5e-5 범위. 너무 높으면 기존 지식을 빠르게 덮어씀
  • 학습 데이터 혼합: 도메인 데이터(70%) + 범용 데이터(30%)를 섞어 학습
  • LoRA 사용: 원본 가중치를 동결하므로 본질적으로 망각 위험이 낮음
  • 조기 종료(Early Stopping): 검증 세트의 성능이 떨어지기 시작하면 학습 중단

RLHF 이후 기법: 더 단순해지는 Alignment

RLHF는 강력하지만 복잡합니다. 보상 모델 학습 → PPO 최적화 라는 2단계 파이프라인이 불안정하고 하이퍼파라미터에 민감합니다. 이를 개선하기 위해 다양한 대안 기법이 등장했습니다.

주요 Alignment 기법 비교

기법필요한 것보상 모델핵심 아이디어복잡도
RLHF (PPO)선호 쌍 데이터필요보상 모델 학습 → PPO로 정책 최적화매우 높음
DPO선호 쌍 데이터불필요선호 데이터로 직접 LLM 최적화 (closed-form 해)중간
KTO좋음/나쁨 레이블만불필요쌍이 아닌 개별 응답에 좋다/나쁘다 레이블만으로 학습낮음
ORPO선호 쌍 데이터불필요SFT + Alignment를 한 단계로 통합낮음
SimPO선호 쌍 데이터불필요DPO를 단순화. 참조 모델(reference model) 불필요낮음

트렌드: 점점 단순해지는 Alignment

RLHF (2022) → DPO (2023) → KTO/ORPO (2024) → SimPO (2024)
   복잡              ← - - - - - - - - →              단순
  • RLHF: 보상 모델 + PPO. 4개의 모델을 동시에 관리 (기본 모델, 참조 모델, 보상 모델, 정책 모델)
  • DPO: 보상 모델 제거. 2개의 모델만 필요 (기본 모델, 참조 모델)
  • SimPO: 참조 모델도 제거. 1개의 모델만 필요
참고 실무적 선택: 2025년 기준, DPO가 가장 보편적인 선택 입니다. RLHF 대비 구현이 간단하면서 성능은 동등합니다. KTO는 선호 쌍을 구성하기 어려운 경우(예: 고객 피드백 “좋아요/싫어요”)에 유용합니다.

합성 데이터로 SFT 데이터 생성

고품질 SFT 데이터를 사람이 직접 작성하는 것은 비용이 높습니다. 강력한 모델(Teacher) 을 활용하여 SFT 데이터를 자동 생성하는 기법이 널리 사용됩니다.

Self-Instruct

  1. 소수의 시드(seed) instruction을 작성 (수십 개)
  2. LLM이 시드를 참고하여 새로운 instruction을 생성
  3. 각 instruction에 대해 LLM이 응답을 생성
  4. 품질 필터링 (중복 제거, 길이 필터, 독성 검사)

Evol-Instruct (WizardLM)

기존 instruction을 점진적으로 복잡하게 진화 시킵니다.
원본: "서울의 인구를 알려주세요"
  ↓ 깊이 진화 (Deepening)
진화 1: "서울의 인구 변화 추이를 10년 단위로 설명하고, 감소 원인을 분석하세요"
  ↓ 너비 진화 (Widening)
진화 2: "서울과 도쿄의 인구 변화를 비교하고, 도시화 정책의 차이를 논하세요"

Databricks에서의 합성 데이터 파이프라인

import mlflow
from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

# 1. 시드 데이터 준비 (소수의 고품질 예시)
seed_instructions = [
    {"instruction": "...", "response": "..."},
    # 50~100개
]

# 2. Foundation Model API로 합성 데이터 생성
def generate_synthetic_pair(seed):
    prompt = f"""다음 예시를 참고하여, 유사한 스타일의 새로운 instruction과 response 쌍을 생성하세요.

예시:
Instruction: {seed['instruction']}
Response: {seed['response']}

새로운 쌍을 JSON으로 출력:"""

    response = w.serving_endpoints.query(
        name="databricks-claude-sonnet-4",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.8,
    )
    return response.choices[0].message.content

# 3. 대량 생성 후 Delta 테이블에 저장
# 4. 품질 필터링 (중복 제거, 독성 검사, 길이 필터)
# 5. SFT 학습 데이터로 사용
주의 합성 데이터 주의사항: 합성 데이터만으로 학습하면 Model Collapse 현상이 발생할 수 있습니다. Teacher 모델의 편향이 증폭되어 다양성이 감소합니다. 반드시 인간 작성 데이터와 혼합(최소 20~30%)하는 것을 권장합니다.

Databricks에서의 학습 단계별 활용

학습 단계Databricks 지원대상 기업비고
Stage 1: Pre-trainingMosaic AI Training (대규모)AI 연구 기관, 대기업 AI 랩수천만 달러 소요. 대부분의 기업은 불필요
Stage 1.5: CPTMosaic AI Training도메인 특화가 필수인 기업 (법률, 의료)수백만 달러. 필요성 신중히 검토
Stage 2: SFT (LoRA)Mosaic AI Training대부분의 기업수만 달러. 가장 실용적인 커스텀 방법
Stage 3: DPOMosaic AI Training응답 품질/안전성이 중요한 기업SFT 이후 추가 정렬
합성 데이터 생성Foundation Model API + SparkSFT 데이터가 부족한 기업비용 효율적 데이터 확보
Fine-tuning 없이 사용Foundation Model API + RAG가장 많은 기업80%+ 사용 사례에 충분
참고 현실적 가이드: 대부분의 기업 GenAI 프로젝트는 Fine-tuning 없이 Foundation Model API + RAG + Prompt Engineering 으로 시작하는 것이 올바른 접근입니다. SFT는 RAG로 해결할 수 없는 형식/스타일/도메인 용어 문제가 있을 때만 고려하세요.

< 이전: 핵심 개념 | 다음: LLM 내부 작동 직관적 이해 >