9장 — 샘플러: 같은 길을 걷는 여러 걸음법

증류: 여러 걸음의 길을 한 걸음으로 외우기

2M으로 20번, 잘 고른 일정이라면 10번 남짓 신경망을 부르면 쓸 만한 그림이 나온다. 그래도 영상처럼 수백 장을 만들거나, 로봇처럼 정해진 시간 안에 답해야 하거나, 사용자가 그리는 대로 바로 그림이 바뀌어야 하는 곳에서는 여전히 많다. 한 번의 호출로 끝낼 수는 없을까? 오일러 1걸음은 x̂₀, 곧 흐릿한 평균으로 뛰었다. 걸음법을 아무리 다듬어도 한 걸음 안에서 휘는 길을 다 따라갈 수는 없다. 걸음법이 아니라 신경망 쪽을 바꿔야 한다.

역사: 선생 샘플러를 따라 하는 학생

루먼(Eric Luhman)과 루먼(Troy Luhman)은 2021년 1월 여러 걸음의 잡음 제거 과정을 한 걸음으로 증류하는 「잡음 제거 학생」을 내놓았다. 결정적인 샘플러로 출발 잡음마다 끝 그림을 미리 뽑아 두고, 학생 신경망이 출발 잡음에서 그 끝 그림을 한 번에 내도록 배우게 한 것이다. 한 번에 그 먼 길을 외우기는 쉽지 않았다. 샐리먼스(Tim Salimans)와 호(Jonathan Ho)는 2022년 이를 나눠서 했다. 결정적인 샘플러의 두 걸음을 학생의 한 걸음으로 배우게 하고, 그 학생을 다음 선생으로 삼아 다시 걸음을 절반으로 줄이는 일을 되풀이했다(점진적 증류). 논문 요약에 따르면 최대 8192걸음짜리 샘플러에서 시작해 4걸음까지 줄였고, 그동안 그림의 질은 크게 잃지 않았다(CIFAR-10 에서 4걸음 FID 3.0). 증류 전체에 드는 시간도 원래 모델을 학습하는 시간보다 길지 않았다고 적었다.

2023년 송(Yang Song)과 동료들의 일관성 모델(consistency models)은 길 위 어느 자리에서든 그 길의 끝을 바로 내도록 배워, 한 번의 호출로 CIFAR-10 FID 3.55를 냈다. 같은 해 뤄(Simian Luo)와 동료들의 잠재 일관성 모델(LCM)은 이 생각을 Stable Diffusion 같은 잠재 디퓨전에 옮겨 2~4걸음 생성을 했다. 플로우 매칭에서 본 두 방법도 같은 곳을 노린다. 리플로우는 배운 흐름이 만든 짝으로 다시 배워 길 자체를 곧게 편다. 앞선 흐름을 선생 삼는다는 점에서 증류와 닮았다. MeanFlow는 처음부터 구간의 평균 속도를 배워, 선생 없이 한 번에 건너뛴다.

출발 잡음마다 끝이 하나라면

왜 오일러 1걸음은 평균으로 뛰는데, 학생은 한 번에 봉우리로 갈 수 있을까? 오일러 1걸음이 읽는 x̂₀는 「이 잡음 섞인 점을 낳았을 원래 그림들의 평균」이다. 짙은 잡음 속에서는 두 봉우리가 반반이니 평균은 골짜기다. 그런데 결정적인 길은 출발점 하나마다 끝점을 하나 정한다. 출발 잡음 ε에서 그 끝점으로 가는 대응은 함수이고, 함수는 배울 수 있다.

