Paper/Generation

Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction

침닦는수건 2025. 3. 26. 19:17
반응형

내 맘대로 Introduction

 

이 논문은 진짜 여러모로 유명하다. diffusion이 생성형 시장을 독식하고 있는 와중에 일각에서 autoregressive transformer로 돌파하려는 시도가 있었다. 근데 눈에 띄는 성과를 거두지 못하고 연산량 문제도 있어서 "굳이?"라는 시선을 받고 말았는데 이 논문을 기점으로 diffusion을 넘어설 수 있지 않을까란 기대가 생겼다. 또 유명한 이유는 1저자의 도덕성 문제로 대서특필된 바 있다. bytedance에 금전적인 피해를 끼치고 다른 실험들을 망치면서까지 실험해서 낸 논문으로 별명이 붙었다.

 

핵심은 image token을 flatten에서 1D로 처리하는 것이 아니라 coarse to fine token으로 만들어서 접근한 것. + autoregressive model 특징에 딱 맞게 이전 정보로 미래 정보를 추정하도록, 즉 과거 정보는 참조 못하도록 제한한 것이다. 아이디어도 깔끔하고, 이해하기 쉬워서 논문의 분량은 짧다. 이걸 실험적으로 증명하기 위한 막대한 GPU/TPU와 데이터, 실험 횟수가 눈에 띈다.

 

이번에 OpenAI에서 새로 낸 생성형 모델도 왠지 AR model 쓴 것 같다. Diffusion 방식을 고수했는데 이렇게 성능이 뛰었을리가...?

 

메모

AR 모델은 쉽게 말하면 GPT 구조인데 이전 정보로 다음 올 내용을 예측하는 구조다. (a)


이를 그대로 이미지에 이식한 것이 (b)인데 token을 가로 줄 방향으로 펼쳐서 그대로 똑같은 방식으로 예측하는 방식

근데 이렇게 하면 문제가 3가지가 두드러진다.

1) 이전 정보로 미래 정보를 예측한다는 컨셉인데 image token을 만드는 과정에서 Conv가 끼기 때문에 어쩔수 없이 전후좌우 (이미지 입장에선 미래 정보)가 섞일 수 밖에 없다. 
-> 컨셉에 안맞는다. bidirectional input에서 시작할 수 밖에 없음

2) 이전 정보로 미래정보를 예측한다는 컨셉을 지키도록 한다 해도 본질적으로 이렇게 이미지를 가로로 펼치는 방식으로 하면 이미지 하단이 미래, 이미지 상단이 이전이 되므로 상단->하단으로 가는 생성밖에 못한다. 
-> 이미지 상단을 inpainting한다고 하면 불가능함 
-> 구조적으로 문제

3) 2D를 1D로 만들면서 attention 량이 엄청 늘어나 버림. 메모리/연산량 소모가 너무 크다.
그래서 제안하는 컨셉이 이미지를 정해진 patch size로 토큰화 하는 것이 아니라

여러 scale patch로 토큰화 한다음, 

작은 토큰이 이전
큰 토큰이 미래 라고 가정하고 

coarse-to-fine autoregressive하게 푼다.

한 마디로 패러다임 쉬프트. (아주 좋은 듯)
들어가기 전 배경지식 중 필요한 것은

구현할 때 image feature (token feature)를 VQGAN 처럼 vocabulary feature를 만들고 시작했다는 점.

이렇게 한 이유는, AR 모델은 이렇게 구성하는 것이 정석이라고 많은 논문들로 증명됐음.

따라서 그 컨셉을 그대로 물려 받기 위해 voca를 구성한 것.
수식으로 적으면

가장 해상도가 낮은 coarse token을 입력으로 그보다 하나 더 해상도가 높아진 fine token을 예측하고, 이 둘이 또 입력으로 들어가서 그 다음. 그다음 해상도를 예측하는 방식이다. 

여기서 K를 높일수록 고해상도로 학습 됨.
---
block wise causal mask는 attention을 가할 때 이전 token은 masked out되고, 미래 token과만 연산되도록 하는 mask임

attention 마스크가 NxN인데 이중 일부가 0으로 되어있다고 생각하면 됨. weight matrix에 곱해버리면 순식간에 모든 attention이 masking됨.

각 해상도의 픽셀은 voca 내 nearest feature로 채워진다. 

모든 해상도에게 voca는 공유된다.
image feature를 맨처음 CNN으로 뽑고 bilinear interpolation으로 해상도를 낮춘다음 nearest voca 찾음.

decoding할때는 bilinear upsampling만 하면 성능이 구림. CNN을 조금 붙여서 upsampling에 복원력을 조금 더 추가
voca는 4096개

GPT2 구조에 VQGAN 사용

반응형