나쁜 예로는 나쁜 답에서 멀어지고 KL 페널티로는 레퍼런스 근처에 머무는데, 나쁜 예와 KL 페널티라는 두 걸음을 손실 하나에 어떻게 담을까? 두 걸음을 합치는 세 번째 걸음이 DPO다.
역사: 2023년의 지름길
DPO는 2023년 스탠퍼드 대학의 라파일로프(Rafael Rafailov), 샤르마(Archit Sharma), 미첼(Eric Mitchell), 에르몬(Stefano Ermon), 매닝(Christopher Manning), 핀(Chelsea Finn)이 발표했다. 논문 서론에 적힌 고민은 이렇다. 사람이 쓴 방대한 글로 학습한 언어 모델은 사람들의 절반이 믿는 흔한 오해까지 배운다. 모델이 그 오해를 아는 것은 괜찮지만, 그 오해를 묻는 질문의 절반에서 오해가 옳다고 답해서는 안 된다. 모델이 이미 가진 넓은 지식 가운데 바라는 답과 행동을 골라내야 하는데, 데이터를 그대로 흉내 내는 학습만으로는 이 골라내기가 되지 않는다는 것이다. 당시 골라내는 방법은 여러 단계를 거쳤고, 논문은 그 절차를 「복잡하고 자주 불안정하다」고 적었다. 연구진은 같은 목표를 분류 문제처럼 간단한 손실 하나로 풀 수 있음을 보였다. 논문은 그해 NeurIPS에 실렸고, 학회가 뽑은 우수 논문 준우승(Outstanding Main Track Runner-Up) 두 편 가운데 하나가 되었다. 이름의 "직접(Direct)"은 보상 모델을 따로 학습하는 단계를 거치지 않는다는 뜻이다. 그 단계가 무엇이었는지는 이 장 끝에서 다시 묻는다.
당시 절차는 보상 모델을 먼저 학습하고 학습 도중 계속 답을 뽑는 RL 단계를 거쳤고, DPO는 같은 선호 데이터에서 손실 하나로 바로 모델을 학습한다(Rafailov 외 2023, arXiv 2305.18290 그림 1을 이 책의 낱말과 색으로 다시 그림, CC BY 4.0).
김민준
손실 하나로 풀었다는 게 그렇게 대단한 일이에요? 좋은 답 확률은 올리고 나쁜 답은 내리는 손실이면 과제로 짜 볼 만한데요.
선생님
민준 학생, 그때 목표는 KL로 묶은 RL이었어요. 앞 절에서 본 대로 RL은 기댓값을 누구의 답에서 취하죠?
김민준
모델이 직접 쓴 답이요. 그럼 학습하는 도중에도 계속 답을 뽑아 봐야 하겠네요.
선생님
그래서 논문도 당시 절차가 언어 모델을 여러 개 학습시키고, 학습 루프 안에서 답을 생성해야 해서 계산이 많이 든다고 적었어요.
이서연
뽑지 말고, 나올 수 있는 답을 다 늘어놓고 기댓값을 바로 계산하면 안 돼요?
선생님
낱말이 5만 개인 모델이 100토큰짜리 답을 쓴다면, 나올 수 있는 답은 몇 가지예요?
이서연
5만을 100번 곱하니까… 10의 470제곱쯤이에요. 다 늘어놓는 건 꿈도 못 꾸니 뽑아 볼 수밖에 없었구나.
김민준
그런데 DPO 식에는 데이터에 있는 두 답의 로그확률만 들어가요. 뽑지 않고도 학습이 된다면, 그 두 답의 확률을 그냥 비교하는 걸로 충분한 걸까요?
손실이 0이 아닌 것은, 레퍼런스와 똑같이 구분하는 것이 "잘하는 것"이 아니라 "출발선"이기 때문이다. 레퍼런스가 이미 90 대 10으로 구분하던 쌍이라면, 지금 모델도 90 대 10이면 아직 한 일이 없다.
그렇다면 흔히 하는 요약 "좋은 답의 확률은 올리고 나쁜 답은 내린다"는 DPO 손실을 제대로 말하는가? 좋은 답과 나쁜 답의 확률이 함께 움직이면 손실은 어느 쪽으로 갈까? 아래 문제들에서 따져 보자.
문제 4: 떡볶이가 끼어든 급식 투표
작년 급식 메뉴 투표에서 짜장면이 60표, 짬뽕이 20표를 받았다. 올해는 떡볶이가 새 후보로 들어와 표가 나뉘었고, 짜장면 30표, 짬뽕 10표, 떡볶이 40표가 나왔다. (가) 올해 학생들은 짬뽕과 비교해 짜장면을 덜 좋아하게 되었는가? (나) 올해 짬뽕이 10표 대신 5표였다면?
김민준
짜장면이 60표에서 30표로 반토막 났으니 인기가 떨어졌죠.
선생님
민준 학생, 물은 건 짬뽕과 비교해서예요. 짬뽕은 어떻게 됐죠?
김민준
짬뽕도 20표에서 10표로 반이에요. 작년에도 올해도 짜장면이 짬뽕의 세 배네요. 떡볶이가 둘에게서 똑같은 비율로 표를 가져갔을 뿐이고요.
이서연
(나)면 짜장면이 짬뽕의 여섯 배야. 짜장면 표는 줄었는데 짬뽕보다는 오히려 더 앞선 거지.
선생님
그래요. "몇 표가 줄었나"와 "상대의 몇 배인가"는 서로 다른 물음이에요.
정리 (가) 아니다. 작년 60 : 20도, 올해 30 : 10도 3배이므로, 떡볶이가 두 메뉴의 표를 같은 비율로 가져갔다. (나) 30 : 5는 6배라서, 짜장면 표 자체는 줄었어도 짜장면이 짬뽕보다 더 앞선다.
문제 5: 둘 다 반으로 떨어지면
레퍼런스 모델이 "서울"과 "부산"에 0.6, 0.2의 확률을 준다. 학습 도중의 지금 모델은 “서울” 0.3, “부산” 0.1을 준다(나머지 확률은 다른 답들로 옮겨 갔다). 좋은 답 "서울"의 확률이 반으로 줄었다. (가) 이 쌍의 DPO 손실은 학습을 시작할 때보다 커졌는가? 값을 구하시오. (나) 이 손실만으로 학습하면 "서울"의 확률이 줄어드는 것을 막을 수 있는가?
김민준
정답 확률이 0.6에서 0.3으로 반토막 났으니 손실이 커졌겠죠. 학습이 뒤로 간 거잖아요.
똑같네요. 괄호 안이 0이라 손실은 −logσ(0)≈0.693, 학습을 시작할 때와 같아요.
이서연
둘 다 반이 되면 비율은 3 대 1 그대로니까. 로그확률의 차이는 두 확률의 비율만 보고, 둘이 함께 얼마나 올라가고 내려갔는지는 못 봐.
선생님
그럼 (나)는요? 이 손실이 "서울"의 확률 자체를 지켜 주나요?
이서연
못 지켜요. 서울과 부산이 같은 비율로 계속 떨어져도 손실은 그대로예요. 0.03과 0.01로 떨어져도 같아요. 선호 쌍 바깥의 다른 답으로 확률이 새어 나가도 이 손실은 모르는 거예요.
김민준
문제 4(급식 투표)랑 같네요. 짜장면 표가 반으로 줄어도 짬뽕보다 세 배 인기인 건 그대로였잖아요.
정리 (가) Δθ=log(0.3/0.1)=log3=Δref 이므로 z=0 이고, 손실은 −logσ(0)=log2≈0.693 으로 학습을 시작할 때의 값과 같다. (나) 막지 못한다. DPO 손실은 좋은 답과 나쁜 답의 확률의 비율만 보므로, 둘이 같은 비율로 줄어 확률이 선호 쌍 바깥으로 새어 나가도 손실은 변하지 않는다.
문제 6: β가 크면 레퍼런스에서 멀어지나
레퍼런스보다 마진을 z=Δθ−Δref 만큼 더 벌렸다. (가) z=2 일 때 β=0.1 과 β=1 에서 손실은 각각 얼마인가? (나) 손실을 0.2까지 낮추려면 두 β 에서 z 가 각각 얼마여야 하는가? (다) β 를 크게 하면 학습된 모델은 레퍼런스 근처에 머무는가, 멀리 가는가?
선생님
서연 학생, (가)부터 볼까요. 같은 z=2 인데 손실이 같던가요?
이서연
일단 σ 안에 βz를 넣어 볼게요. β=0.1 이면 σ 안이 0.2라서 −logσ(0.2)≈0.598, β=1 이면 −logσ(2)≈0.127 이에요.
선생님
마진은 똑같이 2인데 손실이 꽤 다르네요. 어디서 달라졌어요?
이서연
β가 괄호 앞에 곱해지니까요. 마진을 조금만 벌려도 σ 안의 값이 커져서 손실이 금방 0에 가까워져요.
선생님
그럼 (다)는 어느 쪽일 것 같아요?
이서연
조금만 움직여도 만족하니까… 레퍼런스 근처에 머물 것 같아요. 아직은 감이에요.
김민준
난 반대로 생각했어. β가 크면 그래디언트도 β배로 커지니까 더 많이 움직이지 않을까?
선생님
둘 다 식의 한 부분씩을 보고 있어요. 민준 학생, (나)를 계산해 보죠. 손실을 0.2까지 낮추려면 z 가 얼마나 필요해요?
김민준
−logσ(βz)=0.2 면 σ(βz)=e−0.2≈0.819 라서 βz≈1.51 이에요.
선생님
그건 βz 하나의 값이죠. 두 β에 나눠 보면요?
김민준
β=1 이면 z≈1.5, β=0.1 이면 z≈15…
김민준
큰 β는 1.5만 벌리면 끝나요. 거기서부터는 σ가 1에 붙어서 −log σ의 그래디언트도 0으로 사라지니까, 처음 몇 스텝만 크고 금방 멈춰요. 작은 β는 15까지, 확률의 비율로 치면 레퍼런스보다 약 350만 배를 더 벌려야 하고요.
선생님
그래요. 그래서 큰 β는 정책을 레퍼런스 가까이 붙잡아 두는 강한 KL 페널티예요. 레퍼런스 근처의 작은 차이로도 손실이 채워지니까요. 작은 β는 그 반대고요. KL로 묶은 RL의 최적 정책 π* ∝ π_ref·exp(R/β) 에서도 보여요. β가 크면 지수가 0에 가까워져 π*가 π_ref 에 붙거든요.
김민준
리포트 분량 제한 같네요. 제한이 빡빡하면 금방 다 채우고 더 쓸 게 없는.
정리 (가) β=0.1: −logσ(0.2)≈0.598, β=1: −logσ(2)≈0.127. (나) βz≈1.51 이어야 하므로 β=1 이면 z≈1.5, β=0.1 이면 z≈15.1. (다) 큰 β → 작은 마진 변화로도 손실이 포화 → 레퍼런스 근처에 머문다(강한 KL 페널티). 작은 β → 멀리 가야 손실이 줄어든다(약한 KL 페널티).
문제 7: (킬러) 확률은 올랐는데
레퍼런스가 “서울” 0.5, “부산” 0.01을 주던 쌍에서 지금 모델은 “서울” 0.8, “부산” 0.1을 준다. 좋은 답의 확률은 0.5에서 0.8로 올랐고 나쁜 답도 겨우 0.09 올랐을 때, 이 쌍의 손실은 0.693보다 작은가, 큰가?
김민준
앞에서 배웠죠, 손실은 비율만 봐요. 지금 모델은 서울이 부산의 0.8/0.1 = 8배예요. 8배나 앞서니까 잘 구분하는 거고, 손실은 0.693보다 작아요.
그런데 선생님, 반대로 레퍼런스가 부산에 0.0001을 줬다면 0.001로만 올라도 10배잖아요. 그렇게 작은 확률 변화에 이렇게 민감한 게 맞나요?
선생님
좋은 질문이에요. 그 민감함이 DPO의 힘이자 약점이에요. 로그 눈금에서는 작은 확률일수록 조금만 움직여도 크게 변하니까, 거의 안 나오던 답 하나가 손실을 좌우할 수 있어요.
김민준
학점 평균 같네요. 원래 C 받던 과목이 B로 오르는 거랑, A 받던 과목이 A+로 오르는 거랑 체감이 다른.
정리Δref=log(0.5/0.01)≈3.91, Δθ=log(0.8/0.1)≈2.08, 레퍼런스보다 더 벌린 마진 z=Δθ−Δref≈−1.83. 손실은 0.693보다 크다. 로그는 차이가 아니라 비율을 보는데, 부산은 10배 오르고 서울은 1.6배 올랐기 때문이다.