Self Gradient Forcing - Native Long Video Extrapolation

🏷️ 논문 영상처리 확산모델 딥러닝

J. Zhuang, S. Zhang, Y. Bian, Y. Li, et al., "Self Gradient Forcing: Native Long Video Extrapolation," arXiv:2607.20368, 2026.

긴 AI 생성 영상을 보면 공통된 현상이 있습니다. 처음 몇 초는 멀쩡한데 시간이 갈수록 인물 얼굴이 조금씩 바뀌고, 배경이 슬그머니 다른 장소가 되고, 카메라가 있을 수 없는 위치로 넘어갑니다.

이 논문은 그 현상에 이름과 원인을 붙입니다. 원인은 모델이 자기가 만든 과거 프레임을 어떤 형태의 기억으로 적어 두어야 하는지를 아무도 가르쳐 준 적이 없다는 것입니다.

self-gradient-forcing-overview.png

저자

JD의 Joy Future Academy 소속 15인 팀입니다. 1저자는 좡쥔하오로, 칭화대학교 컴퓨터기술 석사 과정 마지막 학년이며 이미지·영상 생성을 연구합니다. 코드도 본인 계정으로 공개했습니다.

시니어 저자는 두안난입니다. 마이크로소프트 리서치 아시아 NLP 그룹에서 Unicoder와 CodeBERT를 만들었고 StepFun을 거쳐 JD.COM 부사장으로 언어·음성·비전·체화 AI 파운데이션 모델 연구를 총괄합니다. Step-Video-T2V 시니어 저자이기도 하므로, 영상 생성은 이 팀이 이어서 파고 있는 축입니다.

학생 1저자가 문제를 좁혀 파고 산업 연구소가 컴퓨트와 평가 인프라를 대는 구성인데, 이 논문에서는 240초 롤아웃을 여러 초기화 설정에서 반복 평가하고 1,900건 넘는 사람 선호 판정을 모으는 데 그 자원이 쓰였습니다.

배경

자기회귀 영상 확산 모델을 학습시키는 표준 방식은 Teacher Forcing이었습니다. 학습 때는 진짜 영상을 과거 컨텍스트로 주고, 추론 때는 모델이 스스로 만든 과거를 씁니다. 이 불일치가 노출 편향을 만들고 장문 외삽을 어렵게 합니다.

Self Forcing이 이 문제를 해결했습니다. 학생 모델을 자기 롤아웃이 만든 히스토리 위에서 학습시키고, 양방향 영상 모델로부터 분포 매칭 증류(DMD) 감독을 받는 방식입니다. 지금은 이 자기 롤아웃 레시피가 사실상 표준이 됐습니다.

그런데 이 방식을 실제로 돌릴 수 있게 만들려고 대부분의 구현이 결정적인 제약 하나를 물려받았습니다. 과거 KV 캐시를 통과하는 청크 간 그래디언트 흐름을 잘라 버린 것입니다.

여기서 정확히 무엇이 빠지는지가 이 논문의 출발점입니다. 자기회귀 영상 확산은 잠재 블록을 순차 생성하는데, 블록 \(j\)를 디노이징할 때 모델은 과거 잠재 자체가 아니라 KV 캐시를 참조합니다. 블록 \(i < j\)가 생성되면 그 예측 클린 잠재 \(\tilde{x}_i\)가 클린 컨텍스트 시각 \(t_{\text{ctx}} = 0\)에서 처리되고, 그 결과 나온 K/V 항목이 캐시에 추가됩니다. 즉 뒤 블록은 \(\tilde{x}_i\)를 직접 보는 것이 아니라 거기서 기록된 메모리 표현을 봅니다.

캐시 쓰기 계산을 \(C_\theta\)라 하면 이 갱신은 재귀적입니다.

\[KV_i^0(\theta) = C_\theta\left(\tilde{x}_i, t_{\text{ctx}}; KV_{<i}^0\right), \quad t_{\text{ctx}} = 0\]

