티스토리 뷰

728x90

Conditional Prompt Learning for Vision-Language Models

CoCoOp 논문 리뷰를 하기 앞서, Prompt learning에 대해서 간략하게 정리를 해보려고 한다. 연구실에서 기술세미나를 하기 위해 만든 PPT이고, 첨부된 PPT는 직접 제작한 이미지라서 다른 곳에 사용할 땐 출처를 밝혀주세요.

 

 

 

저자의 초기 논문과 후속 논문을 함께 살펴볼 예정입니다.

목차는 위와 같습니다.

 

 

 

 

 

 

오늘 다룰 두 논문은 CLIP을 기반으로 한 모델입니다. 각각의 모델에서 어떤 식으로 프롬프트를 이용하고 있는지를 살펴볼 것입니다.

먼저 프롬프트의 개념을 NLP분야와 Vision-Language 분야로 나눠 설명하겠습니다프롬프트 엔지니어링은 downstream task에서 가장 좋은 성능을 가져오는 프롬프트 함수를 만드는 과정입니다

 

예시를 살펴보면, 하나의 템플릿은 두 슬롯이 있는데 하나는 [X]input data가 들어가는 곳이고, 다른 하나는 [Z]answer 슬롯입니다.

Input [X] 뒤에 [Z]를 가진 문장이 덧붙여진 이 하나의 구조를 하나의 템플릿이라 부릅니다. input text x에 따라서 프롬프트 함수에서 결과로 나오는 나오는 x’가 달라집니다.

 

Vision-language models은 이미지와 텍스트 데이터로 사전 학습을 시켰습니다자연어를 사용해 학습된 visual concept을 참조하여,task에 맞는 프롬프트 텍스트를 직접 사용자가 지정하여 zero-shot 성능을 향상 시켰습니다.

Language model Vision-language model에서의 프롬프트 학습 차이를 살펴보자면백본 아키텍처로 VLMvisualtextual datainput으로 사용하고, LM은 텍스트 데이터만 사용합니다또한, 목표 함수로 clip-like modelcontrastive learning을 통해 학습하고, LMautoregressive learning을 합니다.

 

 

 

 

클립을 이해하기 위한 배경입니다먼저 트랜스퍼 러닝이란 특정 태스크를 학습한 모델을 다른 태스크 수행에 재사용하는 기법을 가리킵니다여기서 태스크 1업스트림 태스크라 부르고, 태스크 2다운스트림 태스크라고 부릅니다.

예를 들어, 대규모 데이터셋을 기반으로 모델을 pre-train하고 학습된 모델을 fine-tuning하여 다양한 다운스트림 태스크에 활용할 수 있습니다

 

그러나 한계로는 파인튜닝 없이 새로운 다운스트림 태스크에 적용하기 어려운 일반화 문제가 발생하고새로운 태스크에 적합한 다량의 이미지와 레이블링 작업을 요구하며, 벤치마크 데이터셋 성능과 real dataset 성능과는 차이가 존재할 수 있습니다.

 

따라서 이러한 관점에서 pre-training을 할 때 파인튜닝이 필요 없는 일반화 된 모델 또 이미지 수집 및 정답 레이블 생성에 적은 노력을 기울이며, 여러 현실 데이터셋에도 좋은 성능을 보이는 강건한 모델을 갖기 위해 CLIP이 등장합니다. 클립에서 이를 입증하기 위해 제로샷 러닝을 수행하며 이는 한 번도 본 적 없는 특정 하위 태스크의 데이터셋에 대해 예측을 수행하는 과정을 뜻합니다.

 

 

클립의 학습 과정을 살펴보겠습니다.

먼저 (1) 입니다. 각 이미지를 이미지 인코더에 통과시켜서 이미지를 하나의 벡터 값으로 표현합니다. N은 배치 사이즈입니다. 추출된 벡터에 가중치 행렬을 곱하고 L2 Norm을 수행하여 각 벡터를 임베딩합니다.

그 다음 각 이미지를 설명하는 텍스트를 텍스트 인코더에 통과시킵니다. 텍스트 인코더도 텍스트를 하나의 벡터 값으로 표현하고, 이미지와 같은 과정을 거쳐 임베딩합니다.

