[NerulPS 2022] Flamingo: a Visual Language Model for Few-Shot Learning

당분간 LMM 및 여러 VLM를 리뷰해보려고 하는데요, 이번에 리뷰할 논문은 구글 딥마인드에서 발표한 Visual Language Model(VLM)인 Flamingo 라는 논문입니다. 제목에서와 같이 Few-shot으로도 다양한 task를 수행할 수 있는 VLM 모델 입니다.


  • Conference: NeurIPS 2022
  • Affiliation: Google DeepMind
  • Title: Flamingo: a Visual Language Model for Few-Shot Learning [Paper]
  • Project Page: Google Blog
  • Code: Github

Background

결론부터 말하자면, Flamingo는 CLIP과 같은 VLM 모델이지만 텍스트를 생성하는 데에 초점을 맞춘 모델입니다. 다시 말해 입력은 이미지(비디오), 텍스트이고, 출력은 이에 적절한 텍스트를 생성해내죠.

보다 자세하게 이해하기 위해, 논문 초반부에 나와잇는 Flamingo의 몇 가지 예시를 먼저 살펴보겠습니다.

동물 이미지와 그에 대한 설명을 프롬프트로 제공한다음 플라밍고 이미지에 대한 답변을 유도하니 이미지를 잘 분류해내고 나아가 이미지만으로 알기 어려운 내재된 특성까지 답변으로 내놓습니다. 또한 두번째 명화에 대해서도 잘 답변하는 것을 볼 수 있습니다.

OCR도 잘 해내는 것을 확인할 수 있습니다. 표지판 뿐만 아니라 손글씨까지 잘 인식하고 적절한 답변을 내놓습니다.

마지막으로 비디오 중 몇 개의 프레임만 추출해서 여러 장의 이미지를 넣었을 때 이에 대한 상황을 고려하여 적절하게 답변하는 예시들을 확인할 수 있습니다. 가장 왼쪽 Dialogue 중 “이 사진이 왜 놀랍니?” 라는 질문에, teddy bears는 보통 달에서 발견되지 않는다고 답변했는데, 이는 surprising과 teddy bears의 일반적 특징뿐만 아니라 그 의미까지 파악해야 가능한 답변이죠.

Introduction

ChatGPT와 같이 최근 Assistance의 역할을 하는 인공지능에 대한 주목이 집중되고 있습니다. 인간의 보조적인 역할을 하기 위해서는, 특정 태스크가 아닌 인간과 같이 여러 태스크를 잘 수행해야 합니다. 이를 위해서는 모델이 instruction*에 맞는 작업을 빠르게 수행해야 합니다. 그동안은 대량의 데이터를 사용하여 아주 커다란 모델을 사전학습한 뒤, 관심있는 태스크에 대해 파인튜닝 하였습니다. 그러나 이 파인튜닝에도 수많은 레이블 데이터셋이 필요하고, 엄청난 자원이 소모된다는 단점이 있습니다.

*Instruction은 명령어, 지시어라는 뜻으로, 모델은 사용자의 instruction을 이해하고 적절한 답변을 수행해야합니다. Instruction Tuning 에 대한 자세한 내용은 아래 리뷰를 참고해주시기 바랍니다
[NeurIPS 2023] Visual Instruction Tuning @홍주영

CLIP과 같이 텍스트와 이미지를 동시에 다루는 멀티모달 VLM이 등장한 뒤로, 이 모델들은 파인튜닝 없이 새로운 작업에 적응하는 놀라운 성능을 보이긴 하였지만, 텍스트와 이미지 간 유사도만 점수로 제공하는 탓에 제한된 범위의 작업(예: 분류)에서만 사용이 가능하다는 한계가 있었습니다.

기존 VLM의 문제점

CLIP
CLIP 모델 파이프라인 [출처] https://github.com/openai/CLIP

CLIP이 나온 김에, 기존 VLM 방식의 문제점을 먼저 알아볼 필요가 있을 것 같습니다. 앞서 설명한 것처럼 CLIP은 당시 대표적인 Image-Text 를 다루는 VLM 모델입니다. 특히, CLIP은 Zero-shot prediction 성능이 뛰어나다는 점에서 많은 주목을 받았으나, 이는 결국 이미지 분류나 검색에 특화된 성능이었습니다. 다시 말해 CLIP같은 기존 VLM은 Classification을 타겟하여 설계되었기에, Captioning이나 VQA같은 더 복합적이고 개방적인 답변을 해야하는 open-ended 태스크에서는 한계를 보였습니다.