미래의 손실이 이 항목을 미분해 들어갈 수 있다면, \(\tilde{x}_i\)를 K/V 메모리로 부호화한 계산에 책임을 물을 수 있습니다. 그런데 얼린 캐시 방식에서는 K/V 항목이 분리된 롤아웃 상태로 취급됩니다. 그래서 미래 손실은 "뒤의 노이즈 토큰이 자기생성 히스토리를 어떻게 읽을지"는 학습시키지만, "그 히스토리가 애초에 어떻게 기록되었어야 하는지"는 학습시키지 못합니다. 저자들은 이 빠진 감독 경로를 historical context-gradient gap이라 부릅니다.

문제가 더 커지는 이유는 같은 DiT 파라미터가 노이즈 디노이징과 클린 컨텍스트 캐시 쓰기에 공유되기 때문입니다. 노이즈 시각의 DMD 손실이 공유 파라미터를 갱신하므로 캐시 기록기도 함께 바뀌는데,

\[\theta^{r+1} = \theta^r - \eta\nabla_\theta \mathcal{L}_{\text{SF}}(\theta^r), \quad KV_i^0(\theta^{r+1}) \not\equiv KV_i^0(\theta^r)\]

그 변화가 장문 롤아웃에 적합한 방향인지 검사할 손실이 없습니다. 기록기가 표류할 수 있다는 뜻입니다.

가장 단순한 해법은 과거 KV 캐시를 미분 가능하게 유지하는 것입니다. 하지만 그러려면 모든 캐시 쓰기의 역전파 그래프를 그것을 소비하는 뒤 블록이 전부 처리될 때까지 붙들고 있어야 합니다. 자기회귀 롤아웃이 디노이징 스텝과 트랜스포머 층을 오가며 캐시를 반복해서 쓰고 읽고 늘리므로, 그래프가 고정 창이 아니라 롤아웃 길이에 따라 자랍니다. 병목은 K/V 텐서 저장이 아니라 재귀 캐시 궤적에 붙은 저장 활성값입니다.

어떻게 만들었나

Self Gradient Forcing은 이 직렬 그래프 유지 문제를 유계 병렬 재계산 문제로 바꿉니다.

self-gradient-forcing-two-pass.png

핵심은 Self Forcing 자체를 2패스 관점으로 다시 보는 것입니다.

패스 1은 추론과 완전히 동일한 무-그래디언트 직렬 자기회귀 롤아웃입니다. 각 블록마다 현재 캐시로 디노이징하면서, 균등 분포로 뽑은 종료 스텝 \(s\)에서 두 가지를 기록합니다. 그 시점에 모델에 들어간 노이즈 잠재 \(z_i^{t^\star}\)와 예측된 클린 잠재 \(\tilde{x}_i\)입니다. 이 패스의 모든 계산은 그래디언트 추적 없이 돌고, 기록된 상태는 패스 2에서 고정 데이터로 취급됩니다.

패스 2는 그 종료 스텝 계산을 병렬로 재구성합니다. 재구성 인과 마스크 \(M_{\text{rec}}\)는 직렬 캐시가 유도하는 sink-plus-window 어텐션 관계를 그대로 재현합니다.

\[\hat{X}_{\text{tar}} = G_\theta\left(Z^\star, t^\star; \tilde{X}_{\text{ctx}}, t_{\text{ctx}}, M_{\text{rec}}\right)\]

여기까지는 얼린 캐시 Self Forcing과 같습니다. 갈리는 곳은 딱 한 군데, 재구성된 컨텍스트 K/V 경로에 걸린 stop-gradient 경계입니다. SGF는 그 경계를 제거합니다.

컨텍스트 잠재 \(\tilde{X}_{\text{ctx}}\) 자체는 여전히 stop-gradient 입력으로 남습니다. 즉 SGF는 뽑힌 롤아웃 궤적을 최적화하지 않습니다. 대신 모델이 이 고정된 자기생성 잠재를 \(t_{\text{ctx}} = 0\)에서 다시 부호화하고, 그렇게 나온 K/V 항목이 미래 타깃 토큰의 어텐션 대상이 될 때 미분 가능한 상태로 남습니다.

\[\nabla_\theta \mathcal{L}_{\text{DMD}}(\hat{X}_{\text{tar}}) \supset \frac{\partial \mathcal{L}_{\text{DMD}}}{\partial KV_{\text{ctx}}^{\text{rec}}} \cdot \frac{\partial KV_{\text{ctx}}^{\text{rec}}}{\partial \theta}\]

