관심 있는 NLP 논문을 읽어보고 간단히 정리했습니다.
혹시 부족하거나 잘못된 내용이 있다면 댓글 부탁드립니다 🙇♂️
[OpenAI]
- 당시 computer vision system의 SoTA 모델은 사전 정의된 object 카테고리를 예측하도록 학습됨
- 이미지와 어울리는 설명(caption)을 예측하도록 하는 사전학습 방식을 제안
- fully supervised baseline과 비교했을 때, dataset specific training을 할 필요가 없음 (zero-shot 성능을 강조)
출처 : https://arxiv.org/abs/2103.00020
Introduction
논문이 제출되었던 2021년 초라면 아직 챗지피티도 나오기 한참 전이니..
당시의 CV 모델들은 주로 사람이 labeling 한 데이터셋을 바탕으로 supervised 방식의 학습을 하는 것이 일반적이었다고 합니다.
사실 초대량의 데이터셋으로 비지도학습을 주로 하게 된 것은 그렇게 오래되지 않았죠.
NLP에서는 GPT, BERT가 labeling이 필요하지 않은 사전학습 방식을 제안하면서 (각각 Next token prediction, Masked language modeling), 사전학습과 fine-tuning의 기조가 널리 퍼져 나가게 된 것이니까요.
본 논문에서는 multi-modal 분야에서 이와 같이 엄청난 사이즈의 데이터셋에 대한 사전학습 방식을 제안한 것이 key point라고 볼 수 있겠습니다.
즉, 데이터셋에 대해서 사람이 직접 labeling 하는 공수를 덜어낼 수 있게 되었다는 것이죠.
이때의 사전학습 방식에 'contrastive' 한 내용이 포함되어 있기 때문에 CLIP이라고 잘 알려지게 되었습니다.
(Contrastive Language-Image Pretraining)
한가지 더 주목할만한 점은 zero-shot 성능입니다.
이전에는 태스크에 특화된 데이터셋을 준비하고 이것으로 supervised 학습한 모델이 주를 이루었는데, CLIP은 사전학습 후의 zero-shot 성능이 뛰어나다는 특징을 보였습니다.
물론 논문에서도 이런 결과물의 근본적인 한계를 언급하고는 있지만, language-image를 함께 사전학습하는 방식을 제안했고, 이것의 scalability가 입증되어 지금도 널리 쓰이는 방식이라는 점이 핵심인 것 같습니다.
Approach
Natural Language Supervision
자연어에 포함된 supervision으로부터 perception을 배운다는 것이 본 개념의 핵심이라고 합니다.
자연어를 정답의 signal로 사용함으로써 얻는 장점은 데이터를 확보하기가 아주 편리하다는 것입니다.
이미지 데이터에 annotation을 하는 상황을 생각해 본다면, 하나의 이미지가 여러 클래스 중 어디에 해당하는지를 사람이 직접 골라주어야 합니다.
또한 단순히 언어에 대한 representation만을 학습하는 것이 아니고, 이렇게 획득한 언어에 대한 representation을 바탕으로 다양한 태스크에 대해 zero-shot이 가능해진다는 것도 자연어 데이터로 학습하는 것의 장점이라고 볼 수 있습니다.
Creating a Sufficiently Large Dataset
이미지 데이터셋 중에는 많은 사람의 공수가 들어간 MS-COCO, Visual Genome과 같은 데이터셋들이 있습니다.
두 데이터셋은 고퀄리티의 학습용 데이터를 10만 장이나 포함하고 있지만 논문이 작성되는 시점에서만 생각을 하더라도 최신 CV용 데이터셋에 비하면 너무나도 귀여운 사이즈라고 합니다.
극단적인 경우엔 3.5 billion 개에 달하는 이미지를 포함한 데이터셋도 존재한다고 하네요.
그럼에도 불구하고 이와 관련된 메타데이터가 적은 것이 문제점이라고 합니다.
즉, tilte 또는 description에 해당하는 메타데이터가 존재하지 않아서 multi-modal 태스크에서 활용할 데이터로서는 적합하지 않다는 것이죠.
그래서 저자는 인터넷 상에서 publicly available 데이터들을 활용하여 직접 400M 개에 달하는 (image, text) pair 데이터셋을 구축했다고 합니다.
데이터의 다양성을 보존하기 위해서 500K 개의 query로 구성이 되어 있고, class는 20K 개에 달한다고 합니다.
여기에 사용된 텍스트 데이터의 양은 GPT-2 모델을 학습할 때 사용한 것과 유사한 수준이라고 합니다.
Selecting an Efficient Pre-Training Method
저자는 처음에 image CNN과 text transformer를 scratch부터 joint training 한 VirTex의 방식을 근간으로 삼고자 했다고 밝힙니다.
그러나 이런 방식은 ResNet-50 image encoder 모델을 학습할 때에 비해 3배나 느리면서 2배나 많은 컴퓨팅 자원을 소모하게 됩니다.
당시를 기준으로 한 최근 연구 중에는 description, comment 등 이미지와 관련된 텍스트에 대해 contrastive representation learning을 수행하는 것이 모델의 입장에서 더 나은 representation을 획득하는 데 기여한다는 것을 확인하는 연구들이 존재했다고 합니다.
그러나 한 가지 치명적인 문제점은 이것 역시 너무 많은 연산 자원을 필요로 한다는 점이었고요.
그래서 본 논문에서는 텍스트와 이미지를 같이 볼 때, 어떤 단어였는지까지 정확하게 mapping 하는 것이 아니라, 단순히 해당 텍스트와 이미지가 관련된 것인지만 확인하는 방식으로 학습 목표를 수정했습니다.
이를 통해 ImageNet에 대한 zero-shot 퍼포먼스의 효율성을 4배나 개선할 수 있었다고 합니다.
N개의 (image, text) 쌍이 주어지면, CLIP은 N x N 개의 쌍에 대해 학습하게 됩니다.
N개의 올바른 쌍에 대해서는 image/text embedding vector 간의 cosine similarity를 최대화하고, 나머지 $N^2-N$개의 틀린 쌍에 대해서는 유사도를 최소화하는 방식으로요.
이러한 방식의 batch construction technique & objective는 본 연구가 최초였다고 주장하네요.
위에서 반복적으로 언급했던 것처럼, 데이터셋의 크기를 키우는 것에 집중을 했기 때문에, 과적합에 대한 우려는 사실상 없었다고 봐도 좋을 것 같습니다.
약간 흥미로운 특징은 image encoder를 초기화할 때 기학습된 가중치를 사용하지 않고, 또 non-linear projection을 사용하지 않았다는 점입니다.
이외에도 약간의 디테일들이 논문에 제시되어 있습니다.
Choosing and Scaling a Model
이미지 encoder에 대해서는 ResNet-50과 Vision Transformer (ViT), 두 개의 아키텍처를 다루고 있습니다.
전자는 global average pooling layer를 attention pooling 메커니즘으로 교체했다는 특징이 있습니다.
텍스트 encoder에 대해서는 Transformer를 사용했고, 연산 효율을 위해 최대 시퀀시 길이는 76으로 제한합니다.
우리가 흔히 알고 있는 Transformer 아키텍쳐를 거의 그대로 사용했다고 볼 수 있습니다.
이후의 내용에서는 다양한 실험 세팅 및 결과, 이에 대한 해석을 다루고 있습니다.
그것들을 모두 다루기에는 양이 너무 많고..
개인적으로는 멀티모달 관련해서 항상 언급되는 CLIP이 어떤 내용인지 알고 싶어서 읽고 공부한 내용을 정리한 포스팅이라 추가적인 내용을 언급하지는 않겠습니다.
벤치마크 등에 대한 실험 결과나 모델 효율성 등에 대한 내용이 궁금하신 분들은 논문을 직접 읽어보시길 추천드립니다!