Visual Autoregressive Modeling (VAR) — 다음 스케일 예측

확산 모델(diffusion models)은 시간 축에서 반복적으로 샘플링합니다. 즉, 노이즈 제거 단계(denoising steps)를 거칩니다. VAR(Visual Autoregressive Modeling)은 스케일(scale) 축에서 반복적으로 샘플링합니다. 먼저 1x1 토큰(token)을 예측하고, 그다음 2x2, 4x4를 거쳐 최종 해상도까지 올라갑니다. 각 스케일은 이전 스케일을 조건으로 사용합니다. 2024년 논문은 VAR이 이미지 생성에서도 GPT 방식 스케일링 법칙(GPT-style scaling laws)을 따르고, 같은 계산 예산에서 DiT를 이긴다는 것을 보였습니다. 이 lesson에서는 그 핵심 메커니즘을 만듭니다.

유형: Build 언어: Python (PyTorch 사용) 선수 지식: Phase 7 Lesson 03 (Multi-Head Attention), Phase 8 Lesson 06 (DDPM) 예상 시간: 약 90분

문제

자기회귀 생성(autoregressive generation)은 언어 모델링을 지배했습니다. 예측 가능하게 스케일링되기 때문입니다. 계산량(compute)과 파라미터를 늘리면 퍼플렉서티(perplexity)가 낮아지고 출력이 좋아집니다. 2024년 이전 이미지 생성의 주요 자기회귀(AR) 시도는 두 가지였습니다. PixelRNN/PixelCNN은 픽셀 단위(pixel-by-pixel)로 생성했고, DALL-E 1 / Parti / MuseGAN은 VQ-VAE 코드를 토큰 단위(token-by-token)로 생성했습니다.

두 방식 모두 생성 순서 문제(generation-order problem)를 겪었습니다. 픽셀과 토큰은 2D 격자에 놓여 있지만, AR 모델은 이를 1D 래스터 순서(1D raster order)로 방문해야 합니다. 초반 모서리 픽셀은 이미지가 최종적으로 무엇이 될지 알지 못합니다. 생성 품질은 텍스트에서의 GPT보다 나쁘게 스케일링되었고, 계산량을 맞춰도 확산 모델 품질에 도달하지 못했습니다.

VAR은 무엇을 생성할지를 바꿔 생성 순서 문제를 해결합니다. 공간에서 이미지 토큰을 하나씩 예측하는 대신, 해상도가 점점 커지는 전체 이미지를 예측합니다. Step 1에서는 전체 이미지의 "요약"에 가까운 1x1 토큰을 예측합니다. Step 2에서는 더 거친 특징(coarser features)을 담은 2x2 토큰 격자를 예측합니다. Step 3에서는 4x4 격자를 예측합니다. Step K에서는 최종 (H/8)x(W/8) 격자를 예측합니다.

각 스케일은 이전 모든 스케일을 참조(attend)합니다. 스케일 순서에서는 인과적(causal)이고, 자기 스케일 안에서는 병렬(parallel)입니다. 생성 순서 문제는 사라집니다. 스케일 k의 전체 이미지는 하나의 트랜스포머 순전파(transformer pass)에서 만들어집니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.이전의 자기회귀 이미지 모델(PixelCNN, DALL-E 1)은 래스터 순서(raster order)로 토큰을 하나씩 예측했습니다. 이것이 만든 근본적인 문제는 무엇인가요?

2.VAR은 '다음 토큰(next token)' 대신 '다음 스케일(next scale)'을 예측합니다. 이 맥락에서 스케일이란 무엇인가요?

0/2 답변 완료

개념

VQ-VAE 다중 스케일 토크나이저(Multi-Scale Tokenizer)

VAR에는 다중 스케일 이산 토크나이저(multi-scale discrete tokenizer)가 필요합니다. 이미지 x에 대해 점진적으로 더 높은 해상도의 토큰 격자 시퀀스를 만듭니다.

x -> encoder -> latent f
f -> tokenize at 1x1: token grid z_1 of shape (1, 1)
f -> tokenize at 2x2: token grid z_2 of shape (2, 2)
...
f -> tokenize at (H/p)x(W/p): token grid z_K of shape (H/p, W/p)