그러면 한 개의 배치는 N개의 (image, text) 쌍으로 구성되고, N개의 쌍을 모든 I, j에 비교하면 N개의 positive pair, N^2-N개의 negative pair를 얻습니다.

그 다음은 각 이미지와 텍스트 벡터 간의 내적을 통해 코사인 유사도를 구하고, positive pair는 최대화하고, negative pairs는 최소화하도록 CE loss를 사용하여 학습합니다. 여기까지가 contrastive pre-training 단계이고, (2)번을 살펴보겠습니다.

 

(2) Class 이름을 “A photo of a {object}” 식의 프롬프트 엔지니어링을 각 데이터셋에 맞게 진행하여 텍스트 인코더에 넣고, 텍스트의 벡터 값을 구합니다.

 

(3)파인튜닝 과정을 거치지 않고, 제로샷 트랜스퍼를 통해 모델의 예측 값을 계산합니다. 이전 단계에서 나온 텍스트 벡터와 예측하고 싶은 이미지의 벡터 간 유사도를 계산하여 상대적으로 높은 값을 갖는 텍스트를 선택합니다.

 

클립이 다룬 주요 내용은 자연어 모델과 같이 이미지 모델 또한 충분한 데이터셋을 기반으로 representation learning이 이루어진다면 새로운 태스크에 대한 성능도 제로샷으로 입증할 수 있다는 점이었습니다.

 

참고

https://junia3.github.io/blog/clip

 

하지만 적절한 프롬프트를 찾는 것은 non-trivial task라 볼 수 있습니다.

 

그 예시로 CLIP에서도 많은 단어와 구의 조합을 시도한 끝에 각 데이터마다 어떤 단어나 구가 좋은 지를 입증했습니다. 또한, {class}가 오기 전에 “a”를 더하는 것과 더하지 않는 것을 비교했을 때 5%의 차이가 발생했습니다.

 

이처럼 단어의 사소한 차이가 성능에 큰 영향을 주고 있어 word tuning에 많은 시간이 소요되며, 더군다나 프롬프트 엔지니어링은 태스크에 대한 많은 사전 지식을 필요로 합니다. 이렇게 광범위한 조정이 있더라도 결과적으로 프롬프트가 다운스트림 태스크 작업에 최적을 보장해주지는 않습니다.

 

 

이러한 프롬프트 러닝 연구에 기반하여 사전 훈련된 vision-language 모델을 위한 프롬프트 엔지니어링을 자동화하는 context optimization이란 심플한 접근 방법을 제안합니다. 구체적으로 쿱은 학습 가능한 벡터를 사용하여 프롬프트의 컨텍스트 단어를 모델링합니다. 이 벡터는 무작위 값 또는 사전 훈련된 단어 임베딩으로 초기화합니다.

 

대량의 사전 훈련된 매개변수가 고정된 상태에서 데이터에서 종단 간 학습되는 연속 벡터로 컨텍스트 단어를 모델링하여 매뉴얼한 프롬프트 튜닝을 피하는 컨텍스트 최적화(CoOp)를 제안합니다.

여기선 두 가지 구현을 제안하고, 최종적으론 4개의 버전으로 학습됩니다. 

하나는 모든 클래스와 동일한 컨텍스트를 공유하고 대부분의 범주에서 잘 작동하는 unified context를 기반으로 합니다.

다른 하나는 각 클래스에 대한 특정 컨텍스트 토큰 집합을 학습하고 일부 세분화된 범주에 더 적합한 방법인 클래스별 컨텍스트를 기반으로 합니다. 학습하는 동안 learnable context vector에 대한 크로스 엔트로피 손실을 사용하여 사전학습 된 전체 매개변수를 고정하면서 예측 오류를 최소화합니다.

그래디언트는 텍스트 인코더를 통해 모든 방식으로 역전파되어 작업 관련 컨텍스트를 학습하기 위해 매개 변수에 인코딩 된 풍부한 지식을 추출합니다.

