
Direct Preference Optimization(DPO)은 모델을 인간의 선호에 맞추기 위한 학습 방법입니다. 기존 RLHF처럼 별도의 보상 모델을 학습하고 강화학습 절차를 거치는 대신, 더 선호되는 출력과 덜 선호되는 출력을 직접 비교해 모델을 조정합니다. DPO 논문은 이 방식을 더 단순하고 안정적인 대안으로 설명합니다.1
핵심은 “정답을 맞히는가”를 넘어 “어떤 출력이 더 나은가”를 학습한다는 점입니다. 그래서 DPO는 챗봇 응답 개선뿐 아니라, 출력 품질을 비교 기준으로 판단할 수 있는 다양한 생성 작업에 적용될 수 있습니다.
DPO가 배우는 것은 정답이 아니라 선호다
일반적인 선호 학습 데이터셋은 세 가지 열로 구성됩니다. 프롬프트, 선택된 응답, 거부된 응답입니다.2 사람은 같은 프롬프트에 대한 모델 출력들을 비교해 더 나은 쪽에 순위를 매기고, 모델은 선택된 응답의 확률을 높이고 거부된 응답의 확률을 낮추는 방향으로 학습합니다.
이 접근이 유용한 이유는 사전학습만으로 포착하기 어려운 기준을 반영할 수 있기 때문입니다. 예를 들어 지시사항을 더 잘 따르는 답변, 더 유용한 응답, 유해 콘텐츠를 피하는 행동은 단순한 다음 토큰 예측만으로 안정적으로 통제하기 어렵습니다.2 DPO는 이런 기준을 “좋은 출력과 나쁜 출력의 비교”라는 형태로 모델에 주입합니다.
왜 챗봇 밖에서도 중요한가
DPO는 흔히 대화형 모델 튜닝과 함께 언급되지만, 원리는 챗봇에만 묶여 있지 않습니다. 중요한 조건은 하나입니다. 특정 작업에서 좋은 출력과 나쁜 출력을 일관되게 구분할 수 있어야 합니다.
DharmaOCR 사례는 이 점을 보여줍니다. DharmaOCR는 4월 Hugging Face에 공개된 구조화 OCR 모델이며, 논문 벤치마크는 브라질 포르투갈어 텍스트 OCR 문서 추출 과제를 대상으로 했습니다. 테스트된 오픈소스 모델 계열의 기본 텍스트 degeneration rate는 1% 미만에서 33% 초과까지 다양했습니다. 이후 SFT를 거친 뒤 DPO를 적용하자, 테스트된 모든 모델 계열에서 텍스트 degeneration이 줄었습니다. DPO 적용 후 평균 감소율은 59.4%, 최고 감소율은 87.6%였습니다.3
여기서 얻을 수 있는 교훈은 단순히 “OCR에도 DPO를 붙일 수 있다”가 아닙니다. 문서 추출처럼 출력 품질을 단일 정답만으로 평가하기 어려운 작업에서도, 더 나은 출력과 더 나쁜 출력의 비교쌍을 만들 수 있다면 DPO가 모델 행동을 교정하는 실용적인 방법이 될 수 있다는 점입니다.
적용 전 확인해야 할 것
DPO는 RLHF보다 절차가 단순하지만, 튜닝 설계가 사라지는 것은 아닙니다. 가장 먼저 봐야 할 것은 선호 데이터의 품질입니다. 선택된 응답과 거부된 응답의 차이가 명확하지 않거나, 라벨링 기준이 일관되지 않으면 모델도 불안정한 기준을 배웁니다.
두 번째는 인프라입니다. TRL 라이브러리의 DPOTrainer는 별도 보상 모델 없이 인간 선호에 모델을 정렬하는 방식으로 설명됩니다.2 다만 실제 학습에서는 메모리 사용량을 줄이기 위해 bfloat16 정밀도, FSDP, Gradient Checkpointing 같은 기법을 함께 사용할 수 있습니다.2 FSDP로 여러 GPU에 모델 가중치를 샤딩해 학습했다면, 학습 후 샤딩된 가중치를 하나의 모델 파일로 다시 모으는 절차도 필요합니다.2
따라서 DPO를 검토할 때의 질문은 간단합니다.
이 작업에서 좋은 출력과 나쁜 출력을 안정적으로 구분할 수 있는가?
그 차이를 선호 데이터로 일관되게 만들 수 있는가?
학습에 필요한 메모리와 분산 학습 절차를 감당할 수 있는가?
이 조건이 맞는다면 DPO는 챗봇뿐 아니라 OCR 같은 구조화 출력 작업에서도 모델을 원하는 방향으로 조정하는 실용적인 선택지가 됩니다. 결론은 명확합니다. DPO의 가치는 특정 모델 유형이 아니라, “비교 가능한 선호”를 학습 신호로 바꿀 수 있다는 데 있습니다.
1Direct Preference Optimization: Your Language Model is Secretly a Reward Model
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
