26. 이미지·로보틱스의 강화학습: 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)으로 썼다. 그들은 SDE마다, 모든 시점에서 같은 주변분포(경로 전체가 아니라 한 시점 tt의 xtx_t만 모아 본 분포)를 주는 결정론적 ODE인 확률 플로우 ODE(probability flow ODE)가 하나씩 있음을 보였다. 플로우 매칭은 처음부터 이 ODE의 속도장(각 위치·시점에서 xx가 움직일 방향과 시간당 움직이는 거리를 정해 주는 함수)을 학습하는 방법이다. 시각 생성 RL은 SDE와 확률 플로우 ODE의 대응을 거꾸로 써서, ODE로 학습된 모델에서 SDE를 만든다.

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

해법은 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). 노이즈는 분포를 퍼뜨리고, 스코어 쪽으로 미는 항은 확률이 높은 곳으로 되모은다. 둘이 맞비기므로 점 하나하나의 경로는 흔들리지만 분포는 평균 0, 분산 1 그대로 유지된다.

① 지금 분포 분산 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이니까, 7을 빼고 견줘 볼게요. 앞 반 점수에서 7을 빼고 100배 하면 둘째 반 점수에서 7을 뺀 값들과 같은 모음이 돼요.
선생님 (질문)
선생님
그럼 100배 하면 표준편차는 어떻게 되죠?
이서연 (깨달음)
이서연
표준편차도 100배가 되니까, 나누면 몇 배 했는지가 지워져요. 표준점수는 차이가 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개다.