z_k는 같은 코드북(codebook)을 사용합니다. 일반적인 코드북 크기는 4096-16384입니다. 각 스케일의 토큰화(tokenization)는 독립적이지 않습니다. 각 스케일의 잔차(residual)를 합산했을 때 잠재 표현 f를 재구성하도록 학습됩니다.

f ≈ upsample(embed(z_1), target_size) + ... + upsample(embed(z_K), target_size)

이것은 잔차 VQ(residual VQ) 변형입니다. 스케일 k는 스케일 1..k-1이 놓친 것을 포착합니다. 디코더(decoder)는 모든 스케일 임베딩의 합을 받아 이미지를 만듭니다.

다중 스케일 VQ 토크나이저는 VQGAN처럼 한 번 학습한 뒤 고정(frozen)합니다. 모든 생성 작업은 그 위의 자기회귀 모델이 수행합니다.

다음 스케일 예측(Next-Scale Prediction)

생성 모델은 이전 모든 스케일의 토큰을 보고 다음 스케일의 토큰을 예측하는 트랜스포머(transformer)입니다.

입력 시퀀스 구조는 다음과 같습니다.

[START, z_1 tokens, z_2 tokens, z_3 tokens, ..., z_K tokens]

위치 임베딩(position embeddings)은 스케일 인덱스(scale index)와 해당 스케일 안의 공간 위치를 모두 인코딩합니다. 어텐션은 스케일 순서에서 인과적입니다. 스케일 k의 위치 (i, j)에 있는 토큰은 스케일 1..k의 모든 토큰과, 스케일 k 안에서 사용하는 내부 순서(intra-scale order)상 더 앞에 오는 토큰을 볼 수 있습니다. VAR은 고정 위치 어텐션(fixed positional attention)을 사용하고 스케일 내부 인과성(intra-scale causality)을 두지 않습니다. 즉, 한 스케일 안의 모든 위치는 병렬로 예측됩니다.

학습 손실(training loss)은 각 스케일 k에서 이전 스케일 토큰이 주어졌을 때 토큰 z_k를 예측하는 것입니다. 이산 VQ 코드에 대한 교차 엔트로피 손실(cross-entropy loss)을 사용합니다. 구조는 GPT와 같지만, 이제 "시퀀스"가 스케일 구조(scale-structured)를 갖습니다.

생성(Generation)

추론(inference)에서는 다음처럼 진행합니다.

generate z_1 = sample from p(z_1)                    # 1 token
generate z_2 = sample from p(z_2 | z_1)              # 4 tokens in parallel
generate z_3 = sample from p(z_3 | z_1, z_2)         # 16 tokens in parallel
...
decode: f = sum of embed-and-upsample scales 1..K
image = VAE_decoder(f)

K = 10개 스케일이면 생성은 트랜스포머 순전파 10번입니다. 각 패스는 해당 스케일 전체를 병렬로 생성합니다. 스케일 내부의 토큰별 자기회귀(per-token autoregression)는 없습니다. 256x256 이미지에서는 DiT의 28-50 패스와 비교해 대략 10 패스입니다.

왜 다음 토큰보다 다음 스케일이 유리한가

구조적으로 세 가지 장점이 있습니다.

  1. 거친 것에서 세밀한 것으로(coarse-to-fine) 가는 방식은 자연 이미지 통계(natural image statistics)와 맞습니다. 사람의 시각 지각과 이미지 데이터셋은 모두 스케일 의존 규칙성(scale-dependent regularities)을 보입니다. 저주파 구조(low-frequency structure)는 안정적이고 예측 가능하며, 고주파 세부사항(high-frequency detail)은 저주파 내용에 조건화됩니다. 다음 스케일 예측은 이를 활용합니다.
  2. 스케일 내부 생성이 병렬입니다. GPT 방식 토큰 자기회귀(GPT-style token AR)와 달리 VAR은 한 스케일의 모든 토큰을 한 단계에서 만듭니다. 유효 생성 길이는 선형이 아니라 로그 스케일(log-scale)입니다.
  3. 생성 순서 편향(generation order bias)이 없습니다. 스케일 k의 토큰은 스케일 k-1 전체를 볼 수 있습니다. 초반 토큰이 후반 문맥을 보기 전에 결정을 강요받는 "왼쪽(left-of)" 또는 "위쪽(above)" 편향이 없습니다.

