모델

DPO

Direct Preference Optimization

"이 답이 저 답보다 낫다"는 선호 쌍 데이터만으로 모델을 직접 학습시키는 정렬 방법으로, RLHF와 달리 보상 모델과 강화학습이 필요 없어 구현이 간단하고 학습이 안정적이다. SFT로 지시 따르기를 먼저 가르친 모델에 말투·형식·도메인 선호를 입힐 때 쓴다.

방법필요한 데이터학습 과정난이도
SFT질문 + 모범 답안정답을 따라 쓰게 학습쉬움
DPO질문 + 좋은 답 + 나쁜 답손실 함수 하나로 바로 학습쉬움
RLHF (PPO)선호 데이터 + 보상 모델보상 모델 학습 후 강화학습어려움

보상 모델 없이 선호를 배운다

RLHF는 사람의 선호로 보상 모델을 먼저 학습한 뒤, PPO로 그 점수가 오르도록 모델을 고친다. 모델 여러 개를 함께 띄워야 하고 설정에 민감해서 학습이 쉽게 불안정해진다.

DPO는 이 과정을 하나로 줄였다. 좋은 답이 나올 확률은 올리고 나쁜 답이 나올 확률은 내리면서, 학습 전 모델을 기준(reference) 모델로 고정해 두고 거기서 너무 멀어지지 않게 한다. 논문 제목처럼 언어 모델이 스스로 보상 모델 역할을 하는 셈이다.

TRL로 학습하는 순서

Hugging Face TRL 라이브러리의 DPOTrainer를 쓰면 바로 시작할 수 있다. 보통 아래 순서로 진행한다.

단계할 일
1. 기반 모델SFT까지 마친 모델을 준비한다
2. 데이터prompt, chosen, rejected 세 열로 정리한다
3. 설정beta로 기준 모델에서 벗어나는 정도를 정한다
4. 평가실제 질문을 넣어 학습 전 모델과 답을 비교한다

GPU 메모리가 부족하면 LoRA 같은 PEFT와 함께 쓴다. 어댑터만 학습하므로 어댑터를 끈 원래 모델을 기준 모델로 쓸 수 있어, 모델을 하나 더 띄우지 않아도 된다.

결과는 beta와 데이터 품질이 좌우한다

beta를 크게 잡으면 원래 모델에 가깝게 남고, 작게 잡으면 선호 데이터 쪽으로 더 많이 바뀐다. 기본값에서 시작한 뒤 답변이 무너지거나 변화가 너무 적으면 조정한다.

더 중요한 건 데이터다. chosen과 rejected의 차이가 분명해야 한다. 좋은 답이 늘 더 길기만 하면 모델은 품질 대신 길게 쓰는 버릇을 배운다. 같은 데이터로 너무 오래 학습하면 과적합되어 답변이 어색해질 수 있다.

새 지식이 아니라 고르는 법을 가르친다

DPO는 모델이 이미 낼 수 있는 답 가운데 어떤 쪽을 고를지 다듬는 방법이다. 모르는 지식이나 처음 보는 형식은 넣지 못하므로 그런 건 SFT로 먼저 가르친다.

상황선택
새 지식이나 형식을 처음 가르칠 때SFT
답변 비교 피드백이 쌓였을 때DPO
좋아요/싫어요만 있고 짝이 없을 때KTO 같은 변형

사내 피드백을 비교 쌍 형태로 모아 두었다가 주기적으로 DPO 학습을 돌리면, 우리 도메인에서 선호하는 답변 방식을 모델에 꾸준히 반영할 수 있다.

SFT 다음 단계로 답변을 다듬을 때 쓴다

가장 흔한 건 SFT 바로 다음 단계로 DPO를 한 번 더 돌리는 방식이다. 선호 쌍만 모이면 GPU 몇 장으로도 돌릴 수 있어서, 오픈 모델을 직접 튜닝하는 사람들이 많이 쓴다.

어디서어떻게 쓰나
오픈 모델 파인튜닝SFT로 지시 따르기를 가르친 뒤, 공개 선호 데이터셋으로 DPO를 돌려 대화 품질을 다듬는다
사내 챗봇·문서 검색 답변담당자가 고른 답과 버린 답을 쌍으로 모아 회사 말투와 답변 형식을 맞춘다
안전한 답변 조정적절히 거절한 답을 chosen, 위험한 답을 rejected로 두고 학습한다
AI 피드백으로 데이터 만들기사람 대신 더 큰 모델이 두 답 중 나은 쪽을 골라 선호 쌍을 싸게 만든다
#정렬#선호학습#RLHF대안
참고 자료
관련 영상
← AI Wiki에서 더 보기
updated at 2026-10-20