Chapter 22: 영상 생성 모델의 학습 — 시퀀스와 디퓨전 사이에서 무엇을 "강제"하는가

의문

이미지 모델에 강화학습을 붙이는 도구는 2025년에 거의 갖춰졌다. 그런데 영상은 이미지를 여러 장 늘어놓은 것으로 끝나지 않는다. 영상은 프레임이 차례로 이어지는 시퀀스이고, 프레임 하나하나는 노이즈에서 걷어 내는 디퓨전으로 만들어진다. 「다음 프레임을 맞힌다」는 목표와 「노이즈를 걷어 낸다」는 목표를 손실 하나에 어떻게 담을까? 학습 때 모델에게 보여 주는 과거와, 실제로 영상을 만들 때 모델이 딛고 서는 과거가 다르면 무슨 일이 생길까? 보상을 얹기 전에, 영상 모델이 원래 무엇을 배우도록 짜여 있는지부터 다시 세워야 한다.

두 목표의 만남: 영상은 시퀀스이자 디노이징이다

5초짜리 영상을 만든다고 하자. 방법은 두 가지다. 80장의 프레임(초당 16장이면 5초에 80장이다)을 한 덩어리로 보고 노이즈를 한꺼번에 걷어 낼 수도 있고, 첫 프레임을 만든 뒤 그걸 보고 둘째 프레임을 만드는 식으로 한 장씩 이어 갈 수도 있다. 앞의 것은 이미지 디퓨전을 시간 축으로 늘린 것이고, 뒤의 것은 언어모델이 다음 토큰을 쓰는 방식을 프레임에 옮긴 것이다. 둘은 각자 다른 목표로 학습한다.

아래 그림은 프레임 여섯 장으로 두 방식을 나란히 놓은 것이다. 칸의 숫자는 그 프레임에 남은 노이즈의 양이다.

