Part III: 우회로 — DPO

— PPO가 너무 무거워서 생긴 지름길. 보상 모델도 RL 루프도 없이, RLHF(사람의 선호로 학습한 보상 모델의 점수를 강화학습으로 올리는 절차)와 같은 목적함수를 수식 한 번의 변환으로 푼다. 이 파트는 그 변환을 따라간 뒤, 그 한 줄을 요소별로 해부한다.


Chapter 6: DPO의 재등장 — 보상 모델을 수식으로 지우다

의문

DPO는 좋은 답과 나쁜 답의 로그확률 차(마진)를, 학습 전 모델이 벌려 두었던 것보다 더 벌리도록 모델을 미는 손실 한 줄이다. 식으로는 −log⁡σ(β(Δθ−Δref))-\log\sigma\big(\textcolor{#827717}{\beta}(\textcolor{#1565c0}{\Delta_\theta} - \textcolor{#6f6f78}{\Delta_\text{ref}})\big) 이다(σ\sigma 는 시그모이드, Δθ\textcolor{#1565c0}{\Delta_\theta} 는 학습 중인 모델의 마진, Δref\textcolor{#6f6f78}{\Delta_\text{ref}} 는 학습 전 모델의 마진). 한 줄로 "레퍼런스 대비 마진을 벌린다"고 읽을 수 있다. 그런데 이 식은 어디서 왔을까?

RLHF는 보상 모델의 점수를 올리되, 레퍼런스 정책(학습 전 모델을 고정해 둔 비교 기준. 정책은 프롬프트를 받아 답을 고르는 언어모델)에서 멀어지는 만큼 벌점을 주는 목적함수를 최대화한다. 멀어진 정도는 KL 발산(두 확률분포가 얼마나 다른지 재는 양으로, 같으면 0)으로 잰다. (보상 모델 rψ\textcolor{#d9670b}{r_\psi}를 이 장에서는 간단히 r\textcolor{#d9670b}{r}로 쓴다.)

max⁡π  Ey∼π(⋅∣x)[r(x,y)]  −  β KL(π ∥ πref)\max_{\textcolor{#1565c0}{\pi}} \; \mathbb{E}_{\textcolor{#1c9c60}{y} \sim \textcolor{#1565c0}{\pi}(\cdot \mid \textcolor{#0093b8}{x})}\big[\textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y})\big] \;-\; \textcolor{#827717}{\beta}\,\textcolor{#8c564b}{\mathrm{KL}}\big(\textcolor{#1565c0}{\pi} \,\|\, \textcolor{#6f6f78}{\pi_\text{ref}}\big)
π찾으려는 정책 (최적화 변수)r(x,y)보상 (보상 모델 rψ)βKL 강도 (클수록 짧은 목줄)KLKL 발산πref레퍼런스 정책 (고정) \small\begin{array}{ll} \textcolor{#1565c0}{\pi} & \text{찾으려는 정책 (최적화 변수)} \\ \textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y}) & \text{보상 (보상 모델 }\textcolor{#d9670b}{r_\psi}\text{)} \\ \textcolor{#827717}{\beta} & \text{KL 강도 (클수록 짧은 목줄)} \\ \textcolor{#8c564b}{\mathrm{KL}} & \text{KL 발산} \\ \textcolor{#6f6f78}{\pi_\text{ref}} & \text{레퍼런스 정책 (고정)} \end{array}

PPO(이 목적함수를 강화학습으로 푸는 대표 알고리즘)는 이 식을 반복해서 푼다. 응답을 생성하고, 보상 모델로 채점하고, 비평가(앞으로 받을 점수를 예측하는 보조 모델)로 어드밴티지(그 토큰이 평균적인 선택보다 얼마나 나았나)를 구하고, 한 번에 너무 멀리 가지 않게 잘라 가며(클리핑) 조금씩 올라간다. 모델 네 개(정책·레퍼런스·보상 모델·비평가)가 필요하다. 그런데 이 목적함수는 생각보다 단순한 모양이다. 보상의 기대값에서 KL을 뺀 것. 이런 모양의 최적화 문제는 종종 닫힌 해(closed form)를 가진다.

최적해를 손으로 구할 수 있다면, 그 해를 거꾸로 뒤집어 보상을 정책으로 표현할 수 있지 않을까?
그러면 보상 모델을 따로 학습할 필요가 있을까?

DPO(라파일로프(Rafael Rafailov)와 동료들, 2023) 논문의 부제 *“Your Language Model is Secretly a Reward Model”*은 바로 이 질문에 대한 "그렇다"이다.

DPO 유도: 최적해를 뒤집어 보상 모델을 지운다

닫힌 해가 정말 있다면 어떤 모양일까? 그리고 그 해에서 어떻게 보상 모델을 지울 수 있을까? 세 단계로 따라가 보자. 세 단계 모두 손으로 풀리는 계산이다.

1단계: KL 제약 목적함수의 최적해

프롬프트 x\textcolor{#0093b8}{x} 하나에 대해 생각하자. 목적함수를 합으로 풀어 쓰고 −β-\textcolor{#827717}{\beta}로 묶는다.

Eπ[r]−β KL(π ∥ πref)=∑yπ(y) r(y)−β∑yπ(y)log⁡π(y)πref(y)=−β∑yπ(y) log⁡π(y)πref(y) er(y)/β\mathbb{E}_{\textcolor{#1565c0}{\pi}}[\textcolor{#d9670b}{r}] - \textcolor{#827717}{\beta}\,\textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#1565c0}{\pi} \,\|\, \textcolor{#6f6f78}{\pi_\text{ref}}) = \sum_{\textcolor{#1c9c60}{y}} \textcolor{#1565c0}{\pi}(\textcolor{#1c9c60}{y})\,\textcolor{#d9670b}{r}(\textcolor{#1c9c60}{y}) - \textcolor{#827717}{\beta} \sum_{\textcolor{#1c9c60}{y}} \textcolor{#1565c0}{\pi}(\textcolor{#1c9c60}{y}) \log\frac{\textcolor{#1565c0}{\pi}(\textcolor{#1c9c60}{y})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y})} = -\textcolor{#827717}{\beta} \sum_{\textcolor{#1c9c60}{y}} \textcolor{#1565c0}{\pi}(\textcolor{#1c9c60}{y})\,\log\frac{\textcolor{#1565c0}{\pi}(\textcolor{#1c9c60}{y})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y})\, e^{\textcolor{#d9670b}{r}(\textcolor{#1c9c60}{y})/\textcolor{#827717}{\beta}}}
π(y)프롬프트 x 에서 응답 y 를 고를 확률 (찾으려는 정책)r(y)응답 y 의 보상βKL 강도πref(y)레퍼런스가 y 를 고를 확률er/β보상에서 온 인자: r=βlog⁡er/β 로 써서 로그 안에 넣었다 \small\begin{array}{ll} \textcolor{#1565c0}{\pi}(\textcolor{#1c9c60}{y}) & \text{프롬프트 }\textcolor{#0093b8}{x}\text{ 에서 응답 }\textcolor{#1c9c60}{y}\text{ 를 고를 확률 (찾으려는 정책)} \\ \textcolor{#d9670b}{r}(\textcolor{#1c9c60}{y}) & \text{응답 }\textcolor{#1c9c60}{y}\text{ 의 보상} \\ \textcolor{#827717}{\beta} & \text{KL 강도} \\ \textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y}) & \text{레퍼런스가 }\textcolor{#1c9c60}{y}\text{ 를 고를 확률} \\ e^{\textcolor{#d9670b}{r}/\textcolor{#827717}{\beta}} & \text{보상에서 온 인자: }\textcolor{#d9670b}{r} = \textcolor{#827717}{\beta}\log e^{\textcolor{#d9670b}{r}/\textcolor{#827717}{\beta}}\text{ 로 써서 로그 안에 넣었다} \end{array}

분모의 πref(y) er(y)/β\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y})\,e^{\textcolor{#d9670b}{r}(\textcolor{#1c9c60}{y})/\textcolor{#827717}{\beta}}는 합이 1이 아니므로 확률분포가 아니다. 합을 Z(x)=∑yπref(y) er(y)/β\textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x}) = \sum_{\textcolor{#1c9c60}{y}} \textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y})\,e^{\textcolor{#d9670b}{r}(\textcolor{#1c9c60}{y})/\textcolor{#827717}{\beta}}라 두고 나누면 분포가 된다.

π∗(y∣x)=1Z(x) πref(y∣x) exp⁡ ⁣(r(x,y)β)\textcolor{#2e7d32}{\pi^*}(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{x}) = \frac{1}{\textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})}\,\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{x})\,\exp\!\Big(\frac{\textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y})}{\textcolor{#827717}{\beta}}\Big)
π∗KL 제약 아래의 최적 정책πref레퍼런스 정책r(x,y)보상βKL 강도 (통계역학의 온도 자리)Z(x)확률의 합을 1로 맞추는 정규화 상수 (분배함수) \small\begin{array}{ll} \textcolor{#2e7d32}{\pi^*} & \text{KL 제약 아래의 최적 정책} \\ \textcolor{#6f6f78}{\pi_\text{ref}} & \text{레퍼런스 정책} \\ \textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y}) & \text{보상} \\ \textcolor{#827717}{\beta} & \text{KL 강도 (통계역학의 온도 자리)} \\ \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x}) & \text{확률의 합을 1로 맞추는 정규화 상수 (분배함수)} \end{array}

이것으로 목적함수를 다시 쓰면

Eπ[r]−β KL(π ∥ πref)=−β KL(π ∥ π∗)+βlog⁡Z(x)\mathbb{E}_{\textcolor{#1565c0}{\pi}}[\textcolor{#d9670b}{r}] - \textcolor{#827717}{\beta}\,\textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#1565c0}{\pi} \,\|\, \textcolor{#6f6f78}{\pi_\text{ref}}) = -\textcolor{#827717}{\beta}\,\textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#1565c0}{\pi} \,\|\, \textcolor{#2e7d32}{\pi^*}) + \textcolor{#827717}{\beta} \log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})
KL(π ∥ π∗)찾으려는 정책이 최적 정책에서 떨어진 정도 (0 이상)βlog⁡Z(x)π 가 들어 있지 않은 상수 \small\begin{array}{ll} \textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#1565c0}{\pi} \,\|\, \textcolor{#2e7d32}{\pi^*}) & \text{찾으려는 정책이 최적 정책에서 떨어진 정도 (0 이상)} \\ \textcolor{#827717}{\beta} \log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x}) & \textcolor{#1565c0}{\pi}\text{ 가 들어 있지 않은 상수} \end{array}

βlog⁡Z(x)\textcolor{#827717}{\beta} \log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})는 π\textcolor{#1565c0}{\pi}와 무관하다. KL은 0 이상이고 두 분포가 같을 때만 0이다. 따라서 최적 정책은 π=π∗\textcolor{#1565c0}{\pi} = \textcolor{#2e7d32}{\pi^*} 이다.

이 결과는 그 자체로 읽을 만하다. 최적 정책은 레퍼런스 분포에 보상의 지수 인자를 곱해 다시 맞춘 것이다. 곱하고, 더해서 Z\textcolor{#cc00ff}{Z} 를 얻고, 나누는 세 걸음을 숫자로 따라가 보자. 응답은 셋만 두되, 레퍼런스가 가장 자주 고르는 응답의 보상을 가장 낮게, 레퍼런스가 드물게 고르는 응답의 보상을 가장 높게 잡는다. 레퍼런스의 습관과 보상이 서로 반대쪽을 가리켜야 둘이 어떻게 타협하는지 보이기 때문이다. β=1\textcolor{#827717}{\beta} = 1 로 둔다.

응답 πref\textcolor{#6f6f78}{\pi_\text{ref}} r\textcolor{#d9670b}{r} er/βe^{\textcolor{#d9670b}{r}/\textcolor{#827717}{\beta}} 곱 πref er/β\textcolor{#6f6f78}{\pi_\text{ref}}\,e^{\textcolor{#d9670b}{r}/\textcolor{#827717}{\beta}} 곱 ÷ Z\textcolor{#cc00ff}{Z} = π∗\textcolor{#2e7d32}{\pi^*}
가 0.6 0 1.000 0.600 0.279
나 0.3 1 2.718 0.815 0.379
다 0.1 2 7.389 0.739 0.343
합 1 Z\textcolor{#cc00ff}{Z} = 2.154 1

레퍼런스가 60%를 주던 가는 28%로 줄고, 10%뿐이던 다는 34%로 올랐다. 그래도 다가 1등이 되지는 않는다. 보상은 다가 가장 높지만 레퍼런스가 드물게 고르던 습관이 남아, 보상 1짜리 나가 38%로 앞선다. β\textcolor{#827717}{\beta} 를 바꾸면 이 타협점이 움직인다.

레퍼런스 πref 0.60 가 0.30 나 0.10 다 π*, β = 2 0.44 가 0.36 나 0.20 다 π*, β = 1 0.28 가 0.38 나 0.34 다 π*, β = 0.5 0.07 가 0.27 나 0.66 다

β\textcolor{#827717}{\beta} 가 크면 er/βe^{\textcolor{#d9670b}{r}/\textcolor{#827717}{\beta}} 가 1에 가까워져 레퍼런스에서 조금만 움직이고(β=2\textcolor{#827717}{\beta} = 2 에서 0.44, 0.36, 0.20), β\textcolor{#827717}{\beta} 가 작으면 높은 보상 쪽으로 확률이 몰린다(β=0.5\textcolor{#827717}{\beta} = 0.5 에서 다가 0.66). 레퍼런스에 묶는 목줄의 조임, 곧 KL 강도가 정확히 이 β\textcolor{#827717}{\beta}다(클수록 짧은 목줄).

역사: 볼츠만이 센 경우의 수

방금 본 모양, 곧 기준 분포에 지수 인자를 곱하고 합으로 나눈 분포는 물리학이 먼저 만났다. 1877년 볼츠만(Ludwig Boltzmann)은 기체가 열평형에 이르렀을 때 분자들 사이에 에너지가 어떻게 나뉘는지를 확률로 답하려 했다. 에너지가 연속이면 나누는 방법을 셀 수 없으므로, 그는 분자 하나의 에너지가 0,ε,2ε,…0, \varepsilon, 2\varepsilon, \ldots 처럼 띄엄띄엄한 값만 가진다고 가정했다. 실제 역학과는 맞지 않지만 다루기 쉬운 가정이라고 스스로 밝힌 계산용 수였다. 그리고 손으로 셀 수 있는 예를 논문에 실었다. 분자 7개가 에너지 7ε7\varepsilon 을 나눠 가지는 방법은, 어느 분자가 얼마를 가졌는지까지 구별하면 모두 1,716가지다. 이것을 「에너지 0인 분자가 몇 개, ε\varepsilon 인 분자가 몇 개 …」 같은 나눔 15가지로 묶으면, 가장 많은 방법(420가지)이 몰린 나눔은 셋이 0, 둘이 ε\varepsilon, 하나가 2ε2\varepsilon, 하나가 3ε3\varepsilon 이다. 에너지가 높은 칸일수록 분자가 적다. 이 셈을 연속인 에너지로 넓혀, 가장 흔한 나눔에서 에너지 EE 인 분자의 몫이 e−hEe^{-hE} 꼴로 줄어든다는 것이 그의 결론이었다(hh 는 평균 에너지가 정하는 상수로, 오늘날 쓰는 1/kT1/kT 의 자리다. TT 는 절대온도, kk 는 볼츠만 상수). 1902년 기브스(Josiah Willard Gibbs)가 이 분포를 기체에 한정하지 않는 일반 꼴로 정리했다. 모든 상태에 대해 e−E/kTe^{-E/kT} 를 더한 정규화 상수는 흔히 Z\textcolor{#cc00ff}{Z} 로 쓴다(독일어 Zustandssumme, “상태들의 합”). 우리 식에서는 보상이 음의 에너지 자리에, β\textcolor{#827717}{\beta} 가 kTkT 자리에 들어간다.

2단계: 뒤집으면 보상이 정책으로 표현된다

π∗\textcolor{#2e7d32}{\pi^*}의 식을 r\textcolor{#d9670b}{r}에 대해 풀면:

r(x,y)=βlog⁡π∗(y∣x)πref(y∣x)+βlog⁡Z(x)\textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y}) = \textcolor{#827717}{\beta} \log\frac{\textcolor{#2e7d32}{\pi^*}(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{x})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{x})} + \textcolor{#827717}{\beta} \log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})
r(x,y)보상 — 이제 최적 정책과 레퍼런스의 비율로 적힌다π∗최적 정책πref레퍼런스Z(x)정규화 상수 (프롬프트에만 의존)\small\begin{array}{ll} \textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y}) & \text{보상 — 이제 최적 정책과 레퍼런스의 비율로 적힌다} \\ \textcolor{#2e7d32}{\pi^*} & \text{최적 정책} \\ \textcolor{#6f6f78}{\pi_\text{ref}} & \text{레퍼런스} \\ \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x}) & \text{정규화 상수 (프롬프트에만 의존)} \end{array}

보상 = 최적 정책이 레퍼런스보다 이 응답을 얼마나 더 좋아하는가(로그비율) × β + 상수. 보상 모델과 최적 정책은 서로의 다른 이름일 뿐이다. 앞의 세 응답 표(β=1\textcolor{#827717}{\beta} = 1)로 확인해 보자. βlog⁡(π∗/πref)\textcolor{#827717}{\beta}\log(\textcolor{#2e7d32}{\pi^*}/\textcolor{#6f6f78}{\pi_\text{ref}}) 는 가 log⁡(0.279/0.6)=−0.77\log(0.279/0.6) = -0.77, 나 0.230.23, 다 1.231.23 이다. 보상 0, 1, 2보다 셋 모두 똑같이 0.77 작고, 그 0.77이 βlog⁡Z=log⁡2.154\textcolor{#827717}{\beta}\log \textcolor{#cc00ff}{Z} = \log 2.154 다.

문제는 Z(x)\textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})다. 응답이 셋이면 손으로 더하지만, 언어모델이 낼 수 있는 응답은 셀 수 없이 많아 그 합을 구할 수 없다. 여기서 보상 모델을 학습할 때 쓰던 쌍비교가 도움을 준다.

3단계: Bradley-Terry에 넣으면 ZZ가 사라진다

RLHF의 보상 모델은 쌍비교로 학습했다: P(yw≻yl)=σ(r(x,yw)−r(x,yl))\textcolor{#0033ff}{P}(\textcolor{#e000a5}{y_w} \succ \textcolor{#e000a5}{y_l}) = \sigma\big(\textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#e000a5}{y_w}) - \textcolor{#d9670b}{r}(\textcolor{#0093b8}{x}, \textcolor{#e000a5}{y_l})\big). 이 식이 Bradley-Terry 모델(줄여서 BT — 두 대상의 점수 차를 시그모이드에 넣어 이길 확률로 보는 쌍비교 모델)이고, yw≻yl\textcolor{#e000a5}{y_w} \succ \textcolor{#e000a5}{y_l} 은 「yw\textcolor{#e000a5}{y_w} 가 yl\textcolor{#e000a5}{y_l} 보다 더 선호된다」로 읽는다. 여기에 2단계의 표현을 대입한다. 두 응답은 같은 프롬프트 x\textcolor{#0093b8}{x}를 공유하므로 βlog⁡Z(x)\textcolor{#827717}{\beta}\log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})가 빼기에서 상쇄된다.

P(yw≻yl)=σ ⁣(βlog⁡π∗(yw)πref(yw)−βlog⁡π∗(yl)πref(yl))\textcolor{#0033ff}{P}(\textcolor{#e000a5}{y_w} \succ \textcolor{#e000a5}{y_l}) = \sigma\!\Big(\textcolor{#827717}{\beta} \log\frac{\textcolor{#2e7d32}{\pi^*}(\textcolor{#e000a5}{y_w})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#e000a5}{y_w})} - \textcolor{#827717}{\beta} \log\frac{\textcolor{#2e7d32}{\pi^*}(\textcolor{#e000a5}{y_l})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#e000a5}{y_l})}\Big)
P(yw≻yl)yw가 yl보다 선호될 확률 (Bradley–Terry)π∗, πref최적 정책과 레퍼런스βKL 강도\small\begin{array}{ll} \textcolor{#0033ff}{P}(\textcolor{#e000a5}{y_w} \succ \textcolor{#e000a5}{y_l}) & \text{}\textcolor{#e000a5}{y_w}\text{가 }\textcolor{#e000a5}{y_l}\text{보다 선호될 확률 (Bradley–Terry)} \\ \textcolor{#2e7d32}{\pi^*},\ \textcolor{#6f6f78}{\pi_\text{ref}} & \text{최적 정책과 레퍼런스} \\ \textcolor{#827717}{\beta} & \text{KL 강도} \end{array}

이제 알 수 없는 π∗\textcolor{#2e7d32}{\pi^*} 자리에 학습할 정책 πθ\textcolor{#1565c0}{\pi_\theta}를 넣고, 선호 데이터의 우도(그 데이터가 나올 확률)를 최대화한다(음의 로그우도를 최소화).

LDPO=−log⁡σ(β[log⁡πθ(yw)πref(yw)−log⁡πθ(yl)πref(yl)])=−log⁡σ(β(Δθ−Δref))\textcolor{#d62728}{\mathcal{L}_\text{DPO}} = -\log \sigma\Big(\textcolor{#827717}{\beta}\Big[\log\frac{\textcolor{#1565c0}{\pi_\theta}(\textcolor{#e000a5}{y_w})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#e000a5}{y_w})} - \log\frac{\textcolor{#1565c0}{\pi_\theta}(\textcolor{#e000a5}{y_l})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#e000a5}{y_l})}\Big]\Big) = -\log\sigma\big(\textcolor{#827717}{\beta}(\textcolor{#1565c0}{\Delta_\theta} - \textcolor{#6f6f78}{\Delta_\text{ref}})\big)
Δθ=log⁡πθ(yw)−log⁡πθ(yl),Δref=log⁡πref(yw)−log⁡πref(yl)\textcolor{#1565c0}{\Delta_\theta} = \log\textcolor{#1565c0}{\pi_\theta}(\textcolor{#e000a5}{y_w}) - \log\textcolor{#1565c0}{\pi_\theta}(\textcolor{#e000a5}{y_l}), \qquad \textcolor{#6f6f78}{\Delta_\text{ref}} = \log\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#e000a5}{y_w}) - \log\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#e000a5}{y_l})
LDPODPO 손실πθ학습 중인 정책 — 최적 정책 π∗ 자리를 대신한다πref레퍼런스 정책 (고정)Δθ, Δref학습 모델과 레퍼런스의 선호 마진βKL 강도 \small\begin{array}{ll} \textcolor{#d62728}{\mathcal{L}_\text{DPO}} & \text{DPO 손실} \\ \textcolor{#1565c0}{\pi_\theta} & \text{학습 중인 정책 — 최적 정책 }\textcolor{#2e7d32}{\pi^*}\text{ 자리를 대신한다} \\ \textcolor{#6f6f78}{\pi_\text{ref}} & \text{레퍼런스 정책 (고정)} \\ \textcolor{#1565c0}{\Delta_\theta},\ \textcolor{#6f6f78}{\Delta_\text{ref}} & \text{학습 모델과 레퍼런스의 선호 마진} \\ \textcolor{#827717}{\beta} & \text{KL 강도} \end{array}
ML에서: 정책이 곧 보상 모델이다

DPO의 한 줄이 도착했다. 세 단계를 한 줄씩 요약하면:

단계 한 일 결과
1 KL 제약 보상 최대화를 닫힌 해로 π∗∝πref er/β\textcolor{#2e7d32}{\pi^*} \propto \textcolor{#6f6f78}{\pi_\text{ref}}\, e^{\textcolor{#d9670b}{r}/\textcolor{#827717}{\beta}}
2 해를 뒤집어 보상을 정책으로 r=βlog⁡(π∗/πref)+βlog⁡Z\textcolor{#d9670b}{r} = \textcolor{#827717}{\beta}\log(\textcolor{#2e7d32}{\pi^*}/\textcolor{#6f6f78}{\pi_\text{ref}}) + \textcolor{#827717}{\beta}\log \textcolor{#cc00ff}{Z}
3 BT(Bradley-Terry) 쌍비교에 대입 → Z\textcolor{#cc00ff}{Z} 상쇄 보상 모델 없이 정책만으로 쓴 선호 우도

정책이 곧 보상 모델이다. r^θ(x,y)=βlog⁡πθ(y∣x)πref(y∣x)\textcolor{#d9670b}{\hat r_\theta}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y}) = \textcolor{#827717}{\beta}\log\frac{\textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{x})}{\textcolor{#6f6f78}{\pi_\text{ref}}(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{x})}를 암묵적 보상(implicit reward)이라 부른다.

문제 1 — 반마다 다른 가산점

두 반의 수행평가 점수표를 받았다. 담임 선생님마다 자기 반 학생 모두에게 똑같은 가산점을 얹었는데, 가산점이 몇 점인지는 적혀 있지 않다. 1반은 지우 85점, 하늘 78점, 2반은 도윤 80점이다. (가) 가산점을 얹기 전, 지우는 하늘보다 몇 점 높았는가? (나) 가산점을 얹기 전, 지우와 도윤 가운데 누가 높았는가? (다) 나중에 알고 보니 1반 가산점은 10점, 2반은 2점이었다. (나)에 다시 답하시오.

김민준 (평상)
김민준
(가)는 85 − 78 = 7점이요. 같은 가산점이 둘 다에 붙어 있으니까 빼면 그대로예요. (나)는 지우가 85점이니까 도윤보다 5점 높았죠.
선생님 (질문)
선생님
민준 학생, (나)의 두 사람은 같은 가산점을 받았나요?
김민준 (난처함)
김민준
아니요, 반이 다르니까… 가산점을 모르면 그 5점이 실력 차인지 가산점 차인지 알 수가 없네요.
이서연 (평상)
이서연
(다)로 풀면 지우는 75점, 도윤은 78점이야. 점수표로는 지우가 5점 높았는데, 가산점을 빼니 도윤이 3점 높아.
선생님 (평상)
선생님
그래요. 모르는 수가 모두에게 똑같이 더해져 있으면, 같은 반 안의 차이는 그 수를 몰라도 믿을 수 있어요. 반을 넘는 비교는 그 수를 알아야 하고요.

정리 (가) 7점. 같은 반 두 사람에게 같은 가산점이 더해져 있으므로 빼면 사라진다. (나) 알 수 없다. 반마다 가산점이 다르면 점수표의 5점 차에 가산점 차가 섞인다. (다) 지우 75점, 도윤 78점 — 도윤이 높았다. 점수표의 순서가 뒤집힌다.

문제 2 — ZZ는 어디로 갔나

β=1\textcolor{#827717}{\beta} = 1. 프롬프트 x1\textcolor{#0093b8}{x_1} 에는 응답 A, B가, 프롬프트 x2\textcolor{#0093b8}{x_2} 에는 응답 C, D가 있다(각 프롬프트의 응답은 이 둘뿐). 레퍼런스 πref\textcolor{#6f6f78}{\pi_\text{ref}} 는 네 응답 모두 0.5로 고른다. KL 제약 최적 정책 π∗\textcolor{#2e7d32}{\pi^*} 는 A 0.12, B 0.88, C 0.73, D 0.27이다. (가) 네 응답의 βlog⁡(π∗/πref)\textcolor{#827717}{\beta}\log(\textcolor{#2e7d32}{\pi^*}/\textcolor{#6f6f78}{\pi_\text{ref}}) 를 구하시오. (나) 이 값만으로 B가 A보다, C가 D보다 보상이 얼마나 큰지 말할 수 있는가? (다) 이 값만으로 C가 A보다 보상이 크다고 말할 수 있는가? 실제 보상이 A 1, B 3, C 0, D −1이었다고 하고 확인하시오.

김민준 (자신만만)
김민준
log(0.12/0.5) = −1.43, log(0.88/0.5) = 0.57, log(0.73/0.5) = 0.38, log(0.27/0.5) = −0.62. 줄 세우면 B, C, D, A. C가 A보다 1.8쯤 좋은 거죠.
이서연 (평상)
이서연
같은 프롬프트 안의 차이는 B − A = 2.0, C − D = 1.0이야. 실제 보상 차 3 − 1, 0 − (−1)과 딱 맞아. 그런데 실제 보상은 A가 1, C가 0인데? A가 더 좋잖아.
선생님 (질문)
선생님
2단계 식에서 이 값과 실제 보상 사이에 무엇이 더 있었죠?
이서연 (평상)
이서연
β log Z(x)요. 보상은 이 값에 β log Z(x)를 더한 거예요.
선생님 (질문)
선생님
그럼 Z는 무엇에 따라 값이 달라지죠?
이서연 (평상)
이서연
모든 y에 대해 합을 냈으니까 y에는 안 달려 있어요. x에만 달려 있어요. x₁은 보상 3짜리 B가 있어서 Z가 크고, x₂는 보상이 0과 −1뿐이라 작아요.
김민준 (깨달음)
김민준
아, 그러니까 같은 x에서 나온 두 응답의 보상을 빼면 β log Z(x)가 똑같이 들어 있어서 빠지는 거네요. 다른 프롬프트끼리 빼면 log Z(x₁) − log Z(x₂)가 남고요. 그게 2.43 − (−0.38) = 2.81이라 순서가 뒤집혔어요.
선생님 (평상)
선생님
맞아요. 그럼 선호 데이터가 "x₁의 A가 x₂의 C보다 낫다"처럼 서로 다른 프롬프트끼리의 비교였다면요?
김민준 (평상)
김민준
Z(x₁)이랑 Z(x₂)가 달라서 안 빠져요. 계산할 수 없는 게 남으니까 DPO를 못 써요.
김민준 (평상)
김민준
아까 반마다 다른 가산점 문제랑 같네요. β log Z(x)가 반마다 얹힌 가산점이고요.

정리 (가) A −1.43, B 0.57, C 0.38, D −0.62. (나) 말할 수 있다. B − A ≈ 2.0, C − D ≈ 1.0으로 실제 보상 차와 같다. Z(x)\textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})는 응답이 아니라 프롬프트에만 의존하므로 같은 프롬프트의 두 응답을 빼면 βlog⁡Z(x)\textcolor{#827717}{\beta}\log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x})가 상쇄된다. (다) 말할 수 없다. 이 값으로는 C가 1.8 앞서지만 실제 보상은 A가 1 크다. 프롬프트가 다른 쌍에서는 βlog⁡Z(x1)−βlog⁡Z(x2)≈2.81\textcolor{#827717}{\beta}\log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x_1}) - \textcolor{#827717}{\beta}\log \textcolor{#cc00ff}{Z}(\textcolor{#0093b8}{x_2}) \approx 2.81 이 남아 DPO 식이 성립하지 않는다.

문제 3 — 암묵적 보상

β=0.1\textcolor{#827717}{\beta} = 0.1. 응답 y1\textcolor{#1c9c60}{y_1}을 πθ\textcolor{#1565c0}{\pi_\theta}는 0.02, πref\textcolor{#6f6f78}{\pi_\text{ref}}는 0.01의 확률로 생성한다. 응답 y2\textcolor{#1c9c60}{y_2}는 각각 0.001, 0.004다. 두 응답의 암묵적 보상을 구하고, 암묵적 보상 모델이 어느 쪽을 선호하는지 답하시오.

김민준 (자신만만)
김민준
r̂ = β log(π_θ/π_ref). y₁은 0.1 × log(0.02/0.01) = 0.1 × 0.693 = 0.069. y₂는 0.1 × log(0.001/0.004) = −0.139. y₁이 더 좋은 거죠.
이서연 (평상)
이서연
계산은 맞는데, 이상한 게 있어. y₁은 π_θ가 고작 2%로 뽑는 응답이야. 그게 "좋은 응답"이라고?
선생님 (평상)
선생님
서연 학생, 암묵적 보상이 재는 건 뭐였죠?
이서연 (생각)
이서연
확률 자체가 아니라… 레퍼런스보다 얼마나 더 좋아하게 됐는지요. y₁은 2배 좋아졌고, y₂는 4분의 1로 줄었고요.
이서연 (깨달음)
이서연
아, 절대 확률이 낮아도 학습이 이 응답 쪽으로 밀었다면 보상이 높다고 읽는 거네요. 그래서 비율이에요.
선생님 (평상)
선생님
그래요. "레퍼런스 대비"라는 말이 바로 이 비율이에요.
이서연 (평상)
이서연
수열 극한에서 수렴 속도 비교하는 거랑 비슷하네요. 크기가 아니라 비율로 보는 거요.

정리 r^(y1)=0.1log⁡2≈+0.069\textcolor{#d9670b}{\hat r}(\textcolor{#1c9c60}{y_1}) = 0.1\log 2 \approx +0.069, r^(y2)=0.1log⁡0.25≈−0.139\textcolor{#d9670b}{\hat r}(\textcolor{#1c9c60}{y_2}) = 0.1\log 0.25 \approx -0.139. 암묵적 보상 모델은 y1\textcolor{#1c9c60}{y_1}을 선호한다. 절대 확률이 아니라 레퍼런스 대비 로그비율을 잰다.