15. 실전사례 — 현장의 목소리, JoyCaption의 DPO 실전기
자주 하는 실수와 요약
자주 하는 실수
| 실수 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 정답과 가장 크게 다른 엉터리(마진이 가장 넓은 것)를 적으면 대비가 확실하다고 봄 | 1, 2 | 줄일 수 있는 오답은 그 실수가 얼마나 자주 나오느냐로 정해진다. 모델이 내지 않는 실수는 고칠 것이 없다 |
| 비선호 응답이 모델의 분포 안에 있기만 하면 좋은 쌍이라고 봄 | 2 | 마진이 좁으면 고칠 실수가 없고 심사 순서도 흔들린다. 넓은 마진과 실제 실수, 둘 다 필요조건이다 |
| 무작위 쌍의 평균 차이를 0으로 계산 | 3 | 차이는 "큰 쪽 − 작은 쪽"이라 늘 0 이상이다. 차이의 절댓값의 평균을 구해야 한다 |
| 후보 수를 절반으로 줄이면 양 끝 마진도 절반이 된다고 봄 | 4 | 맨 끝 값은 후보 수에 비례하지 않고 아주 느리게 자란다(2개 1.69 → 5개 3.49 → 10개 4.62점) |
| 심사 점수로 고른 쌍의 관측 마진을 진짜 마진으로 봄 | 5 | 점수가 극단인 응답에는 오차도 극단인 것이 섞인다(승자의 저주). 크기는 부풀려지고, 깎는 몫은 오차와 품질의 분산 비가 정한다 |
| 양 끝 쌍에 라벨 오류가 더 많다고 봄 | 5 | 품질 차이가 함께 커져 부호는 오히려 더 믿을 만해진다. 남은 오류율에 맞춰 cDPO의 ε을 정한다 |
| 레퍼런스만 고정하면 DPO 데이터를 재활용할 수 있다고 봄 | 6 | 고정하면 이미 배운 쌍이라 거의 밀리지 않고, 비선호 응답은 그 모델의 실수라 모델이 바뀌면 분포 밖 데이터가 된다 |
요약
JoyCaption은 SFT 모델의 헛발질(9.6%)을 줄이려고 오프라인 DPO를 골랐다. 좋은 선호쌍은 마진이 넓을 뿐 아니라 비선호 응답이 모델이 실제로 저지르는 실수여야 한다. 그래서 후보를 현재 모델로 뽑았다. 무작위로 짝지은 쌍은 대부분 비슷비슷해 보상 정확도가 60%에서 멈췄고, 응답마다 점수를 매겨 양 끝을 묶는 마진 기반 필터링으로 마진을 키우자 결함률이 9.6%에서 3.0%, 2라운드 뒤 1.5%로 떨어졌다. 심사 오차가 있으면 이렇게 고른 쌍의 마진 크기는 부풀려지지만 부호는 오히려 더 믿을 만해진다. 그리고 비선호 응답이 특정 모델의 실수이므로 DPO 데이터셋은 그 모델에만 유효한 일회용이며, 라운드마다 새로 만들어야 한다.