들어가며
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 정렬은 지속적인 실험과 평가가 필요한 영역입니다. 자신의 상황에 맞는 기법을 선택하고, 작게 시작해서 점진적으로 개선해나가세요.
이 글이 도움이 되셨나요? ☕
Buy me a coffee
답글 남기기