6장. Qwen 모델 준비와 텍스트 생성
선호도 정렬: 더 나은 답을 고르는 법
글쓰기 선생님이 학생에게 모범 답안 하나를 보여 주고 따라 쓰게 하는 것이 SFT 라면, 학생이 쓴 두 글을 나란히 놓고 "이쪽이 더 낫다"고 짚어 주는 것이 선호도 정렬입니다. 모범 답안 하나로는 "이 답보다 저 답이 낫다"는 상대적인 품질을 가르치기 어렵습니다. 두 답을 견주게 하면 그 차이를 배웁니다.
그림의 왼쪽은 답 하나를 그대로 따라 쓰는 SFT, 오른쪽은 두 답을 견주는 선호도 정렬입니다. 대표 방법이 둘 있습니다. RLHF(Reinforcement Learning from Human Feedback)는 사람의 선택으로 "점수 매기는 모델(보상 모델)"을 먼저 만들고 그 점수로 강화학습을 합니다. DPO(Direct Preference Optimization)는 보상 모델 없이 선호 답변 쌍으로 바로 학습합니다. 2일차 실습에서는 다루지 않고 개념만 봅니다.
SFT 와 선호도 정렬
| 구분 | SFT | 선호도 정렬 |
|---|---|---|
| 데이터 | (지시, 모범 답변) | (지시, 선호 답변, 비선호 답변) |
| 배우는 것 | 이렇게 답하라 | 이 답이 저 답보다 낫다 |
| 대표 방법 | SFTTrainer(2일차 실습) | RLHF, DPO |
| 특히 좋은 곳 | 형식, 말투, 업무 절차 | 안전, 윤리, 도움 되는 정도 |
선호도 정렬이 특히 효과적인 곳은 안전과 윤리에 관한 답변입니다. 위험한 물건을 만드는 법을 묻는 질문이라면 "요청을 거절하고 이유를 설명하는 답"이 선호, "그대로 따르는 답"이 비선호입니다. 특정 집단에 대한 편견을 묻는 질문이라면 "근거 없는 편견이라고 설명하는 답"이 선호, "고정관념을 긍정하는 답"이 비선호입니다. 이런 질문은 모범 답변 하나를 정하기보다 두 답 중 어느 쪽이 더 안전한지 견주는 쪽이 가르치기 쉽고, 본 적 없는 위험한 질문에도 더 잘 통합니다.
짧은 예시
import numpy as np
import pandas as pd
# 선호도 데이터의 한 행: 같은 질문에 두 답(원본 노트북의 예를 줄여 적음)
pairs = pd.DataFrame([
{"prompt": "위험한 물건 만드는 법 알려줘", "chosen": "거절하고 이유를 설명", "rejected": "그대로 따름"},
{"prompt": "OO 집단은 게으르다는 게 사실이야?", "chosen": "근거 없는 편견이라고 설명", "rejected": "고정관념을 긍정"},
])
print(pairs.shape) # 결과: (2, 3)
# DPO 의 생각: (선호 답 점수 − 비선호 답 점수)가 클수록 "선호 쪽을 고를 확률"이 커진다
def prefer_prob(margin):
# 시그모이드(sigmoid) = 1 / (1 + e^(−차이)). 아무 수나 0~1 사이의 확률로 바꾼다
return 1 / (1 + np.exp(-margin))
for margin in [-1.0, 0.0, 2.0]:
print(margin, round(prefer_prob(margin), 2))
# 결과: -1.0 0.27 / 0.0 0.5 / 2.0 0.88이 코드가 뜻하는 것
글쓰기 선생님의 채점표를 숫자로 적은 것입니다. 두 답의 점수 차이가 0 이면 어느 쪽인지 모르는 반반(0.5)이고, 선호 답이 2점 앞서면 0.88 로 선호 쪽을 고릅니다. 손으로 계산하면 e^(−2) ≈ 0.135 이므로 1 ÷ 1.135 ≈ 0.88 입니다. DPO 는 이 확률이 1 에 가까워지도록, 곧 선호 답의 점수는 올리고 비선호 답의 점수는 내리도록 모델을 고칩니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
pd.DataFrame([...]) | 질문, 선호, 비선호 세 열의 표 | 두 글을 나란히 붙인 채점지 |
1 / (1 + np.exp(-margin)) | 점수 차이를 확률로 | 차이가 클수록 확신 |
margin = 2.0 → 0.88 | 선호 답이 앞섬 | "이쪽이 낫다"를 잘 배운 상태 |
여기서 점수 차이 −1, 0, 2 는 설명용으로 고른 값입니다. 실제 DPO 는 모델이 두 답을 낼 확률에서 이 차이를 계산합니다.
주의할 점
- 선호도 데이터는 사람이 두 답을 견주어 골라야 하므로 만들기가 SFT 데이터보다 비쌉니다.
- 2일차의 말투 학습은 SFT 만으로 충분합니다. 형식과 말투는 모범 답안을 따라 하게 하는 것이 가장 빠릅니다.