CLIP, leveraging the power of a large image-text paired dataset for zero-shot learning

Minchul Kim
Lunit Team Blog
Published in
11 min readJun 28, 2021

개요

이번 블로그 에서는 2021년 OPEN AI 에서 공개한 Learning Transferable Visual Models from Natural Language Supervision 이라는 논문을 소개한다. CLIP (Contrastive Learning Image Pre-training) 으로도 알려진 이 논문은 DALL-E 와 같은 시기에 공개가 되었다.

Learning Transferable Visual Models from Natural Language Supervision 이라는 제목처럼 이 논문은 이미지와 텍스트가 paired 된 데이터를 통해서 vision task에 적합한 모델을 학습하는 논문이다. 이 논문은 인터넷에서 많이 구할수 있는 image-text pair를 활용해서 zero shot transfer learning을 하는 논문이다.

따라서 논문이 기존의 다른 vision task의 학습 / 추론 방식과 다른 점은 학습 데이터가 natural language text 이기 때문에 미리 정의 된 object categories 가 없다는 점 이다.

CLIP 과 기존 지도학습의 학습자료 형태의 차이

CLIP 학습 자료

CLIP의 학습자료는 인터넷에서 이미지와 text를 pair로 찾을 수 있는 다양한 자료를 모아서 만들었다. 총 400,000,000 쌍의 자료를 인터넷에서 찾았고 이를 인터넷에서 찾기 위해 사용된 query 는 Wikipedia 에서 최소한 100번은 등장 하는 단어 500,000 개를 통하여 구축 하였다고 한다. 이미지넷의 자료 개수가 1,281,167 인것을 생각하면 상당히 많은 수의 자료 이다.

CLIP 학습 방식

CLIP 모델은 크게는 image encoder와 text encoder 두 가지로 이루어져 있다. Image encoder는 ResNet50 을 기본 모델로 사용하였고, text encoder는 Transformer 를 사용하였다. Image encoder 에서 특이한 점은 기본적인 global average pooling 대신 attention pooling 을 이용한 것 이다.

각각의 encoder 에서 나온 feature는 spatial dimension 이 없는 vector형태 이다.

CLIP은 각각 N 개의 pair (image, text)가 있을 때 N X N 가지의 가능한 pairing 에 대해서 실제 pairing이 무엇인지 predict 하는 task 를 수행한다. 즉 실제 pairing이라면 image encoder 의 feature 와 text encoder의 feature가 similarity가 높도록 학습한다.

이러한 loss는 contrastive loss 혹은 InfoNCE loss라고 알려져 있다. InfoNCE loss를 사용한 대표적인 논문은 SimCLR 혹은 MOCO 이다.

SimCLR 혹은 MOCO 에서 Contrastive learning 에 사용된 InfoNCE loss의 수식. z_i 와 z_j 의 similarity는 같도록 유도하며 나머지 z_k 들과 zi의 거리는 멀어지도록 한다.

위 loss 의 형태를 보면 실제 cross entropy with softmax activation 의 loss 형태와 매우 흡사함을 볼 수 있다. 따라서 구현도 아래 pseudo code 처럼 cross entropy 를 통해 구현할 수 있다.

CLIP 에 사용된 InfoNCE loss 의 pseudo code. Text embedding 과 image embedding 이 각각 서로의 negative sample 이 되어서 infoNCE loss를 구한다.

여기서 loss function 에 관련된 한가지 질문을 할 수 있다. L2 Norm 대신 cosine similarity (dot product) 를 사용하는 이유는 무엇인가? 이는 L2 norm을 사용하면 두 벡터를 “짧게” (중심에 가깝게) 하여 유사하게 만들거나 두 벡터를 매우 “길게” (중심에서 멀어지게) 하여 유사하지 않게 만드는 것이 매우 쉽다. 하지만 cosine similarity 는 이러한 문제가 없다. 따라서 네트워크가 더 좋은 representation 을 배울 수 있다.

MOCO / SimCLR 와 같은 self supervised contrastive learning work에서 InfoNCE loss가 쓰일때와 CLIP에서 InfoNCE loss가 쓰일때 차이점은 무엇일까? Self supervised contrastive learning work은 positive pair를 찾기 위해 image augmentation technique에 의존한다. 하지만 이 논문의 자료는 text 와 image의 pair 이기 때문에 augmentation 에 의존 할 필요 없이 image-text를 positive pair로 이용할 수 있다. contrastive learning 이 augmentation 에 의존할 때 발생하는 가장 큰 문제는 augmentation space가 실제 이미지의 분포와 다름에서 오는 failure 가 있을 수 있다. 하지만 image-text 의 pair를 많이 모은 이 자료는 그러한 문제를 자료로 해결 할 수 있다.

학습 세팅에 관련된 remark

  • CLIP을 학습시에 batchsize 는 32,768 로 설정되었다. 충분히 많은 양의 자료를 batchsize로 두어야 학습시에 어렵지만 유의미한 negative 한 pair를 만들 수 있다. 따라서 큰 batch size가 활용된 것으로 보인다. 이 현상은 SimCLR 에서 negative sample 로 인한 batch size 증가를 MOCO 가 feature bank 를 도입함으로 해결 한 것과 매우 연관이 있다.
  • Temperature 가 feature를 scale down / up 하는 것에 활용이 된다. 보통 contrastive learning 에 관련된 work 에서는 temperature 는 hyperparameter 로 deterministic 하게 정해진다. 하지만 이 연구에서는 learnable 하게 tuning 될 수 있도록 하였다.