* Context token (ctx)하이퍼파라미터이고 domain shift 관점에서 4가 제일 적당

 

따라서 쿱을 간단히 정리하면 continuous한 표현이 워드 임베딩 공간을 탐색하며, 사전학습 된 매개변수를 고정한채 CE를 통해 예측 오류를 최소화하는 학습을 진행하며, 텍스트 인코더를 역전파하는 그래디언트 디센트를 통해 파라미터에서 더 풍부한 지식을 추출하고, 태스크에 관련한 컨텍스트를 촉진할 수 있게 되었습니다.

 

(a)하이퍼파라미터였던 컨텍스트 토큰의 길이의 실험 결과입니다. Domain shift 관점에서는 컨텍스트 길이가 짧을수록 더 도움이 되었습니다. 아마 더 작은 매개변수가 학습됨에 따라 과적합이 줄어들기 때문이라 예상하고, 여기선 소스 데이터셋트에 대한 실험이고, 길이를 4, 8, 16으로 변경하며 11개 데이터셋에서의 평균을 냈습니다. 이는 컨텍스트 토큰이 많을수록 성능이 향상되고 중간에 있는 클래스 토큰은 더 긴 텍스트 길이로 더 많은 추진력을 얻습니다. 요약하자면 성능과 분포 이동에 대한 견고성 사이에서 균형을 유지해야 하므로 완벽한 컨텍스트 길이라는 것은 없습니다.

(b) 오른쪽의 실험 결과는 16으로 고정한 쿱과 hand-crafted prompt를 사용한 CLIP과의 비교인데요. 클립 또한 마찬가지로 연구에서 ablation을 통해 가장 좋은 성능을 보이는 prompt를 적용했을 때입니다. 이 둘을 비교했을 때 더 좋은 성능 향상 퍼센테이지를 보여주고 있습니다.

 

기여한 점입니다.

 

 

 

 

 

 

앞서 보았던 쿱은 프롬프트의 컨텍스트 단어를 학습 가능한 벡터 집합으로 변환하고 학습을 위해 레이블이 지정된 이미지 몇 개만 있으면 이전 클립의 집중적으로 튜닝된 매뉴얼한 프롬프트에 비해 크게 개선했음을 보여줬습니다. 하지만 한계점이 있다면, 학습된 컨텍스트가 같은 데이터셋의 보지 못한 클래스일 경우, 일반화 성능이 클립에 비해 많이 떨어진다는 점이었습니다. 쿱이 학습 중에 관찰한 기본 클래스에 과적합을 하기 때문입니다.

학습된 프롬프트를 해석하는 것은 컨텍스트 벡터가 연속 공간에서 최적화되기 때문에 어렵습니다. 따라서 유클리드 거리를 기반으로 학습된 벡터에 가장 가까운 단어를 어휘 내에서 검색하여 간접적으로 확인합니다. 표는 일부 데이터셋에 대한 검색 결과인데, Food101의 경우 "enjoyed", OxfordPets의 경우 "fluffy" "paw", DTD의 경우 "pretty"와 같은 몇 가지 단어가 작업과 다소 관련이 있습니다. 그러나 가장 가까운 단어를 모두 연결하면 프롬프트는 의미가 없습니다.

이에 더 유연한 컨텍스트를 학습해보기 위해, 클래스를 문맥 중간에 넣거나 뒤쪽에 넣는 식으로 변화를 주었지만, 텍스트 도메인에 대한 직관에는 영향을 크게 주지 못하였습니다따라서 그 후속 논문인 코쿱 같은 경우는 이러한 문제를 다루기 위해 입력되는 이미지가 학습되는 프롬프트에 대한 가이드를 주는 방향으로 제안되었습니다.

 

쿱의 문제점은 약한 일반화 문제였고, 원인은 프롬프트가 클래스에 과적합되기 때문이었습니다. 따라서 조건부 프롬프트 학습이라는 새로운 개념을 도입합니다. 핵심 아이디어는 일단 학습 후 고정되지 않고, 각 입력 인스턴스에 따라 조건이 지정된 프롬프트를 만드는 것입니다

