들어가며
LLM(Large Language Model)을 실무에 적용할 때 가장 중요한 과정 중 하나가 바로 정렬(Alignment)입니다. 아무리 강력한 언어 모델이라도 인간의 의도와 가치관에 맞게 조정되지 않으면 유해하거나 부정확한 결과를 생성할 수 있습니다.
최근 LLM 정렬 기법으로 RLHF(Reinforcement Learning from Human Feedback), DPO(Direct Preference Optimization), KTO(Kahneman-Tversky Optimization)가 주목받고 있습니다. 이 글에서는 세 가지 기법의 핵심 원리와 차이점, 그리고 실무 적용 방법을 상세히 비교합니다.
LLM 정렬(Alignment)이란?
LLM 정렬은 사전 학습된 모델이 인간의 의도, 선호도, 가치관에 부합하는 출력을 생성하도록 미세 조정하는 과정입니다.
정렬이 필요한 이유
- 안전성: 유해하거나 편향된 콘텐츠 생성 방지
- 유용성: 사용자 질문에 정확하고 도움이 되는 답변 제공
- 신뢰성: 일관되고 예측 가능한 행동 패턴 확립
정렬되지 않은 모델은 기술적으로 완벽해도 실무에서 사용하기 어렵습니다.
RLHF: 강화학습 기반 정렬
핵심 원리
RLHF는 인간 피드백을 보상 신호로 활용하여 강화학습으로 모델을 학습시키는 방법입니다.
학습 프로세스 (3단계)
- SFT(Supervised Fine-Tuning): 고품질 데이터셋으로 지도 학습
- 보상 모델 학습: 인간 선호도 데이터로 보상 모델(Reward Model) 훈련
- RL 최적화: PPO 알고리즘으로 정책 모델 최적화
# RLHF 보상 모델 학습 예시 (의사 코드)
from transformers import AutoModelForSequenceClassification
# 보상 모델 초기화
reward_model = AutoModelForSequenceClassification.from_pretrained(
"gpt2-large",
num_labels=1
)
# 선호도 데이터: (prompt, chosen_response, rejected_response)
for prompt, chosen, rejected in preference_data:
reward_chosen = reward_model(prompt + chosen)
reward_rejected = reward_model(prompt + rejected)
# 선호하는 응답이 더 높은 보상을 받도록 학습
loss = -log_sigmoid(reward_chosen - reward_rejected)
loss.backward()
장단점
장점
– 복잡한 인간 선호도를 효과적으로 학습
– OpenAI GPT-4, Anthropic Claude 등에서 검증된 방법
– 다양한 목표 함수 설계 가능
단점
– 학습 과정이 복잡하고 불안정함
– 보상 모델 학습에 많은 데이터 필요
– 계산 비용이 매우 높음 (3단계 학습)
– PPO 하이퍼파라미터 튜닝이 까다로움
DPO: 직접 선호도 최적화
핵심 원리
DPO는 보상 모델 없이 선호도 데이터로 직접 언어 모델을 최적화하는 혁신적인 방법입니다. RLHF의 복잡한 강화학습 과정을 단순한 분류 문제로 재구성합니다.
수학적 직관
DPO는 Bradley-Terry 선호도 모델을 활용하여 다음 손실 함수를 최소화합니다:
Loss = -E[log σ(β log(π_θ(y_w|x) / π_ref(y_w|x)) - β log(π_θ(y_l|x) / π_ref(y_l|x)))]
y_w: 선호하는 응답 (chosen)y_l: 선호하지 않는 응답 (rejected)π_θ: 학습 중인 정책 모델π_ref: 참조 모델 (SFT 모델)β: 온도 파라미터
# DPO 학습 예시
from transformers import AutoModelForCausalLM
import torch.nn.functional as F
model = AutoModelForCausalLM.from_pretrained("llama-2-7b")
ref_model = AutoModelForCausalLM.from_pretrained("llama-2-7b")
ref_model.eval() # 고정
for prompt, chosen, rejected in preference_data:
# 로그 확률 계산
chosen_logp = model(prompt + chosen).log_prob
rejected_logp = model(prompt + rejected).log_prob
chosen_logp_ref = ref_model(prompt + chosen).log_prob
rejected_logp_ref = ref_model(prompt + rejected).log_prob
# DPO 손실
chosen_ratio = chosen_logp - chosen_logp_ref
rejected_ratio = rejected_logp - rejected_logp_ref
loss = -F.logsigmoid(beta * (chosen_ratio - rejected_ratio))
loss.backward()
장단점
장점
– RLHF 대비 구현이 간단하고 안정적
– 보상 모델 학습 불필요 (계산 비용 감소)
– 하이퍼파라미터 튜닝이 용이
– 학습 속도가 빠름
단점
– 쌍(pair) 데이터가 반드시 필요
– 복잡한 다중 목표 최적화에는 제한적
– 참조 모델 메모리 필요
KTO: 이진 피드백 기반 최적화
핵심 원리
KTO는 쌍 비교 없이 단일 응답에 대한 이진 피드백(좋음/나쁨)만으로 학습하는 최신 기법입니다. 행동경제학의 Kahneman-Tversky 가치 함수에서 영감을 받았습니다.
학습 방식
KTO는 다음과 같은 비대칭 손실을 사용합니다:
Loss = E[v(KL(π_θ||π_ref), y)]
- 긍정 피드백(y=1): 참조 모델에서 멀어지도록 유도
- 부정 피드백(y=0): 참조 모델에 가까워지도록 유도
# KTO 학습 예시
for prompt, response, is_desirable in feedback_data:
logp = model(prompt + response).log_prob
logp_ref = ref_model(prompt + response).log_prob
kl = logp - logp_ref
if is_desirable:
# 긍정: KL 증가 허용 (탐색)
loss = -torch.min(kl - lambda_d, torch.zeros_like(kl))
else:
# 부정: KL 감소 강제 (회피)
loss = torch.max(kl + lambda_u, torch.zeros_like(kl))
loss.backward()
장단점
장점
– 쌍 데이터 불필요 – 레이블링 비용 대폭 절감
– 실무 데이터(좋아요/싫어요) 직접 활용 가능
– 데이터 효율성이 높음
단점
– 비교적 새로운 기법 (검증 사례 부족)
– 미묘한 선호도 차이 학습에 한계
– 하이퍼파라미터 선택이 중요
세 가지 기법 비교
| 항목 | RLHF | DPO | KTO |
|---|---|---|---|
| 학습 복잡도 | 높음 (3단계) | 중간 (1단계) | 낮음 (1단계) |
| 데이터 요구사항 | 선호도 쌍 + 대량 | 선호도 쌍 | 이진 피드백 |
| 계산 비용 | 매우 높음 | 중간 | 낮음 |
| 안정성 | 불안정 (PPO) | 안정적 | 안정적 |
| 성능 | 최고 | 높음 | 중상 |
| 실무 적용 난이도 | 어려움 | 보통 | 쉬움 |
| 대표 사례 | GPT-4, Claude | Llama-2-chat, Zephyr | 연구 단계 |
실전 적용 가이드
상황별 추천 기법
RLHF를 선택해야 할 때
– 최고 수준의 성능이 필수적인 경우
– 충분한 컴퓨팅 자원과 전문 인력 보유
– 복잡한 다중 목표 최적화 필요
– 예시: 범용 AI 어시스턴트, 고급 챗봇
DPO를 선택해야 할 때
– RLHF 수준의 성능을 합리적인 비용으로 원할 때
– 선호도 쌍 데이터 확보 가능
– 빠른 실험과 반복이 중요
– 예시: 도메인 특화 챗봇, 오픈소스 모델 파인튜닝
KTO를 선택해야 할 때
– 쌍 데이터 구축이 어려운 경우
– 사용자 피드백(좋아요/평점)이 이미 존재
– 빠른 프로토타이핑과 비용 절감 우선
– 예시: MVP 개발, 레거시 피드백 데이터 활용
실무 체크리스트
-
데이터 준비
– RLHF/DPO: 최소 1만~10만 개의 선호도 쌍
– KTO: 최소 5천~5만 개의 이진 피드백 -
컴퓨팅 리소스
– RLHF: A100 GPU 8개 이상, 수일~수주
– DPO: A100 GPU 2~4개, 수시간~수일
– KTO: A100 GPU 1~2개, 수시간 -
평가 지표
– 인간 평가: Win rate, Elo rating
– 자동 평가: GPT-4 심사, Reward Bench
– 안전성: Toxicity score, Bias 테스트
하이브리드 접근
실무에서는 여러 기법을 조합하는 것이 효과적입니다:
1. SFT로 기본 능력 확보
2. DPO로 초기 정렬 (빠르고 안정적)
3. RLHF로 최종 미세 조정 (선택적)
작은 실험으로 시작해 점진적으로 확장하는 것이 성공 확률을 높입니다.
최신 트렌드
2024~2025년 주요 발전
- RLHF 대안들의 부상: DPO 계열(IPO, CPO, SimPO) 기법들이 빠르게 발전
- 데이터 효율성: 적은 데이터로 더 나은 성능 달성
- 온라인 학습: 실시간 사용자 피드백 반영
- 다중 모달 정렬: 이미지, 비디오 생성 모델로 확장
오픈소스 도구
- TRL (Transformer Reinforcement Learning): Hugging Face의 RLHF/DPO 라이브러리
- OpenRLHF: 대규모 RLHF 학습 프레임워크
- Axolotl: 다양한 정렬 기법 지원 파인튜닝 툴킷
마무리
LLM 정렬은 더 이상 선택이 아닌 필수입니다. 세 가지 주요 기법을 정리하면:
| 핵심 요약 | |
|---|---|
| RLHF | 최고 성능, 높은 복잡도와 비용 |
| DPO | 균형잡힌 성능과 효율성, 현재 최고의 실용성 |
| KTO | 낮은 데이터 장벽, 빠른 실험에 최적 |
실무 권장 사항:
– 대부분의 경우 DPO로 시작하는 것이 가장 합리적
– 프로토타이핑 단계에서는 KTO 고려
– 충분한 리소스가 있다면 RLHF로 최고 성능 추구
LLM 정렬은 지속적인 실험과 평가가 필요한 영역입니다. 자신의 상황에 맞는 기법을 선택하고, 작게 시작해서 점진적으로 개선해나가세요.
Did you find this helpful?
Your support keeps this blog running and ad-free content coming.
☕ Buy me a coffeeMost Popular Posts
- Custom Metaclass in Python: 43% Faster Validation (12,795 views)
- Python match-case: 7 Patterns That Beat if-elif Chains (947 views)
- YOLOv8 INT8 Quantization: 4x Faster on Jetson Orin (763 views)
- yfinance Alternatives 2026: 7 Free APIs Compared (655 views)
- PaddleOCR vs EasyOCR vs Tesseract: Why PaddleOCR Is Slower (551 views)