Part V: 우회로 (DPO)

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


Chapter 11: 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}} 는 학습 전 모델의 마진). 한 줄로 "레퍼런스 대비 마진을 키운다"고 읽을 수 있는 이 DPO 손실 식은 어디서 왔을까?

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 제약 목적함수의 최대화를 반복해서 푼다. 응답을 생성하고, 보상 모델로 채점하고, 비평가(앞으로 받을 점수를 예측하는 보조 모델)로 어드밴티지(그 토큰이 평균적인 선택보다 얼마나 나았나)를 구하고, 한 번에 너무 멀리 가지 않게 잘라 가며(클리핑) 조금씩 올라간다. 모델 네 개(정책·레퍼런스·보상 모델·비평가)가 필요하지만, 이 목적함수 자체는 보상의 기댓값에서 KL에 β\textcolor{#827717}{\beta} 를 곱해 뺀, 생각보다 단순한 모양이다. 이런 모양의 최적화 문제는 종종 닫힌 해(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^*} 이다.

최적 정책 π∗\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 페널티의 강도, 곧 KL 강도가 바로 이 β\textcolor{#827717}{\beta}다(클수록 정책이 레퍼런스에서 덜 멀어진다).

기준 분포에 지수 인자를 곱해 합으로 나눈 이 꼴은 통계역학의 볼츠만 분포와 같고, Z\textcolor{#cc00ff}{Z} 는 그 분배함수다. 강화학습 안에서는 이 꼴이 「정책을 한 번 고칠 때 얼마나 멀리 가도 되나」라는 물음의 답으로 다시 나왔다.

정책을 고칠 때 지금까지 가장 좋아 보인 행동만 고르면 다른 행동을 해 볼 기회, 곧 탐색이 사라진다. 학습은 빨리 멈추지만 더 나은 행동을 찾기 전에 나쁜 정책에 굳기 쉽다. 2010년 페터스(Jan Peters), 뮐링(Katharina Mülling), 알튠(Yasemin Altün)은 AAAI 학회 논문 「상대 엔트로피 정책 탐색(Relative Entropy Policy Search, REPS)」에서 이를 「정책 개선이 정보를 잃는다」고 적었다. 앞선 시도는 둘이었다. 가카데(Sham Kakade, 2002)는 정책 그래디언트가 파라미터 업데이트의 크기를 유클리드 길이로 묶은 것이 문제라 보고, 업데이트 크기를 피셔 정보로 재는 자연 그래디언트로 바꿨다. 배그널(J. Andrew Bagnell)과 슈나이더(Jeff Schneider, 2003)는 그 제약이 옛 정책과 새 정책이 만드는 경로 분포 사이의 상대 엔트로피(KL)를 테일러 전개로 근사한 것임을 짚었다. 이 2차 근사는 옛 정책 가까이에서만 맞으므로 업데이트를 작게만 할 수 있었다. 아래 그림은 앞의 세 응답을 옛 정책으로 두고 실제 KL과 2차 근사을 견준 것이다.

옛 정책에서 멀어질 때 잃는 정보 0 0.3 0.6 0.9 0 0.5 1 1.5 2 옛 정책에서 움직인 정도 t = 1/η 2차 근사 (자연 그래디언트) 실제 KL

페터스 등은 근사하지 않고 「새 정책이 옛 정책에서 잃는 정보 KL을 ε\textcolor{#1f6d7a}{\varepsilon} 이하로」를 그대로 제약으로 두고 기대 이득을 최대화했다. 답은 근사 없이 닫힌 꼴로 나왔다.

πnew(a∣s)=πold(a∣s) eδ(s,a)/η∑bπold(b∣s) eδ(s,b)/η\textcolor{#2e7d32}{\pi_\text{new}}(\textcolor{#1c9c60}{a} \mid \textcolor{#0093b8}{s}) = \frac{\textcolor{#6f6f78}{\pi_\text{old}}(\textcolor{#1c9c60}{a} \mid \textcolor{#0093b8}{s})\, e^{\textcolor{#8e44ad}{\delta}(\textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a})/\textcolor{#827717}{\eta}}}{\sum_{b} \textcolor{#6f6f78}{\pi_\text{old}}(b \mid \textcolor{#0093b8}{s})\, e^{\textcolor{#8e44ad}{\delta}(\textcolor{#0093b8}{s}, b)/\textcolor{#827717}{\eta}}}
πnew, πold새 정책, 옛 정책δ(s,a)이득: 그 행동이 기대보다 얼마나 나았나η에타. 잃는 정보의 한도 ε 가 정하는 수 (β 자리라 같은 색)\small\begin{array}{ll} \textcolor{#2e7d32}{\pi_\text{new}},\ \textcolor{#6f6f78}{\pi_\text{old}} & \text{새 정책, 옛 정책} \\ \textcolor{#8e44ad}{\delta}(\textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a}) & \text{이득: 그 행동이 기대보다 얼마나 나았나} \\ \textcolor{#827717}{\eta} & \text{에타. 잃는 정보의 한도 } \textcolor{#1f6d7a}{\varepsilon} \text{ 가 정하는 수 (}\textcolor{#827717}{\beta}\text{ 자리라 같은 색)} \end{array}

꼴이 앞의 π∗∝πref er/β\textcolor{#2e7d32}{\pi^*} \propto \textcolor{#6f6f78}{\pi_\text{ref}}\, e^{\textcolor{#d9670b}{r}/\textcolor{#827717}{\beta}} 와 같다. 옛 정책이 레퍼런스 자리, η\textcolor{#827717}{\eta} 가 β\textcolor{#827717}{\beta} 자리다. 앞의 세 응답(옛 정책 0.6, 0.3, 0.1, 이득 0, 1, 2)에서 ε\textcolor{#1f6d7a}{\varepsilon} 을 셋으로 바꿔 η\textcolor{#827717}{\eta} 를 풀면 아래와 같다.

옛 정책 πold 0.60 가 0.30 나 0.10 다 ε = 0.05 → η = 2.30 0.46 가 0.36 나 0.18 다 ε = 0.2 → η = 1.21 0.33 가 0.38 나 0.29 다 ε = 0.5 → η = 0.77 0.20 가 0.36 나 0.44 다

한도를 좁히면(ε\textcolor{#1f6d7a}{\varepsilon} = 0.05) η\textcolor{#827717}{\eta} 가 2.31로 커져 다는 0.10에서 0.18로만 오르고, 넓히면(ε\textcolor{#1f6d7a}{\varepsilon} = 0.5) η\textcolor{#827717}{\eta} 가 0.77로 작아져 0.44까지 오른다. KL 강도가 클수록 레퍼런스에서 덜 움직인다는 앞의 해석을 ε\textcolor{#1f6d7a}{\varepsilon} 과 η\textcolor{#827717}{\eta} 에도 똑같이 쓸 수 있다. 논문은 이 방법을 시뮬레이션 속 탁구 로봇에 썼다. 미리 만든 포핸드·백핸드·스매시 동작 여럿 가운데 날아오는 공에 맞는 것을 고르는 정책이고, 공을 맞히면 보상 1을 주었다. 성공률이 약 24%인 처음 정책에서 시작하면 약 39%에서 일찍 굳었고, 더 나은 처음 정책에서는 약 59%까지 올랐다. 새 정책은 옛 정책에 인자를 곱해 만들므로, 처음 정책이 드물게 고르던 동작은 몇 번을 고쳐도 드물게 남기 쉽다.

김민준 (평상)
김민준
KL을 그대로 제약으로 두면 되는 거였으면, 가카데나 배그널은 왜 2차 근사를 썼어요? 처음부터 정확한 KL을 쓰면 됐을 텐데요.
선생님 (짚어주기)
선생님
그때 자연 그래디언트는 파라미터를 조금씩 미는 정책 그래디언트를 고친 방법이었어요. 한 스텝을 작게 가는 틀 안에서는 KL을 피셔 정보로 쓴 2차식으로 바꾸는 게 손에 잡히는 길이었고, 바로 옆에서는 그림처럼 두 곡선이 거의 겹쳐요.
이서연 (평상)
이서연
그런데 멀리 가면 근사가 실제 KL보다 작게 나오네요. 근사로 한도를 지켰다고 믿어도 실제로는 한도 넘게 간 거고요.
선생님 (평상)
선생님
그래서 업데이트를 작게만 할 수 있었죠. 페터스 등은 파라미터를 미는 대신 새 정책의 확률을 바로 적어서 닫힌 꼴을 얻었어요. 그 대가로 분모에 모든 행동에 대한 합이 들어가요.
김민준 (호기심)
김민준
탁구 로봇은 미리 만든 동작 몇 가지 가운데 고르는 거니까, 그 합은 몇 항만 더하면 끝나겠네요.
선생님 (평상)
선생님
고를 것이 손으로 셀 만큼이었으니 그 분모를 그냥 계산할 수 있었어요.
이서연 (궁금함)
이서연
그럼 언어 모델처럼 고를 응답이 셀 수 없이 많으면, 그 분모의 합은 어떻게 구해요?
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점 하늘 1반 80점 도윤 2반 1반 모두에게 + ?점 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이었다고 하고 확인하시오.

레퍼런스와 KL 제약 최적 정책 (β = 1) 0.50 0.12 A 0.50 0.88 B 0.50 0.73 C 0.50 0.27 D 프롬프트 x1 프롬프트 x2 πref π*
김민준 (자신만만)
김민준
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의 확률로 생성한다. 두 응답의 암묵적 보상을 구하고, 암묵적 보상 모델이 어느 쪽을 선호하는지 답하시오.

두 응답을 생성할 확률 (β = 0.1) 0 0.01 0.02 0.02 0.01 y1 0.001 0.004 y2 πθ πref
김민준 (자신만만)
김민준
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}을 선호하는데, 암묵적 보상은 절대 확률 대신 레퍼런스 대비 로그비율을 잰다.