칸의 숫자 = 노이즈 수준 (0 깨끗 · 4 순수 노이즈) 1 2 3 4 5 6 프레임 전체 시퀀스 디퓨전 처음 4 4 4 4 4 4 반복 2 2 2 2 2 2 2 끝 0 0 0 0 0 0 자기회귀 1번째 만드는 중 2 4 4 4 4 4 2번째 만드는 중 0 2 4 4 4 4 5번째 만드는 중 0 0 0 0 2 4
Lseq=−∑n=1Nlog⁡pθ(xn∣x<n)Ldiff=Ek, ε[∥ε−εθ(xk,k)∥2] \textcolor{#d62728}{\mathcal{L}_\text{seq}} = -\sum_{n=1}^{N} \log \textcolor{#1565c0}{p_\theta}\big(\textcolor{#1c9c60}{x^{n}} \mid \textcolor{#1c9c60}{x^{<n}}\big) \qquad \textcolor{#d62728}{\mathcal{L}_\text{diff}} = \mathbb{E}_{\textcolor{#4527a0}{k},\,\textcolor{#b8860b}{\varepsilon}}\Big[\big\lVert \textcolor{#b8860b}{\varepsilon} - \textcolor{#1565c0}{\varepsilon_\theta}(\textcolor{#1c9c60}{x_{k}}, \textcolor{#4527a0}{k}) \big\rVert^2\Big]
Lseq시퀀스 목표: 앞 프레임들을 보고 다음 프레임을 맞힌다Ldiff디퓨전 목표: 노이즈 낀 입력에서 넣은 노이즈를 맞힌다xn, x<nn번째 프레임, 그 앞의 프레임 전부pθ, εθ학습 중인 모델 (다음 프레임의 분포, 노이즈 예측)xk깨끗한 입력에 노이즈 수준 k 만큼 노이즈를 섞은 것k노이즈 수준 (0 = 깨끗, 클수록 노이즈가 많다)ε실제로 섞은 노이즈N프레임 수 \small\begin{array}{ll} \textcolor{#d62728}{\mathcal{L}_\text{seq}} & \text{시퀀스 목표: 앞 프레임들을 보고 다음 프레임을 맞힌다} \\ \textcolor{#d62728}{\mathcal{L}_\text{diff}} & \text{디퓨전 목표: 노이즈 낀 입력에서 넣은 노이즈를 맞힌다} \\ \textcolor{#1c9c60}{x^{n}},\ \textcolor{#1c9c60}{x^{<n}} & n\text{번째 프레임, 그 앞의 프레임 전부} \\ \textcolor{#1565c0}{p_\theta},\ \textcolor{#1565c0}{\varepsilon_\theta} & \text{학습 중인 모델 (다음 프레임의 분포, 노이즈 예측)} \\ \textcolor{#1c9c60}{x_{k}} & \text{깨끗한 입력에 노이즈 수준 } k \text{ 만큼 노이즈를 섞은 것} \\ \textcolor{#4527a0}{k} & \text{노이즈 수준 (0 = 깨끗, 클수록 노이즈가 많다)} \\ \textcolor{#b8860b}{\varepsilon} & \text{실제로 섞은 노이즈} \\ N & \text{프레임 수} \end{array}

프레임 번호는 위첨자 nn으로, 노이즈 수준은 k\textcolor{#4527a0}{k}로 쓴다. 둘 다 흔히 「시점」이라 불러서 한 글자로 쓰면 곧 헷갈린다. 첨자 θ는 학습하는 파라미터를 뜻한다. ε\textcolor{#b8860b}{\varepsilon}는 이 장에서 노이즈를 뜻한다.

전체 시퀀스 디퓨전(full-sequence diffusion)은 Ldiff\textcolor{#d62728}{\mathcal{L}_\text{diff}} 하나로 간다. 입력 x\textcolor{#1c9c60}{x}가 영상 전체이고, 모든 프레임에 같은 노이즈 수준 k\textcolor{#4527a0}{k}를 준다. 모델은 앞뒤 프레임을 모두 보면서(양방향) 노이즈를 걷어 내므로 움직임이 매끄럽고 품질이 좋다. 대신 길이가 학습 때 정한 만큼으로 묶이고, 마지막 반복이 끝나야 첫 프레임도 나온다.

자기회귀(autoregressive) 영상 모델은 Lseq\textcolor{#d62728}{\mathcal{L}_\text{seq}}의 뼈대를 쓴다. 다만 프레임은 토큰처럼 몇만 개 중 하나를 고르는 것이 아니라 연속값이라서, 조건부 분포 pθ(xn∣x<n)\textcolor{#1565c0}{p_\theta}(\textcolor{#1c9c60}{x^{n}} \mid \textcolor{#1c9c60}{x^{<n}})를 디퓨전으로 표현한다. 과거 프레임을 조건으로 받아 다음 프레임의 노이즈를 걷어 내는 것이다. 과거만 보므로(인과적, causal) 길이에 제한이 없고, 만든 프레임을 바로 내보낼 수 있다(스트리밍). 게임 화면이나 실시간 대화 영상처럼 사용자의 입력에 따라 다음 장면이 바뀌어야 하는 곳에서는 이쪽만 쓸 수 있다.

전체 시퀀스 디퓨전 자기회귀
보는 방향 앞뒤 모두(양방향) 과거만(인과적)
길이 학습 때 정한 길이 제한 없음
첫 프레임이 나오는 때 모든 반복이 끝난 뒤 첫 프레임의 디노이징이 끝나자마자
약점 느리고 길이가 묶인다 앞에서 생긴 작은 오류가 뒤로 쌓인다

표의 마지막 줄 두 칸(「느리고 길이가 묶인다」와 「앞에서 생긴 작은 오류가 뒤로 쌓인다」)이 이 장 전체의 줄거리다. 2024년부터 나온 「○○ 포싱(forcing)」 논문들(포싱은 학습 때 과거를 어디서 가져오는가를 정하는 학습법의 이름이다)은 모두 이 두 목표를 어떻게 합칠지, 그리고 자기회귀의 약점을 어떻게 막을지에 대한 답이다.

ML에서: 영상 모델은 어느 쪽으로 가고 있나

2024년까지 공개된 큰 영상 모델은 대부분 전체 시퀀스 디퓨전이었다. 수 초짜리 영상을 한 번에 만들고, 더 길게 하려면 끝부분을 조건으로 다음 덩어리를 다시 만들었다. 2025년에는 자기회귀 쪽이 규모를 키웠다. MAGI-1(Sand.ai, 2025년 5월)은 영상을 덩어리(청크) 단위로 자기회귀 생성하는 24B 파라미터 모델로, 뒤 청크일수록 노이즈가 많도록 노이즈를 단조롭게 늘려 가며 청크를 걷어 낸다. SkyReels-V2(2025년 4월)는 전체 시퀀스 모델을 가져와 프레임마다 다른 노이즈를 주는 방식으로 다시 학습해 길이 제한을 풀었다. 둘 다 프레임(청크)마다 노이즈 수준을 다르게 준다는 점에서, 이 장 뒤쪽의 디퓨전 포싱과 같은 도구를 쓴다.

문제 1 — 어느 쪽으로 만들까

다음 세 가지 쓰임새에 전체 시퀀스 디퓨전과 자기회귀 중 어느 방식이 맞는지 고르고, 이유를 한 줄로 쓰시오. (가) 광고용 5초 영상 한 편 (나) 플레이어의 조작에 따라 다음 화면이 바뀌는 게임 화면 (다) 끊기지 않는 3분짜리 영상

김민준 (자신만만)
김민준
셋 다 전체 시퀀스죠. 품질이 더 좋다고 했으니까요.
선생님 (질문)
선생님
(나)에서 플레이어가 3초 지점에 오른쪽으로 꺾었어요. 전체 시퀀스 모델은 그 조작을 언제 알게 되죠?
김민준 (당황)
김민준
영상 전체를 한꺼번에 만들기 시작할 때 이미 3초 뒤 장면까지 걷어 내고 있으니까… 조작이 들어올 자리가 없네요.
이서연 (평상)
이서연
(다)도 걸려. 학습 때 정한 길이가 5초면 3분은 한 번에 못 만들어. 끝부분을 조건으로 이어 붙여야 하는데, 그건 사실상 덩어리 단위 자기회귀야.
선생님 (평상)
선생님
그래요. 품질은 조건이 맞을 때의 이야기예요. 조작이 중간에 들어오거나 길이가 정해져 있지 않으면 자기회귀만 남아요.
김민준 (평상)
김민준
발표 자료를 통째로 다 만든 뒤에야 질문을 받겠다는 것과 같네요. 발표 중간에 들어온 질문은 반영할 수가 없죠.

정리 (가) 전체 시퀀스: 짧고 길이가 정해져 있으면 양방향으로 보는 쪽이 품질에 유리하다. (나) 자기회귀: 중간에 들어오는 조작을 다음 프레임에 반영하려면 과거만 보고 한 장씩 만들어야 한다. (다) 자기회귀(또는 덩어리 단위 자기회귀): 학습 때 정한 길이를 넘으므로 이어 붙여야 하고, 그 순간 이어 붙인 부분에서 오류가 쌓이는 문제가 생긴다.