여기서 입력 인스턴스는 이미지이고, 모델 파라미터를 효율적으로 만들기 위해 간단한 구현을 도입합니다. 특히 학습 가능한 컨텍스트 벡터와 결합되는 input conditional token을 각 이미지에 대해 생성하는 lightweight neural network를 추가로 학습하여 쿱을 확장합니다.

이전 언급한 lightweight neural network , 경량화 된 신경망은 Meta-Net입니다. Linear-ReLU-Lineartwo-layer 구조를 가졌고, 은닉층은 입력 차원을 16배로 줄입니다. Meta-Net에 대한 입력은 단순히 이미지 인코더에 의해 생성된 output feature이며, 이는 각 이미지에 대해 입력 조건부 토큰을 생성합니다.

M: context tokens

아키텍처는 두 학습 가능한 요소로 구성됩니다. 하나는 컨텍스트 벡터의 집합이고, 하나는 메타넷입니다각 입력에 대한 conditional token을 생성하는 메타넷은 위에서 컨텍스트 벡터와 결합됩니다그리고 컨텍스트 벡터는 메타넷의 파라미터 세타와 함께 업데이트 됩니다.

M: context tokens

이를 더 면밀히 살펴보겠습니다. H 함수는 두 레이어로 이루어진 메타넷이며, 각 입력이 들어갔을 때 나오는 토큰이 각 컨텍스트 토큰과 결합됩니다. 각 클래스에 대한 프롬프트는 결국 입력 인스턴스에 따라 조건이 지정되어,  i번째 클래스에 대한 프롬프트는 이제 ti(x)가 됩니다그리고 기존의 예측 확률은 다음과 같이 수정됩니다.

메타넷의 파라미터 세타와 컨텍스트 벡터가 함께 gradient base로 업데이트됩니다. 이 조건을 추가함으로써 기존 static한 디자인에서 조금 더 다이나믹하게 변경되어 특정 클래스에 집중하는 것을 방지합니다. 여기서 질문으론  light neural network를 했는지?가 떠올랐는데, 깊은 신경망을 넣으면 파라미터 수가 많아져서 과부하가 오고, 더 높은 성능으로 이끄는 것은 아닌 것 같아 최대한 효율적으로 설계한듯 합니다.

이렇게 앞서 쭉 비교해왔던 세 모델의 확률값을 비교해보면, 어떻게 변화했는지 흐름을 파악할 수 있습니다.

여기선 모두 클립의 기본 모델이 고정되어 있고,k개의 카테고리가 있다고 가정합니다.

1)클립: x는 이미지 인코더에서 생성된 이미지 피처이고, w_i는 각 카테고리를 나타내는 텍스트 인코더에서 생성된 가중치 벡터의 집합입니다. 특히 가중치 벡터는 “{class}” 토큰이 i번째 클래스 이름으로 채워진 “a photo of a {class}”과 같은 프롬프트에서 파생됩니다. 따라서 예측확률은 코사인 유사도를 사용한 유사도를 계산하고, 여기서의 tautemperature parameter입니다. 확률분포의 sharpness를 제어하기 위해 사용하는 학습된 매개변수로 특히 입력 x와 각 클래스 i 사이의 코사인 유사도 점수를 조정하여 분포를 부드럽게 합니다.
 
2): ti로 표시되는 i번째 클래스에 대한 프롬프트가 벡터로 표현되고, 이 컨텍스트 벡터는 모든 클래스에 공유됩니다. 텍스트 인코더 g에 입력되어 예측확률이 계산됩니다. 텍스트 인코더는 미분 가능하기 때문에, 그레디언트를 다시 전파하여 컨텍스트 벡터를 업데이트합니다.
 
3)코쿱: 코쿱에는 입력 인스턴스로 이미지를 받는 메타넷이 추가되었습니다. 메타넷에서 생성한 컨텍스트 토큰이 컨텍스트 벡터와 결합되어 학습 과정에 들어갑니다. 따라서 메타넷의 파라미터도 함께 학습되는 구조를 지녔습니다.

 