Sθ(ε)≈Φ(ε),L=Eε∥Sθ(ε)−Φ(ε)∥2\textcolor{#665522}{S_\theta}(\textcolor{#1f6066}{\varepsilon}) \approx \Phi(\textcolor{#1f6066}{\varepsilon}), \qquad \mathcal{L} = \mathbb{E}_{\textcolor{#1f6066}{\varepsilon}}\big\|\textcolor{#665522}{S_\theta}(\textcolor{#1f6066}{\varepsilon}) - \Phi(\textcolor{#1f6066}{\varepsilon})\big\|^2
ε출발 잡음 (출발 자리를 가장 큰 잡음 크기로 나눈 것)Φ(ε)선생 샘플러가 그 출발에서 여러 걸음 걸어 닿은 곳 (결정적이라 하나로 정해진다)Sθ학생: 출발 잡음을 받아 한 번에 끝을 내는 신경망L학생이 줄이는 제곱 오차\begin{array}{ll} \textcolor{#1f6066}{\varepsilon} & \text{출발 잡음 (출발 자리를 가장 큰 잡음 크기로 나눈 것)} \\ \Phi(\textcolor{#1f6066}{\varepsilon}) & \text{선생 샘플러가 그 출발에서 여러 걸음 걸어 닿은 곳 (결정적이라 하나로 정해진다)} \\ \textcolor{#665522}{S_\theta} & \text{학생: 출발 잡음을 받아 한 번에 끝을 내는 신경망} \\ \mathcal{L} & \text{학생이 줄이는 제곱 오차} \end{array}

두 봉우리 데이터에서 해 보자. 선생은 2M 20걸음이고, 출발 잡음 2000개마다 선생이 닿은 곳을 기록한다. 학생은 가장 단순한 함수, 출발 잡음 2000개의 분위수 자리 101곳에 마디를 둔 꺾은선이다(마디마다 값 하나가 매개변수). 제곱 오차를 가장 작게 하는 꺾은선을 고른 뒤, 새 출발점 2만 개를 학생에게 한 번씩 넣는다. 골짜기 비율은 1.6%(선생 1.1%, 오일러 1걸음 100%), 봉우리 폭은 0.318, 정확한 길 끝과의 평균 거리는 0.0125다. 신경망 호출 한 번으로 선생의 20번에 가까운 표본이 나온다. 선생의 여러 걸음에 걸친 길을 학생이 한 걸음에 가도록 배우게 하는 이 방법을 증류 (선생 샘플러가 여러 걸음에 간 곳을 학생이 한 걸음에 가도록 배우기 / distillation)라 한다.

왼쪽: 출발 잡음(가로)과 선생(2M 20걸음)이 닿은 곳(세로, 초록). 결정적인 길이라 출발마다 끝이 하나로 정해지고, 가운데에서 가파르게 갈라지는 매끄러운 곡선이 된다. 회색은 데이터 점을 출발 잡음과 상관없이 짝지은 것이다. 오른쪽: 걸음마다 새 잡음을 넣는 앤세스트럴 선생(20걸음)이 닿은 곳. 같은 출발에서도 끝이 두 봉우리로 갈려 출발 잡음과 거의 상관이 없다.
왼쪽: 출발 잡음(가로)과 선생(2M 20걸음)이 닿은 곳(세로, 초록). 결정적인 길이라 출발마다 끝이 하나로 정해지고, 가운데에서 가파르게 갈라지는 매끄러운 곡선이 된다. 회색은 데이터 점을 출발 잡음과 상관없이 짝지은 것이다. 오른쪽: 걸음마다 새 잡음을 넣는 앤세스트럴 선생(20걸음)이 닿은 곳. 같은 출발에서도 끝이 두 봉우리로 갈려 출발 잡음과 거의 상관이 없다.

ML에서: 몇 걸음 모델을 걷는 샘플러

증류한 모델은 대개 1~8걸음으로 쓰고, 그 걸음법도 따로 있다. ComfyUI 의 lcm 샘플러는 걸음마다 신경망이 내놓은 끝 그림으로 바로 간 뒤, 다음 잡음 크기만큼 새 잡음을 섞어 다시 묻는다(sample_lcm: x = denoised 다음 noise_scaling). 앤세스트럴 걸음에서 σdown = 0인 끝, 곧 읽은 잡음을 하나도 남기지 않는 걸음이다. 한 번에 끝을 내도록 배운 학생이라 이렇게 걸어도 무너지지 않고, 걸음을 더 쓰면 학생의 실수를 다시 고칠 기회가 생긴다.

문제 15. 짝을 아무렇게나 지으면

같은 꺾은선 학생(마디 101개)에게 이번에는 선생이 닿은 곳 대신 데이터에서 뽑은 점을 출발 잡음과 상관없이 짝지어 배우게 한다. (가) 배운 뒤 남는 제곱 오차는 얼마일 것이라 예상하는가? 선생의 짝으로 배울 때는 0.0011이었다. (나) 이 학생이 내는 표본은 골짜기 비율이 얼마인가? (다) 「잡음에서 그림으로 가는 신경망을 그냥 배우면 되지 않나」라는 물음에 어떻게 답하겠는가?

김민준 M01
김민준

짝만 바꾼 거니까 비슷하게 작지 않을까요? 학생도 데이터도 같잖아요.

선생님 T01
선생님

출발 잡음을 하나 정해 놓으면, 그 잡음에 짝지어진 정답은 몇 개예요?

김민준 M06
김민준

무작위로 짝지었으니까… 같은 잡음 근처에 −1.5 쪽 정답도 +1.5 쪽 정답도 섞여 있어요. 돌려 보니 남은 제곱 오차가 2.23이에요. 데이터의 분산이 2.33인데 거의 줄지 않았어요. 표본은 97.4%가 골짜기에 떨어지고, 출력이 −0.99에서 0.96 사이에만 있어요.

이서연 S08
이서연

같은 입력에 정답이 반반으로 갈리면 제곱 오차를 가장 작게 하는 답은 정답들의 평균이야. 그러니까 학생은 어느 잡음을 받든 0 근처를 내. 오일러 1걸음이 평균으로 뛴 것과 같은 일이고, 그림이면 흐릿한 평균 그림이지.

선생님 T13
선생님

그래서 (다)의 답은 짝이에요. 잡음과 그림을 아무렇게나 짝지으면 평균밖에 못 배우고, 결정적인 샘플러가 지어 준 짝으로 배워야 한 번에 갈 수 있어요. 여러 걸음 모델이 먼저 있어야 하는 까닭이에요.

이서연 S01
이서연

확률론에서 제곱 오차를 최소로 하는 예측이 조건부 평균이라는 걸 배웠는데, 조건부 평균이 하나의 값으로 몰리려면 입력이 정답을 정해 줘야 하는 거네요.

문제 16. 어느 선생을 따라 할까

이번에는 선생을 앤세스트럴 20걸음으로 바꿔, 같은 출발 잡음 2000개에서 앤세스트럴 선생이 닿은 곳으로 꺾은선 학생을 배우게 한다. 앤세스트럴 선생 자신의 표본은 골짜기 비율이 0.95%로 좋다. (가) 학생의 남은 제곱 오차와 골짜기 비율은 얼마인가? (나) 같은 출발 잡음에서 새 잡음의 시드만 바꿔 앤세스트럴 선생을 다시 걸으면 몇 %가 다른 봉우리에 닿는가? (다) 샐리먼스와 호가 증류의 선생으로 결정적인 샘플러를 쓴 까닭을 말하라.

김민준 M01
김민준

선생이 좋으니 학생도 좋겠죠. 앤세스트럴 쪽이 골짜기도 더 잘 비웠잖아요.

선생님 T01
선생님

결과를 봐요.

김민준 M05
김민준

남은 제곱 오차가 2.08, 골짜기가 94.7%예요. 짝을 아무렇게나 지은 학생과 거의 같아요. (나)는 시드만 바꿨는데 49.5%가 다른 봉우리로 가요.

이서연 S08
이서연

반이 바뀐다는 건 출발 잡음이 어느 봉우리로 갈지를 거의 정하지 않는다는 뜻이네. 걸음마다 새로 섞는 잡음이 정하는 거야. 그러면 학생이 받는 입력(출발 잡음)으로는 정답을 정할 수 없으니, 무작위 짝과 같아져서 평균만 배워.

선생님 T14
선생님

(다)는요?

이서연 S01
이서연

학생이 외울 수 있는 건 출발 잡음의 함수뿐이에요. 결정적인 샘플러는 출발 잡음 하나에 끝 하나를 정해 주니까 외울 거리가 있고, 앤세스트럴은 표본으로는 좋아도 외울 거리를 주지 않아요. 걸음마다 넣는 잡음까지 학생에게 다 넣어 주지 않는 한요.

김민준 M01
김민준

길을 외우려면 같은 출발점에서 늘 같은 길로 가는 선배를 따라가야지, 매번 주사위를 굴려 길을 정하는 선배를 따라가면 외울 게 없는 거네요.