스케일링 법칙(Scaling Law)

Tian et al.은 VAR이 ImageNet의 FID에 대해 멱법칙 스케일링 곡선(power-law scaling curve)을 따른다는 것을 보였습니다. GPT가 퍼플렉서티에 대해 보이는 것과 같습니다. 파라미터나 계산량을 두 배로 늘리면 오류가 신뢰성 있게 줄어듭니다. 이는 언어 모델만큼 깔끔하게 이런 스케일링 동작을 보인 첫 이미지 생성 모델이었습니다. 결과적으로 VAR의 스케일 예측은 아키텍처별 경험적 추측(empirical guesses per architecture)이 아니라 계산량으로 예측할 수 있게 됩니다.

Diffusion과의 관계

VAR과 확산은 같은 데이터 압축(data-compression) 이야기를 공유합니다. 둘 다 생성 문제를 더 쉬운 하위 문제(subproblems)의 시퀀스로 나눕니다.

  • 확산(Diffusion): 노이즈를 점진적으로 더하고, 한 단계를 되돌리는 법을 학습합니다.
  • VAR: 해상도를 점진적으로 더하고, 다음 스케일을 예측하는 법을 학습합니다.

두 방식은 문제를 통과하는 서로 다른 축(axis)입니다. 둘 다 다루기 쉬운 조건부분포(tractable conditional distributions)를 만듭니다. 경험적으로 VAR은 추론이 더 빠릅니다. 패스 수가 적고, 한 스케일 내부가 모두 병렬이기 때문입니다. 또한 클래스 조건 ImageNet(class-conditional ImageNet)에서 DiT와 맞먹거나 이깁니다. 텍스트 조건 VAR(text-conditional VAR)인 VARclip, HART는 활발한 연구 방향입니다.

직접 만들기

code/main.py에서 다음을 구현합니다.

  1. 합성 "이미지" 데이터인 2D 가우시안 링(2D Gaussian rings)에 대해 작은 다중 스케일 VQ 토크나이저를 만듭니다.
  2. VAR 방식 트랜스포머를 학습해 다음 스케일 토큰을 예측합니다.
  3. 트랜스포머를 4번 호출해 4개 스케일을 샘플링하고 디코딩합니다.
  4. 스케일 순서 학습(scale-ordered training)이 한 스케일 안의 병렬 생성(parallel within a scale)을 가능하게 하는지 확인합니다.

이 구현은 장난감 구현(toy implementation)입니다. 핵심은 스케일 구조 어텐션 마스크(scale-structured attention mask)와 스케일 내부 병렬 생성이 실제로 동작하는 모습을 보는 것입니다.

산출물 만들기

이 lesson은 outputs/skill-var-tokenizer-designer.md를 산출합니다. 이 스킬(skill)은 다중 스케일 토크나이저를 설계하기 위한 것입니다. 스케일 수, 스케일 비율, 코드북 크기, 잔차 공유(residual sharing), 디코더 아키텍처를 정합니다.

연습문제

  1. 스케일 수 절제 실험(Scale count ablation). VAR을 4, 6, 8, 10개 스케일로 학습합니다. 자기회귀 패스 수 대비 재구성 품질을 측정합니다. 스케일이 많을수록 잔차가 더 세밀해져 품질은 좋아지지만 패스 수가 늘어납니다.
  2. 코드북 크기(Codebook size). 코드북 크기 512, 4096, 16384로 토크나이저를 학습합니다. 더 큰 코드북은 재구성을 좋게 만들지만 예측을 더 어렵게 만듭니다. 무릎점(knee)을 찾습니다.
  3. 스케일 내부 병렬성 확인(Parallel-within-scale check). 학습된 VAR에 대해 어텐션 패턴을 명시적으로 측정합니다. 스케일 k 안에서 모델이 교차 스케일 위치에는 어텐션하지만 스케일 내부 인과성은 사용하지 않는지 확인합니다. 마스크 구현을 검증합니다.
  4. VAR vs DiT 스케일링(VAR vs DiT scaling). 같은 ImageNet 클래스 조건 작업에서 VAR과 DiT를 같은 파라미터 예산(matched param budgets), 예를 들어 33M, 130M, 458M으로 학습합니다. FID 대 계산량을 그립니다. 각 크기에서 VAR이 DiT를 앞서야 합니다. 논문 결과를 작은 규모에서 재현합니다.
  5. 텍스트 조건화(Text conditioning). CLIP 풀링 텍스트 임베딩(CLIP pooled text embedding)을 adaLN을 통해 추가 조건 입력으로 넣도록 VAR을 확장합니다. 이것이 HART 레시피(recipe)입니다. 텍스트 정렬 샘플링(text-aligned sampling)에서 FID가 얼마나 개선되는지 확인합니다.

