Open YoojLee opened 1 year ago
open review를 살펴본 결과,
According to Table 4 in the paper, the nearest neighbor words of the learned context vectors rarely have practical semantic meaning. This casts doubt on using the word “context”. From this perspective, these soft prompts are just more parameters to improve the model capacity. Hence, can we say that CoOp is just a better version of fine-tuning? In other words, there might be a similar fine-tuning way to utilize additional parameters to get better performance.
와 같은 리뷰를 보았음. 흥미로운 시각 같다!
zero-shot clip의 prompt engineering을 잘못 이해해서 좀 헤맸던 것 같다 (task transfer에 대한 prompt engineering이었다!)
Summary
VLM은 prompting을 통해 zero-shot transfer가 가능해진다는 장점이 있음. 그러나, 효과적인 zero-shot transfer를 위해 번거롭고 domain expertise를 요구하는 prompt engineering을 수행해야 한다는 단점이 있음. VLM (e.g., CLIP)의 input으로 들어가는 text prompt를 learnable continuous prompt로 대체하여 tune하는 CoOp을 제안함 (large vision models에 text prompting을 적용한 첫 연구). 이를 통해, downstream task (classification skill에 국한하여 다양한 downstream dataset에서 실험)으로의 transfer learning을 수행한 결과, 적은 양의 이미지로도 zero-shot clip 및 linear probe clip 대비 좋은 성능을 보여줌. 또한, domain generalization에 있어서 zero-shot / linear-probe 대비 좋은 성능을 보여줌.
Method Highlights
전체적인 학습 메커니즘은 위의 그림과 같다.
NLP에서 많이 활용되던 continuous prompt tuning 방식을 적용하여, learnable token을 prompt에 context words로 넣어줌. prompt에 들어가는 형태는 위의 그림과 같음. prompting 방식을 두 가지로 적용할 수 있는데, 1) Unified context 2) class-specific context임.
Unified context 모든 클래스에 대해 같은 context prompt를 활용하는 것. 이때, CLASS token을 어디에 삽입하느냐는 택할 수 있으나 저자들은 가운데에 위치할 경우 training을 보다 유연하게 적용할 수 있다고 함 (단순 클래스 이름 이외에도 description을 추가한다거나, 혹은 sentence를 더 빨리 cut off한다거나 하는 형식으로; 마지막에 class token을 append할 경우 무조건 full length의 sequence를 집어넣을 수밖에 없으니)
Class-Specific Context (CSC) context vector가 각 클래스 별로 별도로 적용되는 것 (아래의 수식 참조) $$[\mathrm{V}]_1^i [\mathrm{V}]_2^i\ ...\ [\mathrm{V}]_M^i \neq [\mathrm{V}]_1^j [\mathrm{V}]_2^j\ ...\ [\mathrm{V}]_M^j\ \mathrm{for}\ i \neq j\ \mathrm{and}\ i,j \in{1, ..., K}$$
CSC의 경우에는 unified 대비 더 fine-grained class (조금 더 세밀하게 클래스가 구분되는 경우)를 구분하는 데에 효과적이라고 얘기하고 있음.
Context Optimization의 경우, cross-entropy loss를 통해 학습이 이루어짐. 이때, gradient는 text encoder를 통해 prompt token까지 back-propagate됨 (text encoder는 고정되어 있고, prompt의 context token만 update된다는 점).
Experiment Highlights
논문에서는 CoOp의 base model을 CLIP으로 지정하고, linear probe CLIP과 zero-shot CLIP과의 비교를 주로 진행. Evaluation protocol의 경우에는 CLIP에서 실험한 setting을 차용함. 또한, CoOp의 경우에는 context token의 길이를 16으로 고정하였으며, Unified context와 CSC / class token의 위치 (end, mid)에 따라 4가지 variation을 두었음.
위의 결과는 11개의 데이터셋에 대해서 few-shot transfer를 수행한 결과임. 전체 데이터셋에 대한 결과를 평균한 경우 (top-left), Unified context를 적용한 CoOp이 가장 좋은 성능을 내었으며, linear probing과 zero-shot과의 성능 차가 어느 정도 벌어지는 것을 확인할 수 있음. 이는 hand-crafted prompts를 기반으로 하는 것보다 soft prompt tuning이 더 좋다는 것을 뒷받침한다고 저자들은 주장. 또한, linear probing 대비해 CoOp은 더 적은 데이터로 성능 개선을 이끌어낼 수 있음을 보임 (transfer learning에 있어서 linear classifier를 추가 학습하는 것보다 prompt를 tuning하는 것이 data-efficient하게 training할 수 있는 방법임을 뒷받침함). 전반적으로 CoOp의 training 이미지 개수에 따른 성능 변화를 볼 때에 성능 개선의 momentum이 줄어드는 것으로 보아 overfitting이 발생하였을 것임을 추측.
개별 데이터셋 결과를 볼 때에 consistent하게 CoOp이 효과적이었다고 말하기는 어려움. OxfordPets나 Food101 같은 경우에는 실제로 zero-shot 대비해서 few shot의 성능이 뒤떨어지는 경우가 많았음. 특히, Food101의 경우에는 실제로 모든 CoOp의 variation에 대해서 성능이 zero-shot보다 떨어짐. 이는 데이터셋 자체에 noise가 끼어있기 때문이라고 저자들은 밝히고 있음.
또한, context vector를 class 간 공유하는 것 (unified context)이 전반적으로 성능 개선에 도움이 되고 있음을 보이고 있음. 반면에, class 간 독립적으로 유지할 경우에는 전반적으로 성능이 떨어지긴 하지만 StanfordCars, Flowers102, FGVCAircraft 등의 fine-grained datasets에 있어 성능이 잘 나옴 (그러나, OxfordPets, Food101 같은 경우에는 또 아님). CSC가 더 많은 파라미터를 요구하기 때문에 low data regime에서 unified context보다 더 성능이 안 나오는 것으로 볼 수 있음.
CoOp이 distribution shift에 어느 정도 민감한지 확인하기 위해서 domain transfer에 대해 비교 실험을 수행. source dataset인 ImageNet에서 나머지 target dataset에 어느 정도로 잘 zero-shot transfer되는지 확인한 결과, 전반적으로 CoOp을 적용한 결과가 가장 좋았음. 이는 CoOp이 training data의 distribution에 specific하게 tuning을 수행했음에도 data distribution shift에 robust하게 작용함을 알 수 있음.
context token의 개수와 vision backbone의 variation을 주고 실험을 한 결과임. context length가 길어질 수록 성능이 오르는 것은 사실이지만 context length를 길게할 수록 domain generalization 성능은 떨어지기 때문에 (dataset에 overfitting) context length에 있어서 golden rule은 없음을 확인할 수 있음. 또한, vision backbone의 경우에는 더 좋은 backbone을 쓸 수록 성능이 올라가는 것을 알 수 있었으며 zero-shot clip과의 차이는 모든 아키텍처에서 다 유의한 차이를 보여주었음.
여러 아키텍처에서 prompt ensembling을 한 결과와 비교를 했을 때 CoOp의 결과가 consistent하게 더 좋았음. prompt ensembling 전략을 CoOp과 incorporate하는 것도 재밌을 듯.
prompt의 initialization을 random으로 할 것인지 아니면 manual하게 할 것인지에 대한 비교를 수행. 그렇게 큰 차이가 없었음을 확인. 실제로 manual init을 조금 더 tuning할 수는 있겠지만, 그냥 random하게 init한 게 더 simple하므로 그렇게 수행할 것을 저자들은 권장.
다른 fine-tuning method들과 비교한 결과. linear probing과 full fine-tuning (image encoder)를 한 결과, 실제로 zero-shot 대비 성능이 하락함. few shot regime이니 당연히 full fine-tuning은 성능 하락 폭이 매우 큼을 확인할 수 있음. text output에 transformation layer와 bias term을 추가하여 tuning한 결과, zero shot보다 성능이 향상됨. 그러나, CoOp의 성능 향상 폭만큼 크지는 않았음. 이는 text encoder에서 전파되는 gradient가 informative함을 방증함.
continuous prompt tuning의 단점은, 산출된 prompt가 interpretable하지 않다는 점임. tune된 prompt가 어떤 semantic을 갖는지 확인하기 위해, word embedding space 상에서 euclidean distance로 가장 가까운 word를 찾아 나열한 결과임. 결과적으로 prompt 내 각 토큰과 매칭된 word가 각 데이터셋을 어느 정도 설명하는 듯한 모습이 보였음 (e.g., enjoyed for Food101, fluffy, paw for OxfordPets). 그러나, 매칭된 word sequence를 보았을 때 사람이 해석 가능한 수준은 아니라는 점에서 vector의 semantic을 nearest words와 매칭하는 형태로 vector의 semantic을 해석하는 데에는 한계가 있음을 보여줌.
Strengths
CLIP과 같은 VLM에 NLP 도메인에서 활용되는 것과 같이 text prompt tuning을 처음으로 적용함.
prompt tuning에 대한 motivation이 좋았음. 모델 자체가 단어의 순서 등에 굉장히 민감하기 때문에 engineering이 burdensome하고 time-consuming하다고 이야기 하며 이를 automate할 필요가 있다고 얘기함.
prompt tuning을 통해 data-efficient transfer learning을 효과적으로 수행함.
data-specific하게 tuning되었음에도 불구하고 test-time adaptation (domain transfer or domain generalization)에 효과적이고, distribution shift에 robust함.
기존에 soft prompt는 해석 가능성이 떨어진다는 한계가 있었는데, 개인적으로 해석 가능성에 대한 실험을 진행했다는 것이 흥미로웠음.
text쪽을 건드려서 image classification 성능이 좋아지는 게 흥미롭다. 이런 부분을 조금 더 실험해봤어도 좋았을 듯함.
Weaknesses
technical novelty가 떨어짐. 물론 NLP domain에서의 text prompt tuning을 통해 data efficient하게 다양한 downstream datasets에 효과적으로 transfer할 수 있다는 contribution은 좋지만, 단순 적용을 한 논문이라는 생각이 듦.
솔직히..논문 전체 퀄리티가 좀 떨어진다는 느낌을 받았다. abstract 같은 부분에 복붙도 많고..내가 볼 때는 어차피 cvpr'22에 CoCoOp이 나왔기 때문에 그 논문에 집중하고, 이 논문은 그냥 어디든 한 번 내보자 하는 느낌을 받긴 했음..
개인적으로 실험 설계에 있어서 아쉬움을 느낌. 이 논문의 취지는 prompt engineering이 burdensome하기 때문에 transfer를 할 시에 이러한 휴리스틱한 prompt engineering을 피해서 soft prompt tuning을 통해 few shot의 이미지만으로 new dataset의 classification을 학습할 수 있다. 라고 이해함. 하지만, 논문에서 비교하고 있는 engineering 결과("Comparison with hand-crafted prompts")는 CLIP에서 pre-training 시 적용된 prompt engineering 하의 결과임. downstream task에 transfer를 적절한 prompt engineering을 통해 하는 것이 inefficient하다고 얘기하는 거라면, 성능 비교는 동일한 세팅 하에서 (각 데이터셋의 validation set 혹은 CoOp과 동일한 support set) 실제로 prompt engineering을 추가로 수행해서 얻어낸 결과와 비교하는 게 좀 더 엄밀하지 않았을까 함. NLP에서 이용되는 prompt engineering 자체가 downstream 수행 시 prompt를 어떻게 넣어주느냐에 따라 성능을 optimize하는 방식이니까 NLP 도메인에서의 연구 흐름을 계승하는 방식이었다면, 역시 이러한 비교가 더 합당하다고 봄. 잘 prompt engineered된 clip은 어쨌든 zero-shot이므로, few-shot과의 비교는 어떻게 보면 당연히 좋아지는 게 맞는 거라고 생각이 들기 때문임. 현재 상태로는 그닥 fair한 comparison이란 생각이 들지 X. (지금 형태로는 zero-shot에서 추가적으로 fine-tune을 하더라도 overfitting이 적게 few-shot이 잘된다 이런 형태로밖에 실험 결과 해석이 이루어지지 않는 것 같음) 👉애초에 여기서 말하는 zero-shot CLIP이 각 태스크에 customize된 prompt를 기반으로 transfer된 것이기 때문에 해당 궁금증은 해결이 된 것 같다. 하지만 그럼에도 불구하고, 이미지 노출이 직접적으로 있고 없고는 당연히 아주 큰 차이라서 zero-shot clip에 비해서 성능 향상 폭이 15%이다 이런 식의 results가 그렇게 크게 convincing한지는 잘 모르겠음. linear probing과의 비교가 있으니 이런 부분에서 어느 정도 해소가 되긴 함.
또한, 이는 future work에 들어가 있긴 하지만 아쉬운 점은 fine-tuning method 비교 시에 visual prompt tuning의 방식과의 비교가 있었으면 더 좋았을 듯함. 논문의 주 contribution 중 하나가 transfer learning을 data efficient하게 진행한다는 것인데, 같은 prompt tuning이어도 CLIP 등의 VLM의 text prompt를 tuning하게 되면 기존 VPT 대비 어떤 advantage가 생기는지에 대한 비교가 기술되어 있었다면 좀 더 논문의 contribution에 맞는 방향의 실험 설계이지 않았을까 함.
CLIP 이외에도 다른 VLP method를 추가해서 비교했으면 어땠을지 궁금함.