이제 코쿱의 실험 결과도 함께 보겠습니다. 학습 중에 관찰되는 클래스가 아닌 새로운 클래스에 대해 낮은 성능을 보였던 쿱은 Conditional context optimization 방법으로 base class오버피팅 되는 문제를 해결했습니다.

 

 

 

 

 

 

 

쿱의 취약한 일반화 가능성 문제를 해결하는 것이 이 연구의 주요 초점이었습니다. 11개의 데이터셋에서 클래스를 base classnew class 두 그룹으로 균등하게 분할합니다. 학습 기반의 쿱과 코쿱은 기본 클래스만 사용하여 학습하고, 기본 클래스와 새 클래스에 대해 별도로 평가를 수행하여 일반화 가능성을 테스트합니다H는 각 평균을 합친 것입니다.

사실 new class에 대해서 클립이 더 좋은 성능을 보여주고 있어서, 평균내어 더 낫다는 식으로 결론을 내린 것 같습니다. Base에 대해선 고정된 컨텍스트 벡터를 쓰는 쿱이 더 좋은 성능을 보여주고 있습니다. 여기선 대신 manualprompt와의 격차를 크게 줄였다는 것에 의미를 두면 더 좋을 것 같습니다.

 

해당 테이블을 쿱과 코쿱만 따로 비교하여 표로 나타낸 모습입니다.

(a) 모든 데이터 세트의 unseen classes에서는 쿱에 비해 일관되게 개선한 모습을 볼 수 있으며,

(b)는 정확도도 3% 미만으로 향상시켰으며, 반대로도 아래 세 개의 데이터셋을 제외하고도 3% 미만의 감소 폭을 확인할 수 있습니다.

대부분 쿱이 base classes에 대해 높은 성능을 보입니다. 그리고 이 아래 세 개 데이터셋을 다시 살펴보면

이미 일반화의 성능을 클립보다 충분히 높여 놨음을 강조합니다.

해당 실험은 datasetcross하여 transfer 할 수 있는 지의 능력을 살펴봅니다. 이미지 넷을 소스 데이터로 학습을 하고 다른 10개의 데이터셋에 transfer하여 쿱과 코쿱을 비교합니다이미지넷에는 다양한 객체와 개 품종이 섞인 클래스가 이미 포함되어 있어서, 칼텍101이나 개가 포함되는 옥스포드펫과 같은 데이터셋에 대해 잘 전이 학습되는 것이라 볼 수 있고, 이에 비해 정확도 수치가 50%보다 훨씬 낮은 데이터셋은 조금 더 세분화되거나 전문 지식이 포함됨을 알 수 있습니다.

학습 가능한 프롬프트가 domain shift에 있어 manual prompt보다 더 강력하단 것을 보여줍니다. 이미지넷에서 학습한 컨텍스트를 특별히 설계한 4개의 벤치마크 데이터셋으로 전송하여 일반화 성능을 평가하였고두 가지 프롬프트 학습 방법이 모든 타겟 데이터셋에 대해 클립을 능가했습니다.

(a) 초기화의 영향을 비교하기 위해 다른 모든 매개변수를 동일하게 유지하면서 단어 임베딩 기반 초기화와 무작위 초기화를 비교했습니다 결과는 단어 임베딩에 기반한 초기화가 랜덤 초기화보다ssss 기본 클래스와 새 클래스 모두에 더 좋은 결과를 보여주고 있습니다.

(b) 코쿱에서도 컨텍스트 길이에 대한 실험을 진행했습니다. New class에 대해서는 긴 컨텍스트가 더 낫다는 것을 보여줍니다.

여기선 코쿱과 더 많은 매개변수를 사용하는 빅 쿱을 비교합니다메타넷을 추가했기 때문에 메타넷의 파라미터 세타로 인한 파라미터 증가의 효과라고 해석할 수도 있기 때문에 이와 비슷하게 쿱을 늘려준 것입니다. 결과는 매개변수를 늘리는 것이 핵심이 아님을 보여줍니다.

 

 

 

 

 

 

결론입니다. 한계와 기여, 결과로 나누어 정리를 해보았습니다

 

감사합니다.

728x90
댓글