LANGUAGE MODEL BEATS DIFFUSION — TOKENIZER IS KEY TO VISUAL GENERATION
MAGVIT2 논문 리뷰
Aug 01, 2024
읽은 이유
MAGVIT2 : videopoet에서 중요하게 사용된 video tokenizer. 제목처럼 토크나이저의 성능이 특히 visual generation에서 중요하다.
요약
Lookup-free Quantization이라는 방법을 사용해서 vocab size를 늘리면서 각 code의 dimension을 극도로 낮추는 방법이 가장 주요해보인다. 그런데 LFQ를 적용하는 방법 중에서도 여기선 binary 표현을 사용했지만 탐색될 수 있는 여지가 많다. RVQ는 원래 sound 이외의 영역에서는 별로인걸까 그냥 안쓰는걸까? 단순 생성 측면이 아니라 압축, action recognition 등에서도 이 discrete representation이 더 좋은 성능을 보였다.
Abstract
LLM의 성능이 정말 좋은데 visual generation에서는 diffusion보다 못하다. 중요한건 pixel-space를 discrete token으로 매핑하는 visual tokenizer의 성능이다. 본 연구에서는 MAGVIT-v2, video tokenizer, 정교하고 다양한 생성을 위한, 을 소개한다. 이걸로 ImageNet 등에서 지표로 diffusion을 이김. top-performing video tokenizer를 이긴다 - 비디오 압축 지표, action recognition을 위한 rep 학습 등에서
LM이 visual gen 측면에서 diffusion보다 안좋은 이유가 좋은 visual representation이 없기 때문이라고 생각한다. 그걸 위해 좋은 토크나이저를 개발해서 처음으로 LM으로 diffusion을 이겼다.
하지만 강조하고 싶은것! LM이 다른 모델들보다 좋다고 주장하는게 아니라 LLM을 위한 visual tokenization이 더 탐구될 가치가 있다는 것 뿐이다.
장점 1) LLM과의 협업 : LLM을 썼을 때의 다양한 최적화 방법들을 그대로 활용할 수 있다.. (videopoet이랑 거의 똑같은 문장을 쓰길래 봤더니 저자가 많이 겹친다.)
장점 2) Compressed representation
visual token은 새로운 비디오 압축 방법으로도 제시될 수 있다. token은 원래 pixel에 비하면 훨씬 낮음.
장점 3) visual understanding benefits
이전의 연구들이 discrete token은 SS representation Learning에서 좋은 사전학습 타겟이라고 증명해왔다. 토큰을 쓰는 것 자체가 로버스트함과 generalization도 좋게 만든다?
본 연구는 VQ-VAE 방법을 쓰는 MAGVIT 위에 추가되는 방법들을 제시하는데, 1) novel lookup free quatization 방법 2) 많은 분석을 통해 토크나이저를 개선했더니 생성 성능 뿐만 아니라 이미지와 비디오가 공유되는 vocab을 가지는걸 가능하게 한다는 사실을 알아냈다.
비디오 V는
Discrete representation X로 압축된다. K는 코드북 사이즈
일반적으로는 visual tokenizer를 위해 VQ-GAN(= VQ-VAE에 adversarial loss와 feature-level perceptual loss가 추가된 형태)를 많이 사용.
LOOKUP-FREE QUANTIZER
VQ-VAE가 발전하면서 reconstruction quality가 좋아졌는데 이게 이 토큰을 이용한 generation quality와는 얼마나 연관이 있을까? ex. vocab size를 늘리면 리컨 성능은 좋아지는데 생성 성능이 무조건 좋아지지는 않는다.
vocab size가 2의 14승보다 커짐에 따라 생성 성능은 오히려 안좋아진다(FID 기준). 이게 왜 대부분의 visual AR gen에서 NLP의 vocab size 200,000보다 작은 약 8000 정도 값을 사용하는지에 대한 이유이다.
보통 vocab size를 늘리면서 각 code embedding의 차원을 줄인다(개수를 늘리고 개별 표현 범위를 제한). 그러면 vocab이 커도 분포를 학습하기 용이하다.
Lookup-free Quantization
위의 연구들에 기반해서 우리는 VQ-VAE의 코드북의 차원을 0으로 줄였다(?!) 원래 전체 코드북이 였다고 하면 코드북 C가 그냥 index 값만이 되는 것. 원래는 d의 차원은 256. 차원을 0으로 만들어서 스칼라 값으로 만들어버리면 look-up이 필요하지 않다. 당연히..
이렇게 하니 vocab size는 키우면서, 생성 퀄리티도 좋아졌다(위의 fig1에서 파란색)
→ 그럼 encoder의 output embedding을 index에 매핑하는건 어떻게 하는거지?
다양한 LFQ 방법을 사용할 수 있지만 본 논문에서는 독립적인 코드북 차원과 binary latent를 가정하는 간단한 변형에 대해 설명한다.
주의 : Lookup free quatization을 할 수 있는 방법은 많다. LFG를 처음 제시하는 연구로써 가장 간단한 방법을 적용했는데도 성능이 좋다는걸 보이는데 의의를 둬서 독립 이진 차원을 사용했을 뿐이다. 이렇게 해야만 좋다는 식의 유니크한 접근은 아님!
LFQ의 latent space는 1차원 변수들의 곱집합 cartesian procudt로 분해된다.
그럼 K가 8일 때는?
각 차원 Ci는 binary 값, -1 or 1을 가지기 때문에 곱집합으로 표현하면 C는
- (−1,−1,−1)
- (−1, −1, 1)
- (−1,1,−1)
- (−1,1,1)
- (1,−1,−1)
- (1,−1,1)
- (1,1,−1)
- (1,1,1)
를 가지는 집합이 된다. C는 이 3차원 벡터 8개로 구성된다.
feature vector 를 받아서, quantized representation q(z) (= decoder의 input으로 들어가는 그 값)의 각 차원은 다음과 같이 얻는다.
zi과 가장 가까운 Ci의 k-th 값을 사용한다. 위의 예시를 참고하면 은 -1, 은 1이 됨.
Ci가 -1 or 1 이기 때문에, argmin은 사인 함수를 사용해서 계산할 수 있다.
zi가 음수면 -1, 양수면 1으로, 이진 양자화 하게된다.
따라서 LFQ에서, q(z)의 token index(= discrete 값)는 아래 식으로 얻는다.
쉽게 이해하기
만약 K가 8이라고 하자. 그럼 encoder의 output 값은 =3 차원의 벡터 z가 된다. 이때 z = [-1.4, 8.7, -4.2]라고 가정.
그럼 위 식에 따라 q(z)는 [-1, 1, -1]이 된다.
그럼 z의 index, 최종적으로 필요한 discrete 값은 (0 + 2 + 0)이 되어서 2가 된다.
이진값으로 표현하여 값을 뽑는걸 수식으로 표현하려다 보니 그냥 복잡해보이게 되었지만 실제로는 단순한 이진화의 과정
3.2 VISUAL TOKENIZER MODEL IMPROVEMENT
image와 codebook이 공통된 vocab을 가지도록 하면 좋다(같은 지식을 공유하니까). 근데 MAGVIT는 왜 못한거지?
Causal transformer는 이전 값만 참고하여 현재의 patch embedding을 계산하는 모듈(for autoregressive modeling). so that the output for each frame only depends on the previous frames.
C-ViVit의 방법은 1) positional embedding이 필요한데 그럼 학습과정에 없는 position(256*256으로 학습했는데 256*512를 다뤄야하는 경우라던가?)을 잘 처리하지 못하고, 2) 실험해봤을 때 3D CNN이 좋아서(spatial causality, 패치의 위치에 따른 값 계산) 이걸 쓰고 싶었다.
따라서 이전 kt-1개의 프레임만 사용하여 값을 출력하는 3D CNN을 사용한다. → 비디오의 첫번째 프레임은 아무것도 참고하지 않고 출력되는 값이 되어, 이미지도 동일한 방법으로 처리할 수 있게 한다.
이외에도 아키텍처를 MAGVIT에서 좀 수정했는데 이건 생략
Token factorization for efficient prediction
이렇게 얻은 token은 비디오 생성을 위해 LM에 사용되는데, 작은 transformer로도 이 큰 vocab을 사용할 수 있게 하고 싶었다 → LFQ 토큰의 latent space를 동일한 subspace로 분리한다. 예를 들어 2의 18승의 코드북을 사용하는 대신 각 크기가 인 두개의 코드북을 연결해서 쓸 수 있다. 각각을 별도로 임베딩하고 임베딩 합을 LM transformer의 입력을 위한 토큰 임베딩으로 사용한다.
→ 되게 중요한 구현 같은데 자세한 설명이 너무 없다. 코드를 볼 필요가 있을 듯
성능 뿐 아니라 모델의 크기도 작은걸 알 수 있다. LM 모델의 크기만 이겠지?
생성 뿐 아니라 compression, video recognition 성능도 좋다고 함.
Share article
Subscribe to our newsletter