본문 바로가기

ML-DL/LLM

DPO [Direct Preference Optimization] 이란?

1. DPO ?

LLM 에서 사람의 피드백을 반영하여 성능을 최적화하는 방법 이다. Preference Optimization 을 통해 모델이 사람의 선호도를 직접 반영하는 응답을 생성하도록 학습하는 기법이다. 기존의 강화 학습과는 다르며, RLHF [Reinforcement Learning with Human Feedback] 를 대체하거나 보완하는 목적으로 사용된다.

 

2. 학습 방법

핵심 아이디어는 사람이 선호하는 응답을 모델이 더 잘 예측하도록 하는 것이다. 일반적으로 선호되는 응답 $x_{preferred}$ 과 그렇지 않은 응답 $x_{non-preferred}$ 을 모델이 비교하여 선호되는 응답을 더 높은 확률로 예측할 수 있도록 모델을 업데이트 한다.

 

1. 특정 질문에 대해 여러 응답을 생성한 뒤 사람의 피드백을 통해 선호하는 응답과 그렇지 않은 응답을 파악한다.

 

2. 각 질문에 대한 응답 페어를 사용해 모델이 어떤 응답을 선호하는지 비교한다. 선호되는 응답에 더 높은 점수를 할당하는 방향으로 모델이 업데이트 된다.

  • 선호되는 응답 $x_{preferred}$ 과 그렇지 않은 응답 $x_{non-preferred}$ 의 로그 확률을 계산한다.
    • $x_{preferred}$ 의 로그 확률 = $P(x_{preferred}|context)$
    • $x_{non-preferred}$ 의 로그 확률 = $P(x_{non-preferred}|context)$
  • 목표 함수
    • 최대우도추정(MLE) 기반의 loss 함수를 사용한다.
    • $\textit{L}_{DPO} = −logσ(P(x_{preferred}|context)−P(x_{non-preferred}|context))$
      • $\sigma$ 는 시그모이드 함수로 $\sigma(z) = \frac{1}{1+e^{-z}}$ 이다.
      • 위의 loss 함수는 선호된 응 답이 더 높은 확률을 갖도록 최적화 한다.

3. 모델이 사람의 피드백을 최대한 반영할 수 있도록 직접적인 최적화를 사용한다.

 

import torch
import torch.nn.functional as f

# preferred와 non-preferred 응답의 로그 확률
# -1.5와 -1.5은 예시로 임의로 설정된 로그 확률 값
# 학습 과정에서 모델은 각 응답에 대해 로그 확률(log probability) 값을 출력
# 이 값들은 모델의 예측 결과에 의해 실제 학습 시에는 동적으로 변경됨
log_probs_preferred = torch.tensor([-1.5], requires_grad=True)    # 선호되는 응답의 로그 확률
log_probs_non_preferred = torch.tensor([-1.5], requires_grad=True) # 비선호되는 응답의 로그 확률

def dpo_loss(log_probs_preferred, log_probs_non_preferred):

    # 선호도 차이를 계산하고 시그모이드 적용 후 음의 로그를 취함
    diff = log_probs_preferred - log_probs_non_preferred
    loss = -torch.log(torch.sigmoid(diff))
    return loss

# DPO 손실 계산
loss = dpo_loss(log_probs_preferred, log_probs_non_preferred)
print("DPO Loss:", loss.item())

# 역전파 수행 (학습 시 사용)
loss.backward()

 

3. 장점

기존 강화 학습 기법에서 사용되는 샘플링과 보상 모델 없이 선호도 데이터만으로 직접 최적화 할 수 있으며, 직접적인 최적화를 통해 학습 과정이 상대적으로 안정적이다. 또한 보상 모델이나 탐색 과정이 필요하지 않기 때문에 학습에 필요한 자원이 상대적으로 적다.

 

4. 한계점

복잡한 상호작용이나 긴 대화에서 일관성을 유지해야 하는 경우 제한적이다. 이를 보완하기 위해 RLHF 와 병행하여 사용되기도 한다.

 

5. 사례

문장을 생성하거나 요약시 사람의 피드백을 활용하여 더 자연스럽고 유창한 문장을 생성할 수 있으며, 대화형 챗봇 응답에 특정 스타일이나 응답 톤을 유지할 수 있다. 또한 추천 시스템에서 추천 항목을 최적화할 때 사용되기도 한다.