기존 SOTA Computer vision 시스템의 문제점은 고정된 집합의, 미리 지정한 object category에 대해서만 예측 을 수행하도록 학습했습니다.
고정된 집합만 학습하기 때문에 일반화가 떨어지고 데이터를 모으기 힘들게됩니다.
CLIP : Contrastive Language–Image Pre-training
CLIP의 목적은 더 나은 일반화 성능을 갖는 pre-trained 모델을 만들기 위함입니다. 기존 Vision의 pre-training 문제는 classification이였습니다. 이를 위해 ImageNet이나 JFT 데이터셋 등 큰 규모의 데이터셋을 활용해 큰 규모의 모델을 미리 학습시켰습니다. 그러나 classification만으로는 일반화된 모델을 생성하기 어렵습니다.
기존 분류 모델을 학습시키려면, 정해진 Label에 대해서 0,1로 이루어진 행렬을 만들어서 학습시키는데, 이를 one-hot encoding
이라고 합니다.
이를 활용하면 기존에 없던 label이 들어올 경우, 분류를 제대로 하지 못하는 문제점이 발생합니다.
이 때, Label 대신 텍스트를 통해서 더 광범위한 시각적 개념을 학습할 수 있는데요, CLIP은 인터넷에서 얻은 대규모 데이터셋을 이용하여, 이미지와 연관된 caption으로 pre-training을 진행합니다.
또한 자연어 지시문(reference)을 주면 zero-shot으로 모델을 downstream task에 적용할 수 있습니다.
기존 연구들은 대규모 텍스트 데이터를 모아 사전학습 후 파인튜닝하는 방식으로 자연어처리 분야에서 매우 뛰어난 성과를 얻었습니다. 그러나,이미지 분야에서는 CNN 기반 모델이 강한 면모를 보이기는 하지만, zero-shot learning에서는 매우 낮은 정확도를 보입니다.
제로샷 러닝이란?
제로샷 러닝(Zero-Shot Learning)
은 기계 학습의 한 분야로, 훈련 데이터에 없는 클래스(class)에 대해 예측을 수행하는 문제를 다루는 방법입니다. 일반적인 분류(classification) 문제와는 달리, 제로샷 러닝은 훈련 데이터에 없는 클래스에 대해서도 예측을 수행할 수 있습니다.
일반적인 분류 문제에서는 훈련 데이터에 포함된 클래스만을 인식하는 데 제한됩니다. 예를 들어, 개와 고양이를 분류하는 모델을 훈련시킨다면, 훈련 데이터에 포함된 개와 고양이만을 인식하고 다른 동물들에 대해서는 분류를 할 수 없습니다. 그러나 제로샷 러닝은 훈련 데이터에 없는 클래스에 대해서도 분류를 시도합니다.
1. 임베딩 공간(Embedding Space) : 제로샷 러닝에서는 클래스와 클래스 사이의 관계를 나타내는 임베딩 공간을 만듭니다. 이러한 임베딩 공간은 보통 고차원 벡터 공간으로 표현됩니다. 각 클래스는 이 공간에서 특정 위치에 매핑됩니다.
2. 클래스 설명(Class Description) : 각 클래스는 해당 클래스의 특징이나 특성을 설명하는 클래스 설명(class description)으로 표현됩니다. 이 클래스 설명은 텍스트로 제공될 수도 있고, 벡터 형태로 나타낼 수도 있습니다.
3. 훈련 데이터 : 제로샷 러닝은 훈련 데이터에 주어진 클래스들로부터 임베딩 공간을 학습합니다. 이렇게 학습된 임베딩 공간에서 클래스들의 위치를 파악하고 클래스 간의 관계를 이해합니다.
4. 제로샷 분류 : 학습된 임베딩 공간에서 훈련 데이터에 없는 새로운 클래스의 위치를 파악하고, 해당 클래스의 클래스 설명과 임베딩 공간을 이용하여 분류를 시도합니다.
제로샷 러닝은 실제 세계에서 흔히 발생하는 클래스 부족 문제(class scarcity problem)를 해결하는 데 도움이 됩니다. 예를 들어, 드문 동식물 종류의 분류나, 새로운 제품이나 개념에 대한 분류 등에서 유용하게 활용될 수 있습니다. 하지만 제로샷 러닝은 새로운 클래스의 분류가 기존 클래스와 관련된 정보를 바탕으로 이루어지므로, 임베딩 공간의 품질과 클래스 설명의 정확성이 매우 중요합니다.
CLIP은 자연어를 supervision으로 주어 학습합니다.(모델이 텍스트 데이터와 관련된 이미지 데이터를 함께 사용하면서 자연어의 지식을 지도 데이터로 활용한다는 것을 의미합니다. 즉, 모델이 텍스트-이미지 쌍을 보고 이들이 서로 어떤 관련성을 가지는지를 학습하게 됩니다.)
이는 기존의 많은 image dataset과는 달리 별도의 번거로운 labeling 작업이 필요 없다는 강력한 장점을 가지고 있습니다. 또한, 이미지에 더해 자연어까지 representation learning
을 수행할 수 있고, 다른 종류의 task로도 유연하게 zero-shot transfer이 가능하게됩니다.
기존의 데이터셋의 특징을 살펴보면 다음과 같습니다.
1. 기존의 MS-COCO, Visual Genome은 품질은 좋으나 그 양이 매우 적다는 점
2. YFCC100M은 매우 큰 데이터셋이지만 그 품질이 좀 들쑥날쑥하다는 점
CLIP에서는 WIT(WebImageText)
라고 명명하는 새로운 데이터셋을 만들었습니다. 이는 인터넷의 다양한 사이트에서 가져온 4억 개의 (image, text) 쌍으로 구성되어 있습니다.
1개의 batch는 N개의 (image, text) 쌍으로 구성되어있습니다.
N개의 쌍을 모든 i,j 에 대해서 비교하면 N개의 positive pair와 개의 negative pair를 얻을 수 있습니다.
image와 text를 하나의 공통된 space로 보낸 다음 positive pair에서의 유사도(cosine similarity)는 최대화하고 negative pair에서의 유사도는 최소화하도록 CE loss를 사용하여 학습을 진행합니다.
이와 같은 과정을 통해 CLIP은 multi-modal embedding space를 학습하게 됩니다.
아래 그림에서 파란색 부분이 (이미지, 해당 이미지와 연관된 텍스트)로 구성된 positive pair입니다.
Model 에는 2가지 Encoder 가 존재합니다.
Image encoder
: 2개의 architecture를 고려했습니다.
ResNet-50에서 약간 수정된 버전인 ResNet-D 버전을 사용합니다. Global Average Pooling을 Attention Pooling으로 대체하였다는 점이 특징입니다.
또한 ViT도 사용합니다. Layer Norm 추가 외에는 기존과 동일하게 사용하죠.
이미지 하나하나를 Image Encoder에 통과시키며, 이미지를 하나의 벡터값으로 표현합니다. 다음으로 추출된 벡터에 가중치 행렬을 한번 더 곱하고, L2-normalization을 수행하여 각 벡터들을 임베딩(embedding)을 진행합니다.
Text encoder
: 기존 Transformer를 사용했습니다.
max_length=76인데, 실제 구현체에서는 마지막 token을 고려하여 77로 설정되어있습니다.
여기서도 각 이미지를 설명하는 텍스트를 Text Encoder에 통과시킵니다. 이 때 텍스트 토큰 중 문장의 끝을 나타내는 [EOS] 토큰의 벡터값을 텍스트 전체의 벡터로 학습시킵니다. Encoder의 역할은 이미지, 텍스트로부터 각각의 특성벡터를 추출하는 역할을 수행합니다. 이미지와 마찬가지로 추출된 벡터에 가중치 행렬을 한번더 곱하고, L2-normalization을 수행하여 각 벡터들을 임베딩(embedding)을 진행합니다.
(이미지 분류 task의 경우) 이미지가 주어지면 데이터셋의 모든 class와의 (image, text) 쌍에 대해 유사도를 측정하고 가장 그럴듯한(probable) 쌍을 출력합니다.
구체적으로는 아래 그림과 같이, 각 class name을 "A photo of a {class}." 형식의 문장으로 바꾼 뒤, 주어진 이미지와 유사도를 모든 class에 대해 측정하는 방식을 활용합니다.