RLHF vs DPO vs KTO: LLM 정렬(Alignment) 기법 완벽 비교 가이드

들어가며

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단계)

  1. SFT(Supervised Fine-Tuning): 고품질 데이터셋으로 지도 학습
  2. 보상 모델 학습: 인간 선호도 데이터로 보상 모델(Reward Model) 훈련
  3. 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 개발, 레거시 피드백 데이터 활용

실무 체크리스트

  1. 데이터 준비
    – RLHF/DPO: 최소 1만~10만 개의 선호도 쌍
    – KTO: 최소 5천~5만 개의 이진 피드백

  2. 컴퓨팅 리소스
    – RLHF: A100 GPU 8개 이상, 수일~수주
    – DPO: A100 GPU 2~4개, 수시간~수일
    – KTO: A100 GPU 1~2개, 수시간

  3. 평가 지표
    – 인간 평가: 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

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다