Inference 방식

Common Form of Classification Inference Method

우리가 잘 알고 있는 classification 모델은 주로 미리 정의된 object categories 가 있고, 모델은 주어진 이미지가 해당 category에 대한 output이 높도록 학습하는 방식이다.

이미지 출처: https://medium.com/intro-to-artificial-intelligence/simple-image-classification-using-deep-learning-deep-learning-series-2-5e5b89e97926. 미리 정의 된 object category 가 있는 것을 표현 한 그림.

따라서 추론 단계 (inference) 에서 해당 이미지의 class를 알고 싶다면 output 을 읽고 가장 큰 output이 가리키는 class를 읽으면 된다. 이는 task 가 predefined 되어 있어야 학습 및 추론이 가능하다. 이미 한 task에 optimize 되어 있는 network를 가지고 와서 네트워크의 output 부분을 다른 task 데이터로 학습시키는 과정을 finetune / linear probing 이라고 하기도 한다.

CLIP Inference Method

CLIP은 이미지와 text pair를 예측하도록 훈련 되었다. 따라서 ImageNet 의 1000가지 class에 대해서 inference를 하려면 두가지 방법이 있다.

  1. CLIP을 feature extractor로 사용하고 ImageNet classification 을 위한 head를 다시 학습.
  2. 각각의 이미지에 대해서 ImageNet 의 1000가지 class 를 표현하는 text 와의 similarity 를 계산. (zero shot learning). 이 방식은 classification 을 위한 head를 따로 학습하지 않는 것이 특징이다.

위 두 방식에서 CLIP은 2번째 방법 (zero shot learning)이 다양한 dataset 에서 linear probing supervised training 과 근접 혹은 더 높은 성능을 낼 수 있음을 보였다.

zero shot clip과 fully supervised linear probing resnet50 의 성능 비교

위 표에서 benchmark로 사용된 성능은 다음과 같다.

  • model: ResNet-50 trained with ImageNet (checkpoint released in by the author of ResNet)
  • fix the backbone and train only the linear layer with full dataset

여기서 놀라운 점은 CLIP 은 각각의 dataset 에 특화된 label을 학습에 사용하지 않았다는 점 이다.

Prompt Engineering

CLIP에서 zero shot learning 을 하기 위해서 test set 에 존재하는 각각의 class 에 대한 text prompt 를 제공해야한다. 예를 들면 dog, cat, monkey 와 같은 직접적인 class label을 사용해도 좋지만 CLIP의 학습에 사용된 데이터가 full sentence 이기 때문에 full sentence로 제공하여 주면 성능이 더 좋다고 한다.

예를 들어 dog 를 a photo of dog. 처럼 decorate 하여 prompt로 사용한다. 본 논문에서는 약 80가지의 prompt 만들어 결과값을 ensemble 하여 사용하였고 이 효과가 ImageNet 에서 약 3.5% 가 있었다고 한다.

Prompt Engineering 의 한 예

Zero shot vs Few shot

Zero shot vs Few shot

본 논문에서는 zero shot 과 few shot의 성능 차이를 보여준다. Zero shot 은 위에서 설명한 바와 같이 prompt를 넣어서 가장 높은 similarity 를 가지는 prompt를 보는 것 이며 few shot 은 dataset 에서 제공하는 레이블을 사용하여 학습하되 각각의 class 당 적게는 1장, 많게는 16장 정도의 적은 수의 sample을 사용하여 학습한 결과이다.

위 표에서 알 수 있다시피, CLIP은 다른 모델 및 학습방식보다 few shot learning 에 더 뛰어난 것으로 볼 수 있다. 또한 재미있는 부분은 zero shot learning 이 few shot 보다 더 잘 작동하는 구간이 있는데, 이는 few shot 을 위해서는 새로운 linear layer를 학습해야 하고, zero shot은 추가적인 학습이 필요가 없기 때문에 sample이 적을 때는 zero shot이 더 좋은 성능을 보인다.

Conclusion

해당 논문은 인터넷에서 비교적 쉽게 얻을 수 있는 image-text pair 데이터를 사용하여 zero shot learning의 성능이 fully supervised linear probing 모델과 비슷도록 학습 할 수 있음을 보였다. 이는 각각의 image-text pair를 예측하는 task가 가진 가능성을 보여준다고 보인다. 2020년은 InfoNCE loss를 통한 contrastive self supervised learning이 많이 발전한 한해 였다면, CLIP은 대량의 자료가 있을때 InfoNCE loss의 가능성을 더욱 보여주는 듯 하다.

또한 prompt engineering 을 통한 zero shot learning 이 보여주는 높은 성능은 해당 모델이 표현하고 있는 representation 이 multi-modal 하다는 것을 의미한다. 이와 관련된 후속 연구가 이미 진행되고 있으니 관심이 있다면 https://openai.com/blog/multimodal-neurons/ 도 참고하면 좋겠다.

--

--