21. 이미지·로보틱스의 강화학습 — GRPO가 시각 생성을 만났을 때

노이즈 재주입(ODE → SDE): 결정론적 샘플러에 탐색을 되돌린다

DDPO는 스텝마다 노이즈가 섞이는 확률적 샘플러를 전제했다. 스텝이 가우시안이어야 로그확률이 있고, 노이즈가 있어야 탐색이 있다. 그런데 FLUX, Stable Diffusion 3 같은 최신 모델은 흐름 매칭(flow matching, rectified flow)으로 학습되어 결정론적 ODE(상미분방정식 — 시작점이 정해지면 경로가 하나로 정해진다)로 샘플링한다. 스텝 노이즈가 없다. 같은 시작 노이즈에서 G장을 뽑으면 G장이 똑같이 나온다.

역사: 같은 주변분포를 주는 ODE와 SDE

2021년 양 송(Yang Song) 등은 「Score-Based Generative Modeling through Stochastic Differential Equations」(ICLR 2021)에서 디퓨전을 확률미분방정식(SDE)으로 쓰고, 모든 시점에서 같은 주변분포(경로 전체가 아니라 한 시점 tt의 xtx_t만 모아 본 분포)를 주는 결정론적 ODE — 확률 흐름 ODE(probability flow ODE) — 가 짝으로 있음을 보였다. 흐름 매칭은 처음부터 ODE의 속도장(각 위치·시점에서 xx가 움직일 방향과 빠르기를 정해 주는 함수)을 학습하는 쪽이다. 시각 생성 RL은 이 짝을 반대 방향으로 쓴다.

퍼뜨리고 되모으기: 노이즈를 넣어도 분포가 그대로인 까닭

해법은 ODE에 노이즈를 더하되, 노이즈가 퍼뜨린 만큼을 되모으는 항을 함께 넣는 것이다. 숫자로 한 스텝만 보자. 어느 시점의 분포가 평균 0, 분산 1인 정규분포이고, 흐름은 잠시 멈춰 있다고 하자(속도 0). 여기에 분산 0.1짜리 노이즈를 더하기만 하면 분산은 1.1로 퍼진다. 그래서 노이즈를 더하기 전에 모든 점을 분포의 가운데 쪽으로 5%씩 당긴다. 확률이 높은 쪽으로 미는 방향, 곧 스코어 함수(score, 로그 밀도의 기울기)의 방향이다. 당기면 분산이 0.952=0.90250.95^2 = 0.9025로 좁아지고, 노이즈 0.1을 더하면 0.9025+0.1=1.00250.9025 + 0.1 = 1.0025, 거의 처음의 1로 돌아온다. 남는 0.0025는 스텝을 잘게 나눌수록 사라진다(노이즈 분산을 0.01로 줄이면 0.000025). 노이즈는 분포를 퍼뜨리고, 스코어 쪽으로 미는 항은 확률이 높은 곳으로 되모은다. 둘이 맞비기므로 점 하나하나의 경로는 흔들리지만 분포는 그대로다.

① 지금 분포 분산 1 ② 스코어 쪽으로 당김 분산 0.90 ③ 노이즈를 더함 분산 1.00 한 스텝: 점선은 ①의 분포

이 맞비김을 시간 전체로 적으면, ODE dx=v dtdx = v\,dt에 노이즈 g dWg\,dW를 더하고 그만큼 dtdt 항(드리프트 항)을 스코어 함수 ∇log⁡pt\nabla \log p_t 방향으로 보정한 SDE가 된다. 여기서 dxdx, dtdt, dWdW는 곱이 아니라 각각 「아주 짧은 시간 동안 xx가 변한 양」, 「그 짧은 시간」, 「그동안 더해진 무작위 흔들림」을 뜻하는 한 덩어리 이름이고, ∇\nabla는 기울기를 뜻한다. 이 SDE는 모든 시점의 주변분포가 ODE와 똑같다.

