논문명: Flamingo: a Visual Language Model for Few-Shot Learning
저자: Jean-Baptiste Alayrac, Jeff Donahue, Pauline Luc, Antoine Miech, Iain Barr, Yana Hasson, Karel Lenc, Arthur Mensch, Katherine Millican, Malcolm Reynolds, Roman Ring, Eliza Rutherford, Serkan Cabi, Tengda Han, Zhitao Gong, Sina Samangooei, Marianne Monteiro, Jacob Menick, Sebastian Borgeaud, Andy Brock, Aida Nematzadeh, Sahand Sharifzadeh, Mikołaj Bińkowski, Ricardo Barreira, Oriol Vinyals, Andrew Zisserman, Karen Simonyan
게재지: NeurIPS 2022
URL: https://arxiv.org/abs/2204.14198
논문명: OpenFlamingo: An Open-Source Framework for Training Large Autoregressive Vision-Language Models
저자: Anas Awadalla, Irena Gao, Josh Gardner, Jack Hessel, Yusuf Hanafy, Wanrong Zhu, Kalyani Marathe, Yonatan Bitton, Samir Gadre, Shiori Sagawa, Jenia Jitsev, Simon Kornblith, Pang Wei Koh, Gabriel Ilharco, Mitchell Wortsman, Ludwig Schmidt
게재지: arXiv preprint (arXiv:2308.01390), 2023
URL: https://arxiv.org/abs/2308.01390
Flamingo
서론
짧은 지시만으로 새로운 과제를 빠르게 수행하는 능력은 지능의 중요한 특성입니다. 그러나 기존 컴퓨터 비전 모델은 새로운 과제마다 대량의 학습 데이터와 별도의 fine-tuning을 요구하는 경우가 많아 비용이 큽니다. 이미지와 텍스트를 대조 학습으로 정렬하는 기존 비전–언어 모델 역시 자유로운 텍스트를 생성하는 open-ended task에는 적용하기 어렵다는 한계가 있었습니다.
이러한 한계를 해결하기 위해, 소수의 멀티모달 예시만으로 다양한 vision-language task에 빠르게 적응할 수 있는 Flamingo가 제안되었습니다. Flamingo는 이미지 또는 비디오와 텍스트가 교차된 시퀀스를 입력받고, 시각 정보를 조건으로 텍스트를 자기회귀적으로 생성합니다. 특히 새로운 과제마다 모델의 파라미터를 fine-tuning하지 않고, 프롬프트에 몇 개의 예시를 제시하는 few-shot in-context learning만으로 과제를 수행할 수 있습니다.
이때 Flamingo가 해결해야 하는 문제는 단순히 vision encoder와 language model을 연결하는 것만은 아닙니다. 이미 충분히 사전학습되어 있는 language model에 시각 정보를 주입하면서도, 기존 언어 능력을 망가뜨리지 않아야 합니다. Flamingo의 frozen backbone, Perceiver Resampler, GATED XATTN-DENSE가 이 문제를 해결하는 구성 요소들입니다.
Flamingo Architecture
Flamingo는 기본적으로 다음 텍스트 토큰을 예측하는 자기회귀 모델입니다. 일반적인 language model과 마찬가지로 이전 텍스트 토큰을 사용하지만, 여기에 현재 위치까지 제시된 이미지와 비디오도 조건으로 활용합니다.
먼저 큰 구조를 살펴보면, 대조학습으로 사전학습된 vision encoder인 NFNet-F6와 Chinchilla 계열의 사전학습된 language model은 frozen 상태로 유지합니다. 두 모델을 연결하는 Perceiver Resampler와 GATED XATTN-DENSE만 새롭게 학습합니다.
세부적으로 살펴보면, 처음에 이미지와 비디오 입력이 들어오면 Frozen Vision Encoder가 그 픽셀을 시각 특징으로 변환합니다. Frozen Vision Encoder를 통과한 이미지는 2차원 spatial feature grid로 변환됩니다. 비디오는 각 프레임을 독립적으로 인코딩한 뒤 학습 가능한 temporal embedding을 더하여 시공간 정보를 표현합니다. 이후 공간 차원을 펼쳐 variable-length visual feature sequence를 구성합니다.
이미지는 공간 grid의 수만큼, 비디오는 프레임 수와 공간 grid의 곱만큼 시각 특징이 만들어집니다. 이 특징들을 그대로 language model의 cross-attention에 넣으면 visual token 수와 계산량이 크게 증가합니다. Perceiver Resampler는 이 문제를 완화하기 위해 가변 길이의 시각 특징을 이미지 또는 비디오마다 64개의 고정된 visual token으로 변환합니다. 이를 위해 64개의 학습 가능한 latent query를 사용합니다. Query는 latent $Z$이고, Key와 Value는 시각 특징 $X_f$와 latent를 연결한 $[X_f;Z]$입니다.
\[Q=Z, \qquad K=V=[X_f;Z]\]여기서 64개의 토큰은 이미지에서 특정 패치 64개를 선택한 것이 아니라, 전체 시각 입력을 64개의 학습된 표현으로 요약한 결과입니다. 시각 토큰 수를 고정함으로써 이후 vision-language cross-attention의 계산량을 제한할 수 있습니다.
이렇게 출력된 시각 토큰들은 GATED XATTN-DENSE에서 텍스트에 반영됩니다. 이 계층은 frozen language model block 사이에 삽입됩니다. Cross-attention에서 Query는 language model이 만든 텍스트 hidden state $Y$이고, Key와 Value는 64개의 visual token $X$입니다. 이때의 GATED는 학습 가능한 gate parameter를 의미하는데,
\[Y' = Y + \tanh(\alpha_{\mathrm{xattn}})\,\operatorname{CrossAttention}(Y, X)\] \[Y'' = Y' + \tanh(\alpha_{\mathrm{dense}})\,\operatorname{FFW}(Y')\]해당 수식을 살펴보면 $\alpha_{\mathrm{xattn}}$과 $\alpha_{\mathrm{dense}}$를 확인할 수 있습니다. gate parameter들은 학습 시작 시 0으로 초기화됩니다. 새로 추가한 cross-attention과 feed-forward layer는 처음에는 무작위로 초기화되어 있기 때문에, 이 출력을 처음부터 frozen LM의 hidden state에 크게 더하면 기존 표현이 흐트러지고 학습도 불안정해질 수 있습니다. 학습 초기에는 추가 계층의 출력이 residual stream에 영향을 주지 않고, 학습이 진행되면서 시각 정보의 반영 정도가 점차 조정됩니다.
GATED XATTN-DENSE의 삽입 빈도는 모델 크기에 따라 다릅니다. Flamingo-3B는 모든 LM block 앞에 삽입하지만, 더 큰 모델에서는 계산량을 고려하여 Flamingo-9B는 4개 block마다, Flamingo-80B는 7개 block마다 삽입합니다. 자세한 설정 사항은 다음 표와 같습니다.
| Model | Frozen LM | GATED XATTN-DENSE | Trainable parameters | Total parameters |
|---|---|---|---|---|
| Flamingo-3B | Chinchilla 1.4B | Every block | 약 1.4B | 3.2B |
| Flamingo-9B | Chinchilla 7B | Every 4 blocks | 약 1.8B | 9.3B |
| Flamingo-80B | Chinchilla 70B | Every 7 blocks | 약 10.2B | 80B |
여러 이미지가 포함된 입력에서는 Per-image Attention Masking을 통해 각 텍스트 토큰이 직접 참고할 수 있는 visual token을 제한합니다.
각 텍스트 토큰은 자신보다 앞에 등장한 시각 입력 중 가장 최근의 이미지 또는 비디오에만 직접 cross-attention합니다. 예를 들어 첫 번째 이미지 뒤의 텍스트 구간은 첫 번째 이미지에, 두 번째 이미지 뒤의 텍스트 구간은 두 번째 이미지에 직접 attention합니다.
그렇다고 이전 이미지의 정보가 완전히 사라지는 것은 아닙니다. 첫 번째 이미지의 정보가 첫 번째 텍스트 구간의 hidden state에 이미 반영되어 있기 때문에, 이후 텍스트는 language model의 causal self-attention을 통해 해당 정보를 간접적으로 전달받을 수 있습니다.
이 방식은 ablation study를 통해 선택된 방식입니다. 모든 이전 이미지에 직접 cross-attention하는 것보다 가장 최근의 이미지 하나에만 직접 attention하는 방식이 전체 점수에서 7.2% 더 좋았습니다. 또한 학습에서는 한 sequence에 최대 5개의 이미지만 사용했지만, 평가에서는 image/video-text pair를 최대 32개까지 늘려도 성능이 향상되었습니다.
학습 데이터셋
Flamingo는 서로 다른 입력 형식을 가진 네 가지 vision-language dataset을 함께 사용하여 학습합니다. 학습 데이터는 크게 웹페이지에서 수집한 interleaved image-text data, 일반적인 image-text pair, video-text pair로 구분됩니다.
| Dataset | Training format | Scale |
|---|---|---|
| M3W | Interleaved image-text | 43M webpages |
| ALIGN | Image-text pairs | 1.8B pairs |
| LTIP | Image-text pairs | 312M pairs |
| VTP | Video-text pairs | 27M pairs |
특히 여러 이미지와 텍스트가 자연스럽게 교차된 M3W(MultiModal MassiveWeb) 는 Flamingo가 multimodal in-context learning 형식을 학습하는 데 중요한 역할을 합니다. Pair 형태의 데이터도 M3W와 동일한 입력 형식을 갖도록 다음과 같이 변환합니다.
<image> caption <EOC>
이를 통해 서로 다른 형식의 네 데이터셋을 하나의 자기회귀적 language-modeling objective로 학습할 수 있습니다.
학습 과정
Flamingo는 각 데이터셋에 대해 이전 텍스트 토큰과 현재 위치까지 주어진 시각 입력을 조건으로 다음 텍스트 토큰을 예측합니다. 각 token 위치에서 정답 token에 부여한 확률의 negative log-likelihood를 계산하고, 이를 전체 sequence에 대해 합산합니다. 각 데이터셋의 크기와 역할이 다르기 때문에 데이터셋 별로 다른 가중치인 $\lambda_m$도 적용합니다. Flamingo의 전체 학습 목적함수는 다음과 같습니다.
\[\mathcal{L} = \sum_{m=1}^{M} \lambda_m \mathbb{E}_{(x,y)\sim\mathcal{D}_m} \left[ -\sum_{\ell=1}^{L} \log p\left(y_\ell \mid y_{<\ell},x_{\leq\ell}\right) \right]\]여기서 $\mathcal{D}m$은 $m$번째 dataset, $y\ell$은 현재 위치의 정답 text token, $y_{<\ell}$은 이전 text token, $x_{\leq\ell}$은 현재 위치까지 주어진 visual input을 의미합니다. 모델이 정답 token에 높은 확률을 부여하면 loss가 작아지고, 낮은 확률을 부여하면 loss가 커집니다.
| Dataset | Weight $\lambda_m$ |
|---|---|
| M3W | 1.0 |
| ALIGN | 0.2 |
| LTIP | 0.2 |
| VTP | 0.03 |
학습 과정에서 Vision Encoder와 Language Model은 frozen 상태로 유지됩니다. 따라서 실제로 학습되는 부분은 가변 길이의 시각 특징을 64개의 visual token으로 변환하는 Perceiver Resampler와, 시각 정보를 language model에 주입하는 GATED XATTN-DENSE 계층입니다.
평가 방법
Flamingo는 하나의 모델이 다양한 image 및 video task들에 잘 적응할 수 있는지를 확인하고자 captioning, visual question answering, visual dialogue, multiple-choice question answering, multimodal classification을 포함한 총 16개의 benchmark에서 성능을 평가했습니다.
이 중 COCO, OKVQA, VQAv2, MSVDQA, VATEX의 5개 benchmark는 모델 설계와 hyperparameter 결정을 위한 DEV benchmark로 사용했습니다. 나머지 11개 benchmark는 모델 설계 결정에 사용하지 않고 일반적인 성능을 평가하는 용도로 사용했습니다.
| Task type | Benchmarks |
|---|---|
| Image/Video Captioning | COCO, Flickr30K, VATEX, YouCook2 |
| Visual Question Answering | VQAv2, OKVQA, VizWiz, TextVQA, MSVDQA, MSRVTTQA, iVQA |
| Dialogue / Multiple Choice | VisDial, STAR, NextQA |
| Multimodal Classification | HatefulMemes, RareAct |
Few-shot 평가는 여러 개의 support example을 먼저 제시하고, 마지막에 정답이 주어지지 않은 query를 배치하는 방식으로 진행합니다.
[Image/Video + Task input + Answer] × N
↓
[Query image/video + Task input]
↓
Prediction
이 과정에서는 downstream task에 맞추어 모델의 parameter를 업데이트하지 않습니다. 논문은 주요 결과를 0-shot, 4-shot, 32-shot 조건에서 보고합니다. 평가 방법은 task의 출력 형태에 따라 두 가지로 나뉩니다.
-
Open-ended evaluation: 모델이 free-form text를 직접 생성합니다. 기본적으로 beam size 3의 beam search를 사용하고,
<EOC>token이 생성되면 출력을 종료합니다. - Close-ended evaluation: 가능한 candidate answer를 각각 prompt 뒤에 붙여 log-likelihood를 계산하고, 가장 높은 점수를 얻은 answer를 선택합니다.
주요 결과
Flamingo는 이전의 zero-shot 및 few-shot 방법을 16개 benchmark에서 큰 폭으로 넘어섰습니다. 특히 기존 few-shot 결과가 공개되어 있던 9개 benchmark에서는 모두 당시의 few-shot state of the art를 새롭게 달성했습니다.
모델의 크기와 demonstration의 수가 증가할수록 전반적인 성능도 향상되었습니다. Flamingo-3B보다 Flamingo-9B가, Flamingo-9B보다 가장 큰 Flamingo-80B가 더 좋은 few-shot 성능을 보였으며, 큰 모델일수록 32-shot과 같이 많은 demonstration을 더 효과적으로 활용했습니다.
대표적으로 COCO captioning과 VQAv2 결과를 보면 shot 수에 따른 변화를 확인할 수 있습니다.
| Benchmark | Metric | Previous zero/few-shot SOTA | Flamingo-80B 0-shot | 4-shot | 32-shot |
|---|---|---|---|---|---|
| COCO | CIDEr | 32.2 (0-shot) | 84.3 | 103.2 | 113.8 |
| VQAv2 | Accuracy | 38.2 (4-shot) | 56.3 | 63.1 | 67.6 |
흥미로운 결과는, Flamingo-80B가 별도의 downstream parameter update 없이 32개의 task-specific example만 사용하고도 6개 task에서 수천 개 이상의 annotated sample로 fine-tuning된 기존 방법의 성능도 넘어섰다는 것입니다.
논문의 주된 관심은 parameter update가 없는 in-context learning이지만, 저자들은 충분한 annotated data가 주어졌을 때 Flamingo를 직접 fine-tuning하는 실험도 추가로 수행했습니다. Few-shot만으로 기존 fine-tuned SOTA를 넘지 못했던 9개 task를 대상으로 Flamingo-80B를 fine-tuning한 결과, VQAv2, VATEX, VizWiz, MSRVTTQA, HatefulMemes의 5개 task에서 새로운 SOTA를 달성했습니다.
Ablation study는 Flamingo-3B를 5개의 DEV benchmark에서 4-shot으로 평가한 결과입니다. 주요 결과만 정리하면 다음과 같습니다.
| 변경한 설정 | Overall score | Baseline 대비 변화 |
|---|---|---|
| Flamingo-3B baseline | 70.7 | - |
| M3W 제거 | 53.4 | -17.3 |
| Image-text pair 제거 | 60.9 | -9.8 |
| Gradient accumulation → Round robin | 62.9 | -7.8 |
| Tanh gating 제거 | 66.5 | -4.2 |
| Perceiver → MLP Resampler | 66.6 | -4.1 |
| Perceiver → Transformer Resampler | 66.7 | -4.0 |
| Frozen LM → pretrained LM을 함께 학습 | 62.7 | -8.0 |
가장 큰 변화는 interleaved image-text dataset인 M3W를 제거했을 때 나타났습니다. 일반적인 image-text pair를 제거한 경우에도 점수가 감소했고, video-text pair를 제거하면 video task의 성능이 전반적으로 낮아졌습니다. 자연스럽게 교차된 데이터와 대규모 pair data가 서로 다른 역할을 수행한다는 것을 알 수 있었습니다.
또한 0으로 초기화된 tanh gating, dataset별 gradient accumulation, Perceiver Resampler, frozen LM이 각각 성능에 실제로 기여했습니다. 결국 Flamingo의 성능은 모델 크기뿐 아니라, 어떤 학습 데이터를 사용했는지와 시각 정보를 기존 language model에 어떤 방식으로 연결했는지에도 크게 영향을 받았습니다.
결론
Flamingo는 사전학습된 Vision Encoder와 Language Model 사이에 Perceiver Resampler와 GATED XATTN-DENSE를 추가하여, 기존 언어 능력을 크게 바꾸지 않으면서 이미지와 비디오를 바탕으로 텍스트를 생성하는 모델입니다.
가장 중요한 점은 새로운 task마다 모델을 다시 fine-tuning하지 않아도 된다는 것입니다. Prompt 안에 몇 개의 multimodal example을 제시하는 것만으로 여러 task에 적응했고, 기존 few-shot 결과가 공개된 9개 benchmark에서 새로운 SOTA를 달성했습니다.
물론 few-shot demonstration의 구성이나 순서에 따라 성능이 달라질 수 있고, 기존 language model이 가지고 있던 한계도 그대로 남아 있습니다. 하지만 하나의 모델이 여러 vision-language task를 few-shot 방식으로 수행할 수 있다는 가능성을 보여주었다는 점에서 중요한 연구입니다.
이러한 Flamingo의 few-shot 능력을 아키텍처만의 결과로 보기는 어렵습니다. Ablation에서 M3W를 제거했을 때 overall score가 70.7에서 53.4로 가장 크게 감소했습니다. 따라서 여러 이미지와 텍스트가 실제 prompt처럼 교차된 데이터 형식 자체가 few-shot 능력을 만드는 데 중요한 역할을 했다고 볼 수 있습니다.
또한 frozen backbone과 학습 가능한 연결 모듈을 조합한 구조는 하나의 고정된 모델이라기보다 재사용할 수 있는 학습 recipe에 가깝습니다. 이후 OpenFlamingo가 공개된 dataset과 backbone으로 이 구조를 다시 구현했다는 점에서도 Flamingo의 의의를 확인할 수 있습니다.
OpenFlamingo
서론
OpenFlamingo는 앞서 살펴본 Flamingo를 공개 데이터와 공개 백본만으로 재현한 연구입니다. 재현 과정에서 어떤 설계 요인이 in-context learning 성능을 좌우하는지가 드러난다는 점에서, Flamingo 결론에서 언급한 “재사용 가능한 recipe”라는 관점을 실제로 검증한 논문이라고 볼 수 있습니다.
기존 vision-language model의 대표적인 형태는 (image, text) → text 입니다. 즉 하나의 이미지와 텍스트를 입력받아 텍스트를 출력하는 구조이며, BLIP-2가 대표적인 예시입니다. 이 형태는 image classification이나 visual question answering(VQA) 같은 과제를 자연스럽게 지원합니다.
하지만 입력 이미지를 하나로 제한하면 할 수 있는 일이 크게 줄어듭니다. Autoregressive vision-language model은 앞서 본 Flamingo처럼 이미지와 텍스트가 임의로 뒤섞인 시퀀스(interleaved sequence)를 입력으로 받아 텍스트를 생성합니다. 이 인터페이스에서는 입력 시퀀스 안에 새로운 과제의 시연(demonstration)을 넣을 수 있고, 따라서 별도의 fine-tuning 없이 few-shot in-context learning이 가능합니다. Flamingo 외에도 CM3, Kosmos-1, PALM-E, multimodal GPT-4가 이 계열에 속합니다.
문제는 이 모델들이 대부분 폐쇄형(closed-source) 이라는 점입니다. 가중치, 학습 데이터, 코드, 하이퍼파라미터가 모두 비공개이기 때문에, 학계에서는 “웹에서 수집한 image-text 데이터가 모델의 성능과 안전성에 어떤 영향을 주는가” 같은 질문을 검증하기 어렵습니다. LLaVA, LLaMA-Adapter, BLIP-2, mPLUG-Owl 같은 공개 대안들이 있지만, 이들은 단일 이미지만 입력받고 COCO처럼 정제된 데이터셋으로 학습하는 경우가 많습니다.
본 논문은 이 공백을 메우기 위해 Flamingo를 공개 자원만으로 재현한 OpenFlamingo를 제안하고, 그 과정에서 얻은 경험을 기술 보고서 형태로 정리합니다.
구조는 앞서 본 Flamingo의 설계 원칙, 즉 사전학습된 두 모델을 얼리고 그 사이를 잇는 Perceiver resampler와 gated cross-attention 모듈만 학습한다는 원칙을 그대로 따릅니다. 다만 vision encoder는 NFNet-F6 대신 CLIP ViT-L/14를, language model은 Chinchilla 대신 MPT·RedPajama 등 공개 백본을 사용합니다.
입력 처리
OpenFlamingo는 interleaved sequence가 주어졌을 때, 이전의 모든 텍스트 토큰과 직전 이미지를 조건으로 다음 텍스트 토큰을 예측합니다. 이는 앞서 Flamingo에서 살펴본 per-image attention masking과 동일한 방식으로, 직전 이미지에만 직접 cross-attention하되 그 이전 이미지들의 정보는 텍스트 hidden state를 거쳐 간접적으로 전달됩니다. 이미지는 frozen vision encoder를 통과해 패치 특징으로 추출되고, 학습 가능한 Perceiver resampler를 거쳐 언어 모델의 cross-attention에 전달됩니다.
전처리 단계에서는 두 개의 특수 토큰을 삽입합니다.
-
<image>: 텍스트 시퀀스에서 이미지가 위치하는 지점 표시 -
<|endofchunk|>: 한 이미지에 딸린 텍스트 구간의 끝 표시
예를 들어 이미지 $x$와 텍스트 “Hello world”로 이루어진 입력은 다음과 같이 변환됩니다.
<image> Hello world <|endofchunk|>
참고로 Flamingo와 달리 OpenFlamingo는 현재 비디오 입력을 지원하지 않습니다.
모델 종류
논문은 언어 모델 백본과 cross-attention 삽입 간격을 달리한 다섯 개 모델을 공개합니다. Cross-attention interval이 4라는 것은 언어 모델의 4개 층마다 한 번씩 cross-attention 모듈을 넣었다는 의미입니다.
| 모델 | 언어 모델 | Cross-attention interval |
<image>, <\|endofchunk\|> 임베딩 |
|---|---|---|---|
| OpenFlamingo-3B | MPT-1B | 1 | Trainable |
| OpenFlamingo-3B (Instruct) | MPT-1B (Instruct) | 1 | Trainable |
| OpenFlamingo-4B | RedPajama-3B | 2 | Frozen |
| OpenFlamingo-4B (Instruct) | RedPajama-3B (Instruct) | 2 | Frozen |
| OpenFlamingo-9B | MPT-7B | 4 | Trainable |
여기서 (Instruct)는 언어 전용 과제로 instruction tuning된 백본을 사용했다는 뜻이며, vision-language 과제에 대해 instruction tuning을 수행한 것은 아닙니다. 또한 4B 모델만 특수 토큰 임베딩이 무작위 초기화 상태로 고정되어 있는데, 이는 FSDP 사용 시 gradient masking 구현상의 문제 때문이었습니다. 이 선택이 뒤에서 성능 저하의 원인으로 지목됩니다.
학습 데이터셋
Flamingo는 비공개 데이터셋인 ALIGN(image-text pair)과 M3W(interleaved sequence)로 학습되었습니다. OpenFlamingo는 이를 각각 공개 데이터셋으로 대체합니다.
| Flamingo | OpenFlamingo | 형태 |
|---|---|---|
| ALIGN (비공개, 1B+) | LAION-2B (공개, 2B) | image-text pair |
| M3W (비공개, 43M) | Multimodal C4 (공개, 101M) | interleaved sequence |
-
LAION-2B: 영어 서브셋의 일부를 사용하며, 캡션은 32토큰으로 자릅니다. LAION-2B의 모든 쌍은 CLIP ViT-B/32 기준 cosine similarity가 최소 0.28입니다.
-
Multimodal C4 (MMC4): M3W나 OBELISC가 HTML 문서를 직접 파싱해 시퀀스를 만드는 것과 달리, MMC4는 CLIP을 사용해 이미지와 문서 내 문장을 soft alignment합니다. 저자들은 데이터 품질을 위해 이미지와 뒤따르는 텍스트의 cosine similarity가 0.24(CLIP ViT-L/14 기준) 미만이면 해당 이미지를 시퀀스에서 제거하고, 모든 이미지가 제거되면 시퀀스 자체를 버립니다. 또한 다중 이미지 시퀀스 학습을 유도하기 위해 단일 이미지 시퀀스를 확률 0.5로 기각합니다.
여기서 흥미로운 트레이드오프가 나타납니다. 필터링 임계값을 0.32로 올리면 데이터 품질은 좋아지지만, 표본의 약 58%가 이미지 1장짜리 시퀀스가 되고 전체 시퀀스의 88.7%가 폐기됩니다(0.24일 때는 42.7%). 즉 품질을 높이면 시퀀스가 짧아지고, 짧은 시퀀스는 많은 in-context 예시를 다루는 능력을 저해할 수 있습니다.
또한, 4B 모델에 한해 ChatGPT로 생성한 417K개의 합성 시퀀스를 추가로 사용했습니다. ChatGPT에게 텍스트와 이미지 alt-text가 번갈아 나오는 시퀀스를 생성하게 한 뒤, 그 alt-text로 LAION-5B에서 실제 이미지를 검색해 채워 넣는 방식입니다.
각 데이터셋들의 특징은 다음과 같습니다.
| Dataset | 시퀀스당 중앙값 이미지 수 | 시퀀스당 중앙값 토큰 수 |
|---|---|---|
| LAION-2B | 1 | 17 |
| MMC4 | 2 | 256 |
| ChatGPT | 3 | 56 |
이 표가 뒤의 결과 해석에서 중요한 근거가 됩니다. MMC4는 텍스트는 길지만 이미지가 적은 데이터이고, 이는 모델이 많은 수의 in-context 예시를 활용하는 능력을 학습하기에 불리한 조건입니다.
학습 과정
- 데이터셋: interleaved(MMC4) 6,000만 예제 + LAION-2B 1억 2,000만 예제
- 목적함수: next-token prediction, optimizer는 AdamW
- Learning rate: 초반 linear warmup 이후 1e-4로 고정
- Weight decay: dense cross-attention 층에 0.1 적용
- Batch/loss: LAION-2B 배치 크기는 interleaved의 2배, loss 가중치는 MMC4 1, LAION-2B 0.2 (Flamingo 기본값)
- GPU: Stability AI 클러스터의 8노드 64 GPU, 4B 모델은 FSDP, 나머지는 DDP
학습 과정의 초반 이후 MMC4 loss는 매우 느리게 감소합니다. 저자들은 MMC4 시퀀스가 이미지 사이에 긴 문단을 포함하기 때문에, 대부분의 텍스트 토큰이 이미지를 참조하지 않고도 생성 가능하다고 추측합니다. 즉 loss의 상당 부분이 “frozen 언어 모델이 관계없는 문단을 얼마나 잘 맞추는가”에 지배된다는 것입니다. 이는 loss 값이 멀티모달 능력의 좋은 지표가 아닐 수 있다는 점을 시사합니다.
평가 방법
7개 vision-language 데이터셋에서 0, 4, 8, 16, 32-shot 성능을 측정합니다.
| 과제 | 데이터셋 | 지표 |
|---|---|---|
| Captioning | COCO, Flickr-30K | CIDEr |
| VQA | VQAv2, OK-VQA, TextVQA, VizWiz | VQA accuracy (exact match) |
| Rank classification | HatefulMemes | AUC ROC |
각 과제의 few-shot 평가 프롬프트의 형식은 다음과 같습니다.
- Captioning:
<image> Output: [caption] - VQA:
<image> Question: [question] Short answer: [answer] - HatefulMemes:
<image> is an image with: '[text]' written on it. Is it hateful? Answer: [answer]
Flamingo의 프로토콜을 따라 zero-shot 평가에서도 이미지를 제거한 두 개의 텍스트 전용 예시를 프롬프트에 넣고, classification 과제에서는 in-context 예시의 6가지 순열에 대한 logit을 평균하는 prompt ensembling을 적용합니다.
Captioning과 VQA는 beam size 3의 beam search로 생성하며, captioning은 20토큰, VQA는 5토큰, 또는 <|endofchunk|> 생성 시점에서 멈춥니다. HatefulMemes는 “yes”/”no”의 log-likelihood를 비교합니다. In-context 예시는 기본적으로 학습 split에서 균등 무작위로 뽑되, 부록에서는 테스트 예제와 시각적으로 유사한 학습 예제를 in-context 예시로 검색해 사용하는 RICES (Retrieval-based In-Context Example Selection) 를 사용한 결과도 함께 제시합니다. 모든 평가는 3개 seed 평균입니다.
주요 결과
7개 데이터셋 평균 기준으로 OpenFlamingo-3B는 Flamingo-3B의 약 85%, OpenFlamingo-9B는 Flamingo-9B의 약 89% 성능을 달성합니다.
특히 0-shot과 4-shot 구간에서는 일부 데이터셋에서 Flamingo에 근접하거나 이를 넘어섭니다.
| 설정 | Flamingo-9B | OpenFlamingo-9B |
|---|---|---|
| VQAv2 0-shot | 51.8 | 52.7 |
| COCO 0-shot | 79.4 | 79.5 |
| OK-VQA 0-shot | 44.7 | 37.8 |
| TextVQA 0-shot | 31.8 | 24.2 |
반면 OK-VQA와 TextVQA에서는 격차가 뚜렷합니다. 0-shot 기준으로 OK-VQA는 6.9%p, TextVQA는 7.8%p 낮습니다. 저자들도 VQA 성능이 전반적으로 낮은 이유를 명확히 규명하지는 못했으며, 이후 논의 절의 관찰들과 관련이 있을 수 있다고만 언급합니다.
In-context 예시 개수에 따른 경향은 다음과 같이 확인할 수 있습니다.
3B와 9B 모델은 예시 개수가 늘어날수록 성능이 개선되지만, 개선 속도가 Flamingo보다 느립니다. 그 결과 shot 수가 커질수록 Flamingo-9B와의 격차가 오히려 벌어집니다. 저자들은 그 원인으로 앞서 살펴본 사전학습 데이터의 특성, 즉 시퀀스당 이미지 수가 적다는 점을 지목합니다.
4B 모델은 더 특이합니다. 4-shot 또는 8-shot 이후 오히려 성능이 하락하며, 여러 데이터셋에서 더 작은 3B 모델보다도 낮은 성능을 보입니다. 이는 4B 모델의 두 가지 차이점인 RedPajama 백본과 frozen 특수 토큰 임베딩의 영향으로, 이 중 후자를 아래 논의 절에서 자세히 살펴보겠습니다.
Instruction tuning된 백본의 효과도 확인할 수 있습니다. 각 규모마다 base 백본과 instruction tuning된 백본을 각각 학습한 결과, instruction tuned 변형이 평균적으로 더 좋았습니다. 차이는 RedPajama-3B에서 가장 컸습니다. 언어 전용 instruction tuning의 효과가 vision-language 과제로 전이된다는 관찰은 Kosmos-1, BLIP-2 등 선행 연구와도 일치합니다.
Fine-tuned SoTA와 비교하였을 때에는 32-shot RICES 설정에서 OpenFlamingo-9B가 평균 62% 정도의 성능을 보이며, Flamingo-9B의 72%보다도 낮게 나옵니다. 즉, few-shot 방식과 과제별 fine-tuning 사이에는 여전히 상당한 간극이 존재합니다.
RICES 방식 적용 시 각 데이터셋에 대한 성능과 Random 방식과의 차이를 살펴보면 다음과 같습니다.
| Benchmark | Shots | Random | RICES |
|---|---|---|---|
| HatefulMemes | 32 | 53.8 | 73.6 (+19.8) |
| VizWiz | 4 | 27.5 | 41.0 (+13.5) |
| TextVQA | 32 | 23.8 | 31.1 (+7.3) |
| Flickr-30K | 0 | 59.5 | 39.2 (−20.3) |
| Flickr-30K | 4 | 65.8 | 52.2 (−13.6) |
대부분의 설정에서 RICES는 성능을 크게 끌어올리지만, Flickr-30K에서는 오히려 크게 떨어집니다. 저자들의 해석은 검색된 예시가 지나치게 유사할 때 모델이 예시 캡션을 그대로 따라 쓴다는 것입니다. 실제로 논문의 사례에서는 흰 개가 노란 장난감을 물고 있는 테스트 이미지에 대해, 모델이 예시 캡션의 문구를 짜깁기해 “노란 개가 초록색 장난감을 물고 있다”는 잘못된 설명을 생성합니다. In-context learning이 과제 형식을 학습하는 것을 넘어 표면적 복사로 퇴화할 수 있음을 보여주는 사례입니다.
논의
1. Frozen 임베딩의 영향
4B 모델의 이상 현상을 검증하기 위해, 저자들은 OPT-125M 기반의 작은 모델을 2,000만 interleaved 샘플까지 학습시켜 <image>, <|endofchunk|> 임베딩의 학습 여부만 바꿔 비교합니다.
| 0-shot | 4-shot | 8-shot | ||
|---|---|---|---|---|
| COCO | trainable | 46.5 | 58.6 | 61.2 |
| COCO | frozen | 41.9 (−4.6) | 54.5 (−4.1) | 57.4 (−3.8) |
| VQAv2 | trainable | 17.6 | 23.2 | 28.7 |
| VQAv2 | frozen | 5.5 (−12.1) | 8.4 (−14.8) | 18.8 (−9.9) |
무작위 초기화 상태로 고정된 특수 토큰 임베딩은 COCO에서 4.6 CIDEr, VQAv2에서 12.1%p의 성능 하락을 유발했습니다. 시퀀스 구조를 표시하는 몇 개의 토큰 임베딩만으로도 downstream 성능이 크게 달라진다는 점은 구현 세부 사항이 결과에 미치는 영향을 보여줍니다.
2. 언어 모델 백본의 영향
학습을 오래 해도 VQAv2 성능은 크게 오르지 않았습니다. 반면 언어 모델 백본을 바꾸면 큰 차이가 났습니다.
| Language model | VQAv2 val 0-shot | 4-shot |
|---|---|---|
| OPT-125M | 17.6 | 23.2 |
| OPT-1.3B | 32.8 | 27.2 |
| MPT-1B (Instruct) | 41.9 | 43.7 |
| MPT-7B | 47.4 | 49.4 |
OPT-1.3B에서 MPT-1B (Instruct)로 바꾸는 것만으로 0-shot 성능이 약 10%p 상승했습니다. 즉 VQA 성능의 상당 부분은 멀티모달 학습량보다 언어 모델 자체의 품질에 의존한다는 해석이 가능합니다.
3. 공통적인 VQA 실패 유형
| 실패 유형 | 설명 |
|---|---|
| Counting | 개수를 묻는 질문에 취약. VQAv2 검증 기준 숫자 답변 30.5% vs yes/no 70.6% |
| Verbosity | 답이 장황해 exact match 기준에서 오답 처리되거나 잘려나감 |
| Non-central object | 질문이 가리키는 주변 객체 대신 이미지 중심 객체에 대해 답변 |
특히 verbosity 문제는 모델의 실제 이해 능력과 평가 지표의 형식적 요구가 어긋나는 경우로, 성능 수치를 해석할 때 유의해야 할 지점입니다.
결론
본 논문은 새로운 방법론을 제안하기보다, 폐쇄형 멀티모달 모델(Flamingo)을 공개 자원으로 재현하는 과정 전체를 문서화한 기술 보고서입니다. 핵심 내용은 다음 세 가지로 요약할 수 있습니다.
- 공개 자원만으로도 상당 부분 재현 가능하다: CLIP과 오픈소스 언어 모델, LAION-2B와 MMC4만으로 Flamingo 성능의 80~89% 수준에 도달했습니다.
- 격차는 주로 in-context learning 능력에서 나타난다: 0-shot과 4-shot에서는 근접하지만 shot 수가 늘어날수록 격차가 벌어지며, 이는 시퀀스당 이미지가 적은 사전학습 데이터의 특성과 연결됩니다.
- 세부 설계가 결과를 크게 바꾼다: 특수 토큰 임베딩을 고정했는지, 어떤 언어 모델을 백본으로 썼는지, in-context 예시를 어떻게 골랐는지가 모두 성능에 큰 영향을 주었습니다.
이 연구의 의의는 최고 성능 달성이 아니라, 그동안 소수 기관 안에서만 검증 가능했던 학습 과정을 공개 영역으로 끌어냈다는 데 있습니다. 가중치, 코드, 하이퍼파라미터, 평가 스위트를 모두 공개하여 웹 스크래핑 데이터가 모델의 능력과 위험에 미치는 영향을 학계가 직접 검증할 수 있게 만들었고, 4B 모델의 성능 저하나 정체된 MMC4 loss 같은 실패 사례까지 그대로 보고하여 후속 연구에 실질적인 정보를 제공합니다. 실제로 MIMIC-IT로 fine-tuning한 Otter, 시각·언어 instruction 데이터로 학습한 Multimodal-GPT 등이 OpenFlamingo 위에서 개발되었습니다.
특히 MMC4 데이터셋의 필터링 임계값을 둘러싼 트레이드오프는 인상적입니다. 임계값을 높이면 이미지-텍스트 정합성은 좋아지지만 시퀀스가 짧아지고 데이터 대부분이 폐기되어, 많은 예시를 다루는 능력이 손상될 수 있습니다. 데이터 품질과 데이터 구조는 별개의 축이며, 멀티모달 in-context learning에서는 후자가 특히 중요할 수 있다는 점을 시사합니다.
물론 한계도 분명합니다. Flamingo 대비 80~89%라는 성능은 완전한 재현이라고 보기 어렵고, 특히 shot 수가 늘어날수록 격차가 벌어진다는 점에서 in-context learning 능력 자체가 온전히 복제되지는 않았습니다. 저자들은 그 원인을 사전학습 데이터의 이미지 밀도로 추정하지만 이를 직접 통제한 실험으로 검증하지는 않았으며, Flamingo와의 비교 역시 동일한 평가 파이프라인에서 재실행한 결과가 아니라 논문에 보고된 수치를 인용한 것이라는 점도 유의해야 합니다. 또한 모델은 웹 스크래핑 데이터로 학습되었고 safety-focused fine-tuning을 거치지 않아 기반 언어 모델의 위험을 그대로 물려받으며, 비디오 입력을 지원하지 않아 Flamingo의 기능 범위를 완전히 포괄하지는 못합니다. 그럼에도 이러한 한계를 스스로 명시하고 재현 과정 전체를 공개했다는 점이야말로, 이 논문이 커뮤니티에 기여하는 방식 그 자체라고 할 수 있습니다.
맺음말
두 논문을 함께 놓고 보면, Flamingo가 제시한 것은 특정 모델이라기보다 frozen backbone + 학습 가능한 연결 모듈이라는 재사용 가능한 recipe였다는 점이 분명해집니다. OpenFlamingo는 이 recipe가 공개 자원만으로도 상당 부분 작동함을 보였지만, 동시에 recipe만으로는 충분하지 않다는 것도 보여주었습니다. Flamingo의 ablation에서 M3W 제거가 가장 큰 성능 하락을 만들었듯이, OpenFlamingo에서도 시퀀스당 이미지가 적은 사전학습 데이터가 많은 shot을 활용하는 능력의 병목으로 지목되었습니다. 결국 멀티모달 few-shot 능력의 핵심은 아키텍처와 함께, 이미지와 텍스트가 자연스럽게 교차된 데이터의 구조에 있다는 것이 두 논문을 관통하는 일관된 메시지입니다.