본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] RLHF 성능 해결을 위한 PPO vs DPO 차이와 보상 모델 편향성 제어하는 7가지 방법

by Papa Martino V 2026. 4. 25.
728x90

PPO vs DPO
PPO vs DPO

 

인간 피드백 기반 강화학습(RLHF)은 거대 언어 모델(LLM)을 인간의 의도에 맞게 정렬(Alignment)하는 핵심 기술입니다. 하지만 많은 개발자들이 PPO(Proximal Policy Optimization)의 복잡성과 DPO(Direct Preference Optimization)의 불안정성 사이에서 고민하며, 특히 보상 모델(Reward Model)이 특정 데이터에 편향되어 모델 전체의 성능을 망치는 문제를 겪고 있습니다. 본 포스팅에서는 보상 모델의 편향성을 해결하기 위한 실무적인 방법과 두 알고리즘의 결정적 차이를 심도 있게 분석합니다.


1. RLHF의 두 줄기: PPO와 DPO의 아키텍처적 차이점

과거에는 보상 모델을 별도로 학습시켜 강화학습을 수행하는 PPO 방식이 주를 이루었으나, 최근에는 보상 모델 없이 직접 선호도 데이터를 학습하는 DPO가 각광받고 있습니다. 그러나 DPO 역시 암묵적인 보상 모델링을 수행하기 때문에 '편향성' 문제에서 자유로울 수 없습니다.

비교 항목 PPO (Proximal Policy Optimization) DPO (Direct Preference Optimization)
보상 모델(RM) 필요성 별도의 별도 RM 학습 필수 RM 없이 직접 확률 분포 학습
계산 복잡도 매우 높음 (Actor, Critic, RM, Ref 모델 필요) 낮음 (Reference 모델과 Policy 모델만 필요)
훈련 안정성 하이퍼파라미터에 매우 민감 (불안정) 상대적으로 안정적이나 과적합 위험 존재
편향성 발생 지점 RM의 스칼라 값 편향 데이터셋 내의 암묵적 선호도 편향
추천 시나리오 복잡한 다중 목표 최적화가 필요할 때 빠른 반복과 리소스 효율이 중요할 때

2. 보상 모델의 편향성 해결을 위한 7가지 실무 구현 예제 (Python/PyTorch)

보상 모델이 특정 문체나 길이에 편향되어 가짜 보상(Reward Hacking)을 만들어내는 문제를 해결하기 위한 7가지 구현 전략입니다.

Example 1: Reward 모델의 오버피팅 방지를 위한 L2 정규화와 드롭아웃

보상 모델이 특정 레이블러의 성향에 과적합되는 것을 막기 위한 기본 설정입니다.

import torch.nn as nn

class RobustRewardModel(nn.Module):
    def __init__(self, base_model):
        super().__init__()
        self.config = base_model.config
        self.backbone = base_model
        # 드롭아웃을 통해 특정 토큰에 대한 과도한 보상 집중 해결
        self.v_head = nn.Sequential(
            nn.Dropout(0.1),
            nn.Linear(self.config.hidden_size, 1, bias=False)
        )

    def forward(self, input_ids, attention_mask):
        features = self.backbone(input_ids, attention_mask=attention_mask).last_hidden_state
        # EOS 토큰의 임베딩을 사용하여 보상 계산
        reward = self.v_head(features[:, -1, :])
        return reward
        

Example 2: 랭킹 손실 함수(Pairwise Loss)에서 Margin 적용

선호 데이터와 비선호 데이터 사이의 보상 차이를 명확히 하여 편향을 해결합니다.

import torch.nn.functional as F

def pairwise_loss(chosen_reward, rejected_reward, margin=0.5):
    # 단순 시그모이드보다 Margin을 추가하여 RM이 더 확실한 근거를 갖게 함
    return -F.logsigmoid(chosen_reward - rejected_reward - margin).mean()
        

Example 3: KL Divergence Penalty를 통한 정책 이탈 방지