dx=[vθ(x,t)+gt22 ∇log⁡pt(x)]dt+gt dWd\textcolor{#1c9c60}{x} = \Big[\textcolor{#1565c0}{v_\theta}(\textcolor{#1c9c60}{x}, t) + \frac{\textcolor{#993600}{g_t}^2}{2}\,\nabla \log \textcolor{#206049}{p_t}(\textcolor{#1c9c60}{x})\Big]dt + \textcolor{#993600}{g_t}\,\textcolor{#b8860b}{dW}
x생성 중인 이미지 (노이즈에서 출발해 그림이 된다)vθ학습 중인 모델의 속도장 (흐름을 미는 방향. θ는 모델의 파라미터)∇log⁡pt(x)시점 t 분포의 스코어 (속도장에서 계산된다)gt넣는 노이즈의 크기dW브라운 운동의 작은 증분 (무작위성) \small\begin{array}{ll} \textcolor{#1c9c60}{x} & \text{생성 중인 이미지 (노이즈에서 출발해 그림이 된다)} \\ \textcolor{#1565c0}{v_\theta} & \text{학습 중인 모델의 속도장 (흐름을 미는 방향. }\theta\text{는 모델의 파라미터)} \\ \nabla \log \textcolor{#206049}{p_t}(\textcolor{#1c9c60}{x}) & \text{시점 t 분포의 스코어 (속도장에서 계산된다)} \\ \textcolor{#993600}{g_t} & \text{넣는 노이즈의 크기} \\ \textcolor{#b8860b}{dW} & \text{브라운 운동의 작은 증분 (무작위성)} \end{array}

위 숫자 예에서 「5%씩 당긴다」가 gt22∇log⁡pt dt\frac{\textcolor{#993600}{g_t}^2}{2}\nabla \log \textcolor{#206049}{p_t}\,dt 항이다. 분산 1인 정규분포의 스코어는 −x-\textcolor{#1c9c60}{x}이고, 노이즈 분산 gt2dt=0.1\textcolor{#993600}{g_t}^2 dt = 0.1의 절반인 0.05를 곱하면 −0.05 x-0.05\,\textcolor{#1c9c60}{x}, 곧 5% 당김이 된다.

흐름 매칭 모델에서는 스코어 함수를 속도장 vθ\textcolor{#1565c0}{v_\theta}로부터 바로 계산할 수 있어서, 별도 모델 없이 이 변환이 가능하다. 이 SDE를 오일러-마루야마 방식(작은 시간 간격마다 dtdt 항을 더하고 정규분포 노이즈를 한 번 뽑아 더하는 계산)으로 잘게 나누면 각 스텝이 다시 가우시안 정책이 된다 — 로그확률과 탐색이 함께 돌아온다.

문제 2 — 복사한 답안 여덟 장의 표준점수

논술 모의고사에서 한 학생이 같은 답안을 여덟 장 복사해 냈다. 채점자는 매번 조금씩 다르게 매겨 7.02, 6.98, 7.01, 6.99, 7.00, 7.03, 6.97, 7.00점을 주었다. (가) 여덟 장의 표준점수(점수에서 평균을 빼고 표준편차로 나눈 값)를 구하시오. (나) 다른 반에서는 여덟 학생이 각자 쓴 답안이 9, 5, 7, 6, 8, 7, 4, 10점을 받았다. 이 반의 표준점수와 견주면 무엇을 알 수 있는가? (다) 채점자가 여덟 장에 똑같이 7.00점을 주었다면?

김민준 (평상)
김민준
평균은 7.00이고 표준편차는 0.0187이에요. 7.03점은 (7.03 − 7.00) / 0.0187 ≈ 1.6, 6.97점은 −1.6. 나머지는 ±1.07, ±0.53, 0, 0이고요.
선생님 (질문)
선생님
그럼 이 여덟 장 가운데 가장 잘 쓴 답안은 7.03점짜리인가요?
김민준 (평상)
김민준
표준점수가 1.6이니까 꽤 잘 쓴…
김민준 (당황)
김민준
아, 여덟 장이 전부 같은 답안이죠. 잘 쓰고 못 쓰고가 없어요.
이서연 (평상)
이서연
(나)를 해 보면 더 이상해요. 9, 5, 7, 6, 8, 7, 4, 10은 표준편차가 1.87인데, 표준점수가 ±1.6, ±1.07, ±0.53, 0, 0이에요. 앞 반과 똑같은 숫자 모음이에요.
선생님 (평상)
선생님
왜 똑같이 나왔을까요?
이서연 (깨달음)
이서연
앞 반 점수에서 7을 빼고 100배 하면 둘째 반 점수에서 7을 뺀 값들과 같은 모음이 돼요. 표준편차로 나누면 몇 배 했는지가 지워지고요. 표준점수는 차이가 0.02점이든 2점이든 늘 같은 크기로 맞춰 버려요.
김민준 (평상)
김민준
그러면 표준점수만 보고는 채점자의 잡음인지 진짜 실력 차인지 모르네요.
선생님 (평상)
선생님
(다)는요?
김민준 (평상)
김민준
표준편차가 0이라 0으로 나누게 돼요. 분모에 아주 작은 수를 더해 두면 표준점수가 전부 0이고요.
이서연 (평상)
이서연
수학 시간에 단위를 바꿔도 상관계수는 그대로라고 배웠는데, 여기서는 그게 약점이 되네요. 잡음까지 실제 차이와 같은 크기로 맞춰 주니까요.

정리 (가) 평균 7.00, 표준편차 약 0.019, 표준점수 ±1.6, ±1.07, ±0.53, 0, 0. (나) 실력 차가 나는 반과 표준점수 모음이 똑같다. 표준점수는 차이의 크기를 지우므로 잡음도 실제 차이와 같은 크기로 부풀린다. (다) 표준편차가 0이라 나눌 수 없고, 분모에 작은 수를 더하면 표준점수는 전부 0이다.

문제 3 — ODE 그룹의 어드밴티지

흐름 매칭 모델을 ODE로 샘플링하면서 GRPO를 쓰면, 같은 프롬프트·같은 시작 노이즈의 그룹 8개에 대한 어드밴티지(평균보다 얼마나 나은가) A^i=(ri−μ)/σ\textcolor{#8e44ad}{\hat A_i} = (\textcolor{#d9670b}{r_i} - \textcolor{#00897b}{\mu})/\textcolor{#008deb}{\sigma}는 어떻게 되는가? (μ\textcolor{#00897b}{\mu}는 그룹 평균, σ\textcolor{#008deb}{\sigma}는 그룹 표준편차)

김민준 (평상)
김민준
8개가 전부 같은 이미지니까 보상도 같고, μ=r\textcolor{#00897b}{\mu} = \textcolor{#d9670b}{r}, σ=0\textcolor{#008deb}{\sigma} = 0. 어드밴티지는 0/0이에요.
이서연 (평상)
이서연
구현에서는 보통 분모에 작은 ε를 더하니까 0/ε = 0. 학습 신호(시그널)가 없어.
김민준 (자신만만)
김민준
그래도 아까 복사한 답안처럼, 보상 모델이 GPU 비결정성 때문에 소수점 아래 잡음을 조금 내면 σ가 0이 아니니까 어드밴티지가 ±1 크기로 부풀려지잖아요. 뭔가 배우긴 하겠죠?
선생님 (질문)
선생님
민준 학생, 여덟 개가 전부 같은 경로라면 ∇log⁡π\nabla \log \textcolor{#1565c0}{\pi}(π는 정책)는 몇 종류죠? 그리고 어드밴티지 여덟 개를 더하면요?
김민준 (생각)
김민준
경로가 같으니까 ∇log⁡π\nabla \log \textcolor{#1565c0}{\pi}도 하나뿐이고… 어드밴티지는 평균을 뺐으니 합이 0이에요. 그럼 ∑iA^i∇log⁡π=(∑iA^i)∇log⁡π=0\sum_i \textcolor{#8e44ad}{\hat A_i} \nabla\log\textcolor{#1565c0}{\pi} = (\sum_i \textcolor{#8e44ad}{\hat A_i})\nabla\log\textcolor{#1565c0}{\pi} = 0.
김민준 (깨달음)
김민준
잡음이 얼마나 부풀려지든 정확히 상쇄되네요. 애초에 ODE면 스텝 로그확률도 정의가 안 되고요.
선생님 (평상)
선생님
그래요. GRPO에서 "모두 정답이면 배울 게 없다"던 상황이, 문제가 쉬워서가 아니라 샘플러 때문에 생긴 거예요.
김민준 (평상)
김민준
아까 복사한 답안 문제랑 같네요. 거기서는 잡음으로 순위라도 매겨졌는데, 여기서는 그 순위가 그래디언트에서 통째로 상쇄돼요.

정리 모든 보상이 같아 σ=0\textcolor{#008deb}{\sigma} = 0, 어드밴티지는 (ε를 더한 구현에서) 전부 0 — 학습 시그널이 없다. 보상 모델의 잡음으로 σ\textcolor{#008deb}{\sigma}가 0이 아니어도, 경로가 하나라 어드밴티지의 합 0이 곱해져 상쇄된다. 결정론적 샘플러에서는 그룹이 사실상 1개다.