이제 미래 DMD 손실이 타깃 쪽 디노이징과 클린 컨텍스트 K/V 쓰기를 함께 감독합니다.

그래디언트 경계가 명확하다는 점이 중요합니다. 이건 전체 롤아웃 BPTT가 아닙니다. 기록된 컨텍스트 잠재, 노이즈 샘플, 스케줄러 상태, 패스 1의 직렬 캐시 궤적은 전부 stop-gradient입니다. 그래디언트는 오직 패스 2 재구성 안, 즉 클린 컨텍스트 순전파와 K/V 투영과 future-to-context 어텐션과 타깃 쪽 디노이징 계산으로만 흐릅니다. 덕분에 학습 그래프가 고정 창을 유지합니다.

결정론적 층과 일치하는 위치 인덱스와 동일한 인과 재구성 기하를 쓰면 \(\hat{X}_{\text{tar}}\)는 이론적으로 기록된 \(\tilde{X}_{\text{ctx}}\)와 같아야 합니다. 실제로는 부동소수점과 구현 수준 효과 때문에 작은 편차가 생기고, 저자들은 부록 D에서 이 복원 충실도를 실증합니다.

결과

학습 창은 전부 5초로 동일합니다. 따라서 60초와 240초 결과는 순수한 외삽 시험입니다. 5초 평가는 짧은 구간 위생 검사로만 쓰였고, 여기서 SGF와 Self Forcing은 대체로 비슷합니다.

프레임 단위 생성 결과입니다. 초기화 방식별로 짝지어 읽어야 합니다.

지표 (240s)

ODE init SF

ODE init SGF

CD init SF

CD init SGF

TF init SF

TF init SGF

Aesthetics

0.510

0.543

0.533

0.584

0.614

0.619

Background

0.943

0.966

0.964

0.971

0.965

0.968

Imaging

0.648

0.698

0.632

0.690

0.701

0.718

Motion

0.971

0.985

0.981

0.986

0.980

0.982

Subject

0.936

0.969

0.967

0.976

0.965

0.972

Flickering

0.937

0.972

0.971

0.977

0.967

0.968

Dynamics

0.840

0.556

0.599

0.385

0.669

0.648

60초 설정은 VBench-Long 프롬프트를, 240초 설정은 MovieGen에서 무작위로 뽑은 128개 프롬프트를 씁니다.

여섯 개 지표에서 SGF가 모든 초기화 조건에 걸쳐 앞섭니다. 특히 피사체 일관성과 깜빡임에서 격차가 큰데, 이건 SGF가 겨냥한 실패 양상과 정확히 일치합니다.

Dynamics만 예외로, Self Forcing이 높습니다. 저자들은 이걸 더 좋은 움직임의 증거로 보지 말라고 명시합니다. 부록 G에 따르면 긴 Self Forcing 롤아웃에는 장면 점프, 깨진 카메라 기하, 물체 변형이 자주 나타나는데, 이것들이 크지만 앞뒤가 안 맞는 겉보기 움직임을 만들어 dynamic degree를 부풀립니다. 이 논문에서 가장 정직한 대목이라고 볼 만합니다. 자기 방법이 지는 지표 하나를 숨기지 않고 왜 그 지표가 이 상황에서 오해를 부르는지 설명했습니다.

자동 지표만으로는 사람이 느끼는 장문 일관성을 담기 어려우므로 블라인드 GSB 선호 조사를 병행했습니다. 10개 매칭 비교에서 1,900건 넘는 짝 판정을 모았고, \(\text{GSB} = (G-B)/(G+S+B) \times 100\%\)로 계산했습니다.

설정

Horizon

Causal ODE init

Causal CD init

TF init

프레임 단위

60s

29.6%

36.8%

45.1%

프레임 단위

240s

38.6%

35.9%

48.7%

청크 단위

60s

-

32.9%

37.5%

청크 단위

240s

-

34.3%

44.9%

전부 양수이므로 모든 조건에서 사람이 SGF를 선호했습니다. 240초에서 TF 초기화일 때 48.7%로 가장 크게 벌어지는데, 시간이 길수록 격차가 커지는 방향이라 메모리 쓰기 오류가 누적된다는 가설과 맞습니다.

학습 비용도 확인했습니다.

학습 방식

최대 메모리

안정 메모리

5스텝 시간

결과