PPO 학습 시 원본 모델(Reference)에서 너무 멀어지지 않도록 제어하여 보상 편향의 부작용을 막습니다.

def compute_kl_penalty(log_probs, ref_log_probs, kl_coeff=0.1):
    # KL Penalty = log(P/Ref)
    kl_div = log_probs - ref_log_probs
    weighted_kl = kl_coeff * kl_div
    return weighted_kl
        

Example 4: 보상 점수 화이트닝 (Reward Whitening)

보상 값의 분포를 표준화하여 특정 배치에서의 비정상적인 보상 값 편향을 해결합니다.

def reward_whitening(rewards):
    # 보상의 평균을 0, 표준편차를 1로 맞춤
    mean = rewards.mean()
    std = rewards.std()
    return (rewards - mean) / (std + 1e-8)
        

Example 5: DPO 구현 시 Reference 모델 가중치 고정 (Frozen Reference)

암묵적 보상 모델 역할을 하는 Reference 모델이 변하지 않도록 관리하여 학습의 기준점을 유지합니다.

# Reference 모델은 학습되지 않도록 명시적으로 설정
ref_model.eval()
for param in ref_model.parameters():
    param.requires_grad = False
        

Example 6: 데이터 다양성 확보를 위한 가중치 샘플링 (Importance Sampling)

학습 데이터 내 클래스 불균형에 의한 편향을 줄이기 위한 방법입니다.

from torch.utils.data import WeightedRandomSampler

# 샘플별 가중치를 부여하여 편향된 주제의 노출 빈도를 조절
weights = [1.0 / count[label] for label in dataset_labels]
sampler = WeightedRandomSampler(weights, len(weights))
        

Example 7: 보상 모델 앙상블 (Reward Ensemble)

여러 개의 보상 모델 결과값을 평균 내어 단일 모델의 편향성을 상쇄합니다.

def ensemble_reward(models, inputs):
    rewards = [model(**inputs) for model in models]
    # 여러 모델의 의견을 종합하여 중립적인 보상 산출
    return torch.mean(torch.stack(rewards), dim=0)
        

3. 보상 해킹(Reward Hacking) 식별 및 해결 전략

모델이 실제 답변의 질을 높이기보다 보상 점수만 높이기 위해 문장을 비정상적으로 길게 만들거나, 무의미한 긍정 표현을 남발하는 현상을 '보상 해킹'이라고 합니다. 이를 해결하기 위해서는 다음의 지표를 상시 모니터링해야 합니다.

  • Response Length Correlation: 답변 길이와 보상 점수의 상관관계가 0.8 이상이면 길이 편향이 발생한 것입니다.
  • Entropy Collapse: 모델의 출력 토큰 다양성이 급격히 줄어든다면 특정 패턴에 보상이 집중된 것입니다.
  • Evaluation with GPT-4: 학습된 RM의 점수와 외부 강력한 모델(GPT-4 등)의 평가 점수 간의 괴리를 확인하십시오.

4. 결론 및 향후 전망

RLHF는 단순히 기술적인 알고리즘 적용을 넘어, '데이터의 질''보상의 정교함'을 관리하는 공학적 프로세스입니다. PPO의 정교한 제어력과 DPO의 효율성을 적절히 선택하되, 무엇보다 보상 모델의 편향성을 제어하는 것이 성공의 열쇠입니다. 최신 연구에 따르면 보상 모델을 아예 제거하는 것이 아니라, 더 작은 보상 모델들로 세분화하여 다중 목표(Safety, Helpfulness, Honesty)를 각각 최적화하는 방향으로 진화하고 있습니다.


내용 출처 및 인용 문헌

  • Schulman, J., et al. (2017). "Proximal Policy Optimization Algorithms." arXiv.
  • Rafailov, R., et al. (2023). "Direct Preference Optimization: Your Language Model is Secretly a Reward Model." NeurIPS.
  • Ouyang, L., et al. (2022). "Training language models to follow instructions with human feedback." OpenAI.
  • Hugging Face TRL Library Documentation 
728x90