YoojLee / paper_review

paper review archive
6 stars 2 forks source link

Conditional Prompt Learning for Vision-Language Models (2022) #57

Open YoojLee opened 1 year ago

YoojLee commented 1 year ago

image

Summary

기존의 CLIP-like VLM의 prompt를 few labeled images로 tuning하여 transferability를 개선한 CoOp 연구를 바탕으로, CoOp이 base class에 overfitting된 문제를 발견 (아래의 그림 참고)하고 이를 CoOp의 static prompt때문이라고 지적함. class-specific하게 학습된 static prompt를 조금 더 generalizable하게 each instance에 대해 condition된 prompt를 design하도록 Meta-Net을 추가로 학습하여 dynamic prompt (CoCoOp)를 제안. 이를 통해 같은 데이터셋 내부에서 new class에 대한 성능 개선을 이루어냈고, 더 나아가 cross-dataset transfer 및 domain generalization에 있어서 역시 기존의 CoOp을 뛰어넘는 성능을 보여줌으로써 instance-conditioned prompt의 superiority를 입증함.

image

+) 추가적으로, prompt tuning 자체가 CLIP-like VLM 대비 갖는 이점은 prompt engineering 과정을 자동화할 수 있다는 점임. 기존의 clip은 zero-shot 성능을 높이기 위해 테스트 데이터 내부의 모든 클래스를 사용해서 시행착오를 거쳐 튜닝하는 prompt engineering을 수행함. 이는 inefficient하고 optimal을 보장하지 않음. 하지만, prompt tuning을 통해서 몇 장의 이미지를 라벨과 함께 명시적으로 학습함으로써 zero shot performance (with hand-crafted prompts)를 훨씬 개선시킬 수 있게 됨. 비록, supervision이 추가로 주어지긴 하지만 prompt engineering도 어쨌든 튜닝된다는 점에서 완전히 unsupervised라고 하기엔 어렵고 실제로 적은 데이터만 필요로 하기 때문에 (또 성능 폭은 훨씬 크니까) 이런 부분에서 zero-shot clip 대비 갖는 이점이 크다고 할 수 있음. 추가적으로, efficient한 fine-tuning 방식이라고 할 수 있기도 함. 모델의 스케일이 커지면서 full fine-tuning을 하는 것이 현실적으로 무리가 있고 overfitting될 리스크가 너무 컸음. 하지만, 이를 prompt tuning (여기서는 engineering도 포함하는 넓은 의미의 tuning)을 통해 해결할 수 있게 된 것. 다만, 앞서 말했 듯이 prompt engineering은 좀 burdensome하니까 이를 prompt tuning (prompt learning)으로 해결하겠다는 것. 이에, CoOp이 나오게 된 것이고 CoOp의 static design이 new class에 대한 accuracy가 큰 폭으로 떨어지면서 기존의 zero-shot clip 대비 갖는 이점이 희미해지게 됨 (zero-shot clip은 generality가 가장 큰 강점이니까, 근데 성능을 좀 개선시킬 수 있다고 하지만 그 generality에서 보는 손해가 매우 크다면 few-shot으로 성능 개선하는 것의 의의가 퇴색되겠지). 이에 CoCoOp을 제안하게 된 것.

Method Highlights

image

전반적으로 간단한 디자인임. CoOp에서 unseen class에 대해 generalization이 잘 이루어지지 않는 것을, 모든 클래스가 하나의 context token을 공유하는 static design이기 때문에, prompt를 instance를 condition으로 하도록 해서 보다 dynamic하게 디자인함으로써 unseen class에 대한 robust함을 증가시키는 방향으로 디자인을 mod.

이를 구현할 수 있는 가장 직관적인 방식은 M개의 context vector를 neural network로 학습시키는 것임. 그렇게 되면, neural network이 instance를 input으로 받아서 instance 별로 다른 context token을 output할 것임. 하지만, 이 경우에는 parameter의 수가 neural network의 parameter $\times M$ 이기 때문에 parameter-efficiency가 떨어짐.

따라서, 저자들은 이에 meta token $\pi$를 Neural Network이 학습하도록 함. 이때의 neural net은 Meta-Net으로 칭하며, $h_\theta(\cdot)$으로 표기. 결과적으로 아래의 수식과 같이 해당 메타 토큰이 각 토큰에 더해지는 형태.

$$v_m(x) = vm + \pi$$ , where $\pi = h\theta(x)$ and $m \in \{1,2,...,M\}$