핵심 용어

용어흔한 설명실제 의미
VAR"Visual AutoRegressive"VQ 토큰 격자 피라미드(pyramid of VQ token grids)에서 다음 스케일 예측(next-scale prediction)으로 이미지를 생성한다.
다음 스케일 예측(Next-scale prediction)"거친 것을 예측한 뒤 세밀하게 만든다(Predict coarser, then finer)"모델이 이전 모든 스케일에 조건화(conditioning)해 증가하는 해상도 스케일(resolution scales)의 토큰을 예측한다.
다중 스케일 VQ 토크나이저(Multi-scale VQ tokenizer)"잔차 VQ(Residual VQ)"증가하는 해상도의 K개 토큰 격자를 만들고, 디코더가 모든 스케일을 합산해 이미지를 재구성하는 VQ-VAE다.
스케일 k(Scale k)"피라미드 레벨 k(Pyramid level k)"k=1의 1x1부터 k=K의 (H/p)x(W/p)까지 이어지는 K개 해상도 레벨(resolution levels) 중 하나다.
스케일 내부 병렬성(Parallel-within-scale)"스케일당 한 번의 순전파(One forward per scale)"스케일 k의 모든 토큰을 자기회귀 방식이 아니라 하나의 트랜스포머 패스에서 예측한다.
스케일 간 인과성(Causal-across-scales)"스케일 순서 어텐션(Scale-ordered attention)"스케일 k의 토큰은 스케일 1..k 전체에는 어텐션할 수 있지만 k+1..K에는 어텐션할 수 없다.
잔차 VQ(Residual VQ)"가산 토큰화(Additive tokenization)"각 스케일의 토큰이 낮은 스케일이 남긴 잔차(residual)를 인코딩한다. 디코더는 모든 스케일 임베딩을 합산한다.
VAR 스케일링 법칙(VAR scaling law)"Image GPT scaling"FID가 계산량(compute)에 대해 언어 모델의 퍼플렉서티처럼 예측 가능한 멱법칙(power law)을 따른다.
HART"Hybrid VAR + text"MaskGIT 방식 반복 디코딩(MaskGIT-style iterative decoding)과 VAR의 스케일 구조를 결합한 텍스트 조건 VAR 변형이다.
스케일 위치 임베딩(Scale position embedding)"(scale, row, col) 삼중항(triple)"위치 인코딩(positional encoding)이 스케일 인덱스와 스케일 내부 공간 좌표(spatial coordinates)를 함께 담는다.

더 읽을거리

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.VAR의 다중 스케일 VQ 토크나이저에서 각 스케일은 이전 스케일의 잔차(residual)를 인코딩합니다. 각 스케일이 이미지를 독립적으로 인코딩하는 대신 이 잔차 구조가 중요한 이유는 무엇인가요?

2.VAR은 한 스케일 내의 모든 토큰을 병렬로 생성합니다(스케일당 트랜스포머 순전파 한 번). 토큰을 순차적으로 생성하는 GPT와 달리 이 스케일 내 병렬 생성이 가능한 이유는 무엇인가요?

3.Tian 등은 VAR이 ImageNet FID에 대해 GPT의 퍼플렉서티(perplexity) 스케일링과 유사한 멱법칙 스케일링 곡선(power-law scaling curve)을 따른다는 것을 보였습니다. 이것이 실용적 이미지 생성에서 중요한 이유는 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다