Foundation 모델 발전 과정
[출처] Multimodal Foundation Models: From Specialists to General-Purpose Assistants (https://arxiv.org/pdf/2309.10020)

Language Model 진영에서는 역시 이러한 문제에 대한 고민이 먼저 시작되었습니다. BERT 같이 기존 LLM에서는 특정 task 별로 모델을 가지고 있어야 했는데, GPT-3이 등장하면서 Few-shot Learning을 이용하여 그 문제를 해결하였죠. 뿐만아니라 별도의 Fine-Tuning없이도 다양한 태스크에서도 뛰어난 성능을 보였음을 알 수 있었습니다.

Flamingo 🦩

본 논문을 제안한 저자들은 이 아이디어를 사용하여 Flamingo라는 모델을 통해 VLM의 기존 한계를 극복하고자 하였습니다. 플라밍고는 이미지와 텍스트를 번갈아가며 처리할 수 있는 VLM입니다. 또한 visual scene을 인식하는 비전 모델과 기본적인 추론을 수행하는 대형 언어 모델을 결합하여, 각 모델의 사전 학습된 지식을 유지하면서 새로운 요소가 추가된 구조로 구성됩니다.

플라밍고는 고해상도의 이미지나 비디오도 처리할 수 있고, 웹에서 수집한 대규모 멀티모달 데이터를 활용해 학습되었다고 합니다. 이 덕분에 플라밍고 모델은 특정 작업에 맞춘 파인튜닝 없이도, 몇 개의 입력/출력 예시만으로도 open-ended task에서 높은 성능을 보였으며, 기존의 파인튜닝 모델을 뛰어넘었다고 합니다.

Approach

Flamingo는 텍스트와 이미지/비디오를 함께 입력받아 자유롭게 텍스트를 출력할 수 있는 VLM으로, 저자가 특별하게 설계한 부분은 다음 두가지와 같습니다: (1) Perceiver Resampler, 비전 인코더에서 받은 이미지 또는 비디오의 공간적-시간적 특징을 고정된 수의 시각 토큰으로 변환. (2) 이러한 비주얼 토큰은 사전 학습된 언어 모델의 층 사이에 새로 추가된 크로스-어텐션 레이러를 통해 언어 모델에 비주얼 정보를 제공합니다. 이를 통해 모델은 다음 텍스트 토큰을 예측할 때 시각 정보를 효과적으로 활용할 수 있게 되는 것이죠.

상단 그림이 바로 Flamingo 모델 구조를 나타낸 것이며, 요약하면 아래와 같습니다.

  • input: 이미지(비디오)+텍스트 || output: Free-form 텍스트
  • 듀얼 인코더 (Image, Language Encoder 각각 존재) 모두 freeze
  • Perceiver Resampler: 고정 길이의 피처로 임베딩하는 역할 (Scratch 학습)
  • Gated xatten-dense: 비전 피처 기반으로 텍스트를 생성하는 어텐션 레이어 역할 (Scratch 학습)

해당 모델의 주요 설계 부분은 논문과 동일하게, 4가지로 나누어 설명드리도록 하겠습니다.

  1. Visual processing and the Perceiver Resampler (Visual Feature 관련)
  2. Conditioning frozen language models on visual representations (Visual Feature로 텍스트 생성 관련)
  3. Multi-visual input support: per-image/video attention masking (학습)
  4. Training on a mixture of vision and language datasets (데이터셋)

1) Visual processing and the Perceiver Resampler

Vision Encoder

  • 비전 인코더는 NFNet(F6 모델)를 사용하였습니다. (ResNet 기반의 백본이라고 합니다)
  • 상단 이미지처럼 사전학습 및 프리즈를 한 상태로 사용합니다.
  • 사전학습은 CLIP처럼 이미지와 텍스트 pair로 contrastive objective로 수행되었습니다.
  • 비디오 입력의 경우, 1초당 한 프레임을 샘플링하여 Perceiver Resampler에 전달한다고 합니다.

Text Encoder

  • 70B 파라미터의 Chinchilla 모델을 사용하였습니다.
  • 마찬가지로 텍스트 인코더 역시 프리즈된 상태로 사용됩니다. (사전학습된 정보와 텍스트 생성 능력을 보존하기 위해)

Perceiver Resampler

card

Perceiver Resampler는 visual encoder를 통해 나온 visual feature를 고정된 수의 시각 토큰(64개)으로 압축하는 역할을 합니다. 크기가 고정된 덕분에, Vision-text cross-attention의 연산복잡도를 줄일 수 있었습니다.