Self Forcing (얼린 KV 캐시)

79.01GB

79.01GB

10.39s

학습됨

SGF (직렬 패스 1 + 병렬 패스 2)

87.01GB

63.73GB

11.71s

학습됨

Self Forcing (미분 가능 KV 캐시)

OOM

OOM

-

OOM

미분 가능 캐시를 그대로 켜면 학습이 아예 안 됩니다. 각 캐시 항목이 자신을 만든 직렬 캐시 형성 그래프를 붙들고 있기 때문입니다. SGF는 최대 메모리가 79.01GB에서 87.01GB로 오르지만 안정 메모리는 오히려 79.01GB에서 63.73GB로 내려갑니다. 시간은 5스텝당 10.39초에서 11.71초로 약 13% 늘어납니다.

시간 증가가 이 정도에 그치는 이유가 구체적입니다. 종료 스텝 \(n\)에 대해 Self Forcing은 무-그래디언트 순전파 \(n-1\)회와 종료 스텝에서의 그래디언트 순전파·역전파 1회를 수행하고, SGF는 패스 1에서 무-그래디언트 순전파 \(n\)회와 패스 2에서 그래디언트 순전파·역전파 1회를 수행합니다. 게다가 가짜 점수와 생성기 갱신이 5대 1 스케줄이라, 추가된 패스 2 작업은 5스텝 주기 안의 생성기 갱신 한 번에만 영향을 줍니다.

회고

이 논문이 스스로 그은 경계가 명확합니다. SGF는 뽑힌 롤아웃 궤적 자체를 최적화하지 않습니다. 컨텍스트 잠재는 여전히 stop-gradient이고, 개선되는 것은 그 고정된 잠재를 어떤 K/V로 부호화할지뿐입니다. 즉 "더 좋은 과거를 만들어라"가 아니라 "이미 만든 과거를 더 잘 적어 두어라"입니다. 문제를 좁혔기 때문에 유계 재구성으로 풀 수 있었다고 보는 편이 정확합니다.

패스 2 재구성이 패스 1 계산을 정확히 복원한다는 것도 이론적 등가일 뿐 실제로는 부동소수점 편차가 남습니다. 저자들이 부록에서 검증했다고 밝혔지만, 이 편차가 긴 학습에서 누적되는지에 대한 분석은 본문에 없습니다.

컨텍스트 정책은 통제 변수로 고정했습니다. Self Forcing과 SGF 모두 같은 sink-plus-FIFO 정책을 쓰고, Wan 영상 VAE에서는 비대칭 그룹화 패턴이 유도하는 시간 경계 접두를 보존하려고 sink 잠재 4개를 씁니다. 컨텍스트 선택이 아니라 SGF 자체의 효과를 분리하려는 설계인데, 뒤집어 말하면 더 좋은 컨텍스트 정책과 결합했을 때 어떻게 되는지는 이 논문의 범위 밖입니다.

저자들도 향후 과제로 더 강한 초기화, 장문 컨텍스트 튜닝, 검색, 캐시 압축과의 결합을 들었습니다. SGF가 기존 forcing 개선들과 직교해서 그 위에 바로 얹을 수 있다는 점을 스스로 강조하는데, 이는 곧 단독으로는 장문 영상 문제를 다 풀지 못한다는 이야기이기도 합니다.

정리

첫째, 자기회귀 영상 생성의 장문 붕괴는 모델이 과거를 잘못 읽어서가 아니라 과거를 어떻게 적을지 배운 적이 없어서 생깁니다. 읽기에는 감독이 있었고 쓰기에는 없었습니다.

둘째, 그 감독을 되살리는 데 전체 롤아웃 역전파가 필요하지는 않습니다. 무-그래디언트 롤아웃과 유계 병렬 재구성으로 나누면 그래프가 고정 창에 머물러, 메모리 13% 안쪽에 시간 13% 정도로 끝납니다.

셋째, 5초 창으로 학습해 240초를 뽑는 실험에서 dynamic degree만 떨어지는데, 이건 성능 저하가 아니라 지표의 한계입니다. 장면이 튀고 물체가 뭉개지는 영상이 움직임 점수를 더 받는 구조라면, 그 지표로 장문 영상을 평가하는 관행 자체를 다시 볼 필요가 있습니다.