cross entropy loss에 feed되는 모델의 predicted probability는 아래와 같이 정의됨. image

학습 과정 중에 context vector $\{vm\}{m=1}^M$은 Meta-Net의 파라미터인 $\theta$와 같이 업데이트됨. encoder의 weight은 freeze되어 있다는 점. Meta-Net은 이미지 인코더의 output feature를 feed받는 two-layer bottleneck 구조(Linear-ReLU-Linear)로 구현되어 있으며, 이때 hidden layer는 input dimension을 16분의 1로 줄이는 구조임.

근데 이렇게 neural net을 하나 더 둔다고 해서 어떤 식으로 얘가 instance-specific meta token을 학습하게 되는 건지 잘 와닿지 않음.

개인적으로는 이런 instance-conditioned prompt가 class에 bound된 정보가 아닌 instance 자체에 초점을 맞춰서 정보를 얻어냄으로써 좀 더 transfer가 잘되는 representation을 학습한다는 점에서 self-supervised learning과 어느 정도 일맥상통한다고 느꼈음 (논문에서는 image captioning이랑 비슷하다고 함. 어찌 보면 라벨 가지고 instance를 characterize하는 방식으로 학습한다는 점에서 캡셔닝이랑 더 비슷하다고 볼 수 있을 듯).

Experiment Highlights

following three problem settings 1) generalization from base to new classes within a dataset 2) cross-dataset transfer 3) domain generalization

클래스 당 16장의 이미지를 활용하여 학습하고, 성능 평가를 수행할 11개의 데이터셋 내 클래스를 base, novel로 동일하게 쪼갬 (이러한 split 구성이 성능에 영향을 미치는 key는 아니라고 논문에서 밝히고 있음.)

ViT-B/16의 CLIP을 활용했으며, training efficiency를 위해 batch size는 1로 고정하여 사용함.

Strengths

  1. 논문이 잘 구성되어있음
  2. strong results (simple yet effective)
  3. CLIP-like foundation models를 잘 활용할 수 있는 prompting이라는 방안을, 조금 더 일반화 성능을 개선하는 방향으로 구성할 수 있는 방식을 제안함 (아이디어가 timely하고, 학계에 가져다줄 수 있는 인사이트가 꽤 크다고 생각).
  4. motivation이 solid

Weaknesses

  1. technical novelty는 좀 떨어지는 것 같음. 하지만, CoOp이 동일한 저자의 연구라는 점에서 이러한 부분은 어느 정도 보완이 되는 것 같기도..
  2. 아무래도 Meta-Net이 추가되면서 학습해야 하는 파라미터 수가 늘어남에 따라 data를 좀 더 필요로 할 것 같은데 shots를 16으로 고정해서 실험하는 게 좀 아쉬웠음. data-efficient하게 학습을 한다는 점 또한 CoCoOp의 contribution이 될 수 있을텐데 shot에 대해서 성능 변화 양상이 어떻게 되는지 좀 궁금함.
  3. 아직 novel class에 대한 성능이 zero-shot clip에 비해 많이 떨어짐.
  4. cross-dataset transfer와 같은 경우, CLIP과의 비교가 없어서 아쉬웠음. (아마 CLIP의 prompt를 직접 engineer해서 각 데이터셋에 실험해보기엔 시간이 없었을 것 같긴 함) → 논문에서는 static 대비 dynamic prompt의 superiority가 주 topic이라고는 하지만, 어쨌든 그 범위가 prompt tuning라면 prompt tuning으로서의 이점이 확실한가에 대한 뒷받침도 당연히 되어야 한다고 생각하기 때문.
  5. 실제 NLP에서의 prompt tuning은 NLP 모델 자체가 unimodal이기 때문에 당연히 text prompt로 한정이 됨. 그러나, VLM의 경우에는 두 개의 modality를 기반으로 하기 때문에, prompt를 두 개의 modality에 모두 두어서 이를 학습하는 방향도 좋을 것 같다. 실제로 Visual Prompting 연구도 따로 진행이 되고 있는 만큼 가장 실현 가능한 발전 방향일 것 같음. 이 부분은 weakness보단 하나의 future work 중 하나일 것 같음. 실제로 MaPLE이라는 논문이 이번 CVPR에 발표되기도 함.
YoojLee commented 1 year ago

instance-conditional prompt라는 점이 얼마나 memory consumption을 키우는 건지가 잘 이해가 안감