Prompt Distribution Learning

80개의 hand-crafted prompts를 사용해서 visualization한 결과
input embeddings는 bert등을 통해 나온 word embedding을 의미
output embeddings는 CLIP의 text encoder를 통과한 결과를 의미
hand-crafted prompt는
- a photo of small [class]
- a photo of large [class]
등등 사용
일반적으로 하나의 카테고리에는 다양한 유형의 정보들이 포함되어 있음
따라서 하나의 prompt로는 그러한 정보들을 다 담을수 없어 여러개의 prompt를 사용함
CLIP를 통과한 결과들을 보니 이러한 prompt들이 카테고리마다 뭉쳐져서 표현되고 있음을 알 수 있음
그렇다면 이러한 prompt들이 전체 space에 대해서 어떤 continuous한 distribution을 가지고 있다고 했을 때 이를 고려해서 성능을 측정해보면 어떨까?


하나의 prompt로 w_1:C(P)의 classifier를 만들 수 있음
결국 위 식은 하나의 prompt에 대한 loss function
여기서 하려고하는건 학습을 통해 prompt의 distribution을 구하는 것

그런데 모든 prompt space에 대해서 확률을 정의하고 그에 따라 optimization 하는건 거의 불가능
이를 대체 할 수 있는 방법은? → Gaussian distribution 사용

K개의 prompt 후보군을 통해 gaussian distribution의 mean, covariance를 표현
결국 K개의 learnable prompt가 잘 학습이 되면 여기서 유추한 gaussian distribution을 가진 prompt space에서 prediction한 것과 동일한 효과를 냄
empirical classification loss

근데 막상 해당 loss를 계산 하려고 보니까 매번 estimation된 gaussian 분포에서 prompt(이를 통해 나온 classifier)를 샘플링 해야되는데…
multi dimension(서로 독립적이지 않음)에 대해서 샘플링을 진행하려면 MCMC 컨셉을 사용(gibbs sampling..)
이는 시간도 오래 걸리고 이렇게 샘플링해도 실제 이를 통해 backpropagation 하는것도 쉽지 않음
그래서 surrogate loss를 사용함

upper bound가 되는 loss를 최소화 하면서 학습, 문제를 좀 더 심플하게 (증명은 나중에 논문 선택되면 보는걸로….)
이렇게 되면 결국 K 개의 prompt를 학습하는 걸로 gaussian 분포에서 나온 prompt들로 학습 한 것과 동일한 효과
그럼 inference 할때는?
원래 제대로 하려면 학습을 통해 구한 가우시안 분포(K 개의 prompt들의 mean, covariance)에서 MCMC 방식으로 샘플링해서 해야되는데 너무 비효율적
그래서 저자는 그냥 mean값만 쓰자고 함…
학습할 때 추가적인 loss도 추가

K 개의 prompt들이 이왕이면 서로 다른 contents들을 표현 하게 (dissimilar semantic 유도)
최종 loss


막상 학습 할때는 K개의 prompt들을 매번 쓰는게 아니라 이것도 batch 처럼 B_P개를 추출해서 진행
(어차피 K개를 쓰나 B_P개를 쓰나 둘다 같은 가우시안 분포를 표현하기 때문에 상관없음, 물론 정확도는 조금 떨어질수 있겠지만)
실험에서도 큰 차이가 없음

결과

기존 Coop보다 좋다