인코더를 거쳐 나온 피처에, t=0, t=1, t=2와 같이 시간적 위치라는 타임 임베딩을 더한 뒤, flatten 하여 perceiver resampler에 입력으로 넣었다고 합니다. (여기서 패치 단위의 공간적인 위치 인코딩은 하지 않았는가? 라는 질문이 나올 수도 있을 것 같은데, 개선 효과가 없어서 사용하지 않았다고 하네요) 이렇게 flatten하여 만들어진 visual feature (이미지에서는 X_f)를 Transformer의 K, V로 취급합니다. 참고로 Q는 language 에서 나온 벡터입니다.

이를 통해, 이미 학습된 text feature를 Transformer에 입력하고, visual feature에 cross-attention을 수행할 수 있습니다. 또한 저자는 실험 결과, 이렇게 설계한 Perceiver Resampler 모듈이 일반 Transformer나 MLP보다 더 뛰어난 성능을 보였다고 합니다.

2) Conditioning frozen language models on visual representations

앞에서는 Visual Encoder를 통해 feature를 어떻게 설계하는지 알아보았습니다. 이젠 설계한 visual feature와 text feature를 사용해서 어떻게 텍스트를 출력해낼 지에 대한 부분을 설명드리겠습니다. Flamingo 모델에서 텍스트 생성을 담당하는 것은 Transformer 디코더라고 합니다. 이는 Perceiver Resampler가 만든 visual feature를 바탕으로 동작합니다.

Interleaving new GATED XATTN-DENSE layers within a frozen pretrained LM.

언어 모델을 시각 출력에 맞게 조정하기 위해, 저자들은 원래의 self-attention layer 사이에 GATED XATTN-DENSE 블록(상단 그림 왼쪽)을 추가하였습니다. self-attention layer는 학습 중 고정되고, 저자가 추가한 레이어만 처음부터 새로 학습됩니다.

또한 초기화 시 원래의 언어 모델 동작을 보존하고, 언어 모델이 학습한 특징을 급격하게 변화시키지 않기 위해 tanh 게이팅 메커니즘을 추가했습니다. 이는 LSTM에서의 게이트와 같이 넘어온 정보를 사용할지 말지를 결정하는 게이트의 역할을 한다고 이해하시면 좋을 것 같습니다. 새로 추가된 크로스-어텐션 레이어의 출력은 tanh(α)로 곱해지며, 여기서 α는 0으로 초기화된 레이어별 학습 가능한 스칼라입니다. 이 게이팅 메커니즘 덕분에, 학습 초기에는 language 피처만 학습하다, 점점 비전 피처를 학습하게 될 수 있었다고 합니다. 이에 대한 실험은 아래 이미지와 같습니다.

상단 그래프에서 색이 진할수록 초기 레이어를 의미합니다. 보시면 (a)의 경우 진한 선은 학습이 다 끝나도 낮지만, 옅은건 높아지는 것을 볼 수 있습니다. 그렇다는건, 초반 레이어에서는 비주얼 피처보다는 언어에 대해 먼저 이해를 한 후에 비주얼 피처를 쓰는 것이 효과적이다 라는 걸 나타낸다고 합니다. VLM이 크로스 모달리티를 개선하기 전에, 언어에 대한 이해가 반드시 필요함을 알 수 있다는 결과라고 정리할 수 있을 듯 싶습니다

Varying model sizes

Flamingo 모델은 1.4억, 7억, 70억 개의 파라미터를 가진 세 가지 크기로 실험이 수행되었다고 합니다. 이 모델들은 각각 Flamingo-3B, Flamingo-9B, Flamingo-80B로, 논문에서는 Flamingo-80B가 메인으로 언급된다고 합니다. 이 모델들은 고정된 크기의 비전 인코더와 학습 가능한 Perceiver Resampler를 사용하여, 크기가 다른 모델에서도 일관된 성능을 유지할 수 있었다고 합니다.

3) Multi-visual input support: per-image/video attention masking

Flamingo 모델은 텍스트와 이미지 간의 상호작용을 처리하기 위해 새로운 방식을 사용하였습니다.

바로 각 텍스트 토큰이 나올 때마다 바로 앞에 등장한 이미지의 시각 토큰에만 주의를 기울이도록 설계된 것이죠. 이는 모델이 한 번에 하나의 이미지에만 집중하도록 하여, 학습 시 사용된 이미지 수와 상관없이 다양한 시각 입력에 유연하게 대응할 수 있다고 합니다.

왜 이런 처리가 필요하느냐? 플라밍고 모델을 학습하는 데 웹크롤링한 데이터를 사용하였습니다. 지금 제가 쓰는 리뷰도 그렇게 구성되어 있는데, 이미지-텍스트가 번갈아가면서 등장합니다. 그리고 보통, 이미지가 제시된 다음 이에 대한 디테일한 설명이 그 다음 텍스트로 구성됩니다. 이러한 데이터를 Interleaved data라고 할 수 있는데요, 저자는 이런 혼합된 입력이 들어올 때 어디에 집중해야하는 지를 고민한 것이 바로 해당 파트라고 이해하시면 됩니다.

상단 이미지 중 왼쪽 강아지, 고양이 2개의 그림과 3개의 텍스트가 바로 Interleaved data의 대표적인 예시라 할 수 있겠습니다. 강아지가 1이고, 고양이가 2라고 했을 때, 그림 중간 부분 중 ϕ 이후를 보시면, 각 텍스트 토큰이 0, 1, 2라고 된 이미지에만 집중하도록 학습되는 것을 확인할 수 있습니다.

학습 시에는 최대 5개의 이미지를 사용했지만, 평가 시에는 최대 32개의 이미지/비디오와 텍스트 쌍을 처리할 수 있습니다. 이 방법이 모든 이전 이미지를 직접 참조하는 것보다 더 효과적임을 확인하였다고 합니다.

4) Training on a mixture of vision and language datasets

마지막으로 학습 데이터에 대한 설명입니다. Flamingo 모델은 웹에서 수집된 세 가지 유형의 데이터셋을 혼합하여 학습됩니다: 웹페이지에서 추출한 교차 이미지와 텍스트 데이터셋, 이미지-텍스트 쌍, 그리고 비디오-텍스트 쌍입니다.

M3W: Interleaved image and text dataset – Flamingo 모델의 few-shot 학습 능력은 텍스트와 이미지 데이터를 사용하는 학습에 의존한다고 합니다. 따라서 이를 위해 MultiModal MassiveWeb (M3W) 데이터셋을 수집했습니다. 약 4,300만 개의 웹페이지의 HTML에서 텍스트와 이미지를 추출하여 문서 개체 모델(DOM)에서 텍스트와 이미지 요소의 상대적 위치를 기반으로 이미지의 위치를 결정합니다. 각 문서에서 무작위로 256개의 토큰과 최대 5개의 이미지를 포함하는 서브시퀀스를 샘플링하여 예시를 구성합니다.

Pairs of image/video and text. 이미지와 텍스트 쌍 데이터셋으로는 ALIGN 데이터셋(18억 개의 이미지-텍스트 쌍)과 자체적으로 수집한 LTIP(Long Text & Image Pairs) 데이터셋(3억 1천 2백만 개의 이미지-텍스트 쌍)이 사용됩니다. 비디오와 텍스트 쌍 데이터셋으로는 VTP(Video & Text Pairs) 데이터셋(2천 7백만 개의 짧은 비디오-텍스트 쌍)이 사용됩니다. 이들 쌍 데이터셋은 M3W 데이터셋의 구문과 일치시키기 위해 각 캡션에 <image>와 <EOC> 태그를 추가합니다.

Multi-objective training and optimisation strategy. Flamingo는 데이터셋 별 visual 입력을 주어진 텍스트의 eexpected negative log-likelihoods의 weighted sum을 최소화하는 방향으로 학습되었다고 합니다.

Experiments

저자가 Few Shot Learning 의 성능을 강조한 만큼, 해당 성능을 살펴본 다음, Fine Tuning 성능에 대해 알아보겠습니다. 이를 위해 16개의 인기 있는 멀티모달 이미지/비디오 및 언어 벤치마크를 사용하였다고 합니다.

Few-shot learning on vision-language tasks

Few Shot Learning 결과부터 테이블 1을 통해 확인해보겠습니다. 총 16개의 벤치마크로 성능을 측정하였는데, Fine-Tuning은 당연히 없습니다. 단순히 사전학습 완료 후 리뷰 시작 때 보여준 예시처럼, 몇 가지 예시만을 제공하고 답변을 발생시키도록 실험을 진행하였습니다.

여섯 가지 작업에서는 단일 모델 가중치와 32개의 작업별 예제만으로도 Fine-Tunning된 SOTA 방법을 능가하였고, 모델이 클수록, 그리고 샷 수가 많을수록 성능이 향상되었습니다. 가장 큰 모델이 더 많은 shot의 수를 효과적으로 활용함을 알 수 있었습니다. 또한 M3W에서 최대 5개의 이미지로 학습했음에도 불구하고, 추론 시 최대 32개의 이미지나 비디오를 처리할 수 있는 유연성을 보여주었습니다.

Fine-tuning Flamingo as a pretrained vision-language model

가장 큰 모델인 Flamingo를 주어진 작업에 대해 Fine-Tunning한 결과를 비교해보겠습니다. short schedule with a small learning rate로 모델을 fine-tuning하여, 더 높은 입력 해상도를 수용하기 위해 비전 백본을 unfreezeing 하기도 했습니다.

그 결과, FineTuning Flamingo는 32 few Shots 모델보다 높은 성능을 보이고, 5개의 태스크에서 SOTA 를 이겼다고 합니다. Flamingo 모델은 원래 Fine-Tuning을 염두해두고 설계된 것이 아님에두 불구하고, 여러 작업에서 최고 성능을 기록한 모델들을 일부 이겼다고 합니다.

Limitation

해당 모델에는 여러 한계가 존재한다고 하는데 다음과 같이 정리할 수 있을 것 같습니다

  1. Flamingo의 classification 성능은 CLIP보단 안좋음
    • 이건.. generator다보니 그럴 수 있지 않나 라는 생각이 들긴 합니다
    • 게다가 CLIP은 Classfication에 타겟팅한 설계니까요…
  2. 계산 비용이 너무 커서 아주 적은 데이터로 3개나 5개의 페어라면 효과적이겠지만, 그 이상이라면 비효율적일 수도 있음. 논문에서도 언급이 되어 있고 5개 정도를 권장
  3. LLM을 그대로 사용하다보니, LLM의 약점을 그대로 가져감
    • 이건 뭐 LLM을 사용하는 대부분의 연구가 그럴 것 같습니다.
    • 프롬프트에 민감하고, 적절하지 않은 결과를 낼 수 도 있고…

CLIP 다음으로 VLM을 제안한 Flamingo에 대해 알아보았습니다. vision에서도 few shot으로도 fine-tuning없이 모델 성능을 높일 수 있다는 결과를 제시한 의미있는 논문이 아닌가 싶습니다.

Author: 홍 주영

4 thoughts on “[NerulPS 2022] Flamingo: a Visual Language Model for Few-Shot Learning

  1. 안녕하세요 홍주영 연구원님! 자세한 리뷰 감사합니다.

    Perceiver Resampler에서 질문이 하나 있습니다! 타임 임베딩 과정이 있는데, 시간적 정보가 없는 데이터의 경우에도 해당 임베딩을 활용하는지 궁금합니다.

    감사합니다

    1. 좋은 질문 감사합니다.

      “타임 임베딩 과정이 있는데, 시간적 정보가 없는 데이터의 경우에도 해당 임베딩을 활용하는지 궁금합니다.”
      -> 이미지의 경우, 단일 프레임비디오로 간주됩니다. 하여 t=0이라는 시간 위치 임베딩이 추가되지 않을까 생각됩니다

  2. 안녕하세요 좋은 리뷰 감사합니다.

    마지막에 언급해주신 두 번째 한계점이, 결국 비디오는 5초 정도의 길이까지만 원활하게 다룰 수 있다는 의미인것인가요? 만약 그렇다면 비디오를 다루는 최근 모델들의 처리 가능 프레임을 살펴보는 것도 재미있을 것 같습니다.

    추가로 최근 세미나 뿐만 아니라 리뷰에서도 거대 모델들을 많이 다뤄주시는데, 혹시 관련 연구를 진행하시려는 것인지도 궁금합니다.

    감사합니다.

    1. 논문에서 특정 비디오 길이에 대한 언급은 없지만, 보통 학습 중 비디오를 1초당 한 프레임씩 샘플링하여 처리한다고 설명하긴 했습니다. 그러나 모델이 학습 시 5개의 이미지/비디오와 해당하는 텍스트 쌍으로 학습되었고, 이를 기반으로 한 적은 수의 페어로도 적절한 성능을 발휘할 수 있을 것 같긴 합니다. 즉, 비디오를 어떻게 샘플링 하느냐에 따라 다르겠죠? 그치만 비디오를 다루기엔 굉장히 적은 양인 건 사실인 것 같습니다

      추가로 VLM을 잘 알아야 살아남을 수 있겠다(?) 라는 생각이 문득 들기도 했고, 활용하는 연구도 수행해보고 싶다는 생각도 있어 요즘 이렇게 다루고 있습니다

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다