DSAIL@SKKU
Weekly Seminar
2022. 06. 30.
놀랍게도 zero-shot 셋팅에서 훈련한 하나의 classifier를 서로 다른 데이터셋에 적용해본 예시다
그리고 이것이 오늘 소개할 OpenAI의 2021년 논문 "Learning transferable visual models from natural language supervision"에서 소개된 방법론으로, 보통 CLIP라고 부른다
TD;LR: 대량의 웹데이터를 사전학습해 제로샷 셋팅에서 다양한 물체인식 문제를 정확하고 강건하게 풀수 있는 모델. 이미지와 텍스트 쌍을 모두 입력값으로 받아 두개의 유사도를 잘학습하도록 모델을 디자인했다.
Could scalable pre-training methods which learn directly from web text result in a similar breakthrough in computer vision?
This is likely because demonstrated performance on common benchmarks is much lower than alternative approaches.
Point 1: Natural language supervision
At the core of our approach is the idea of learning percep- tion from supervision contained in natural language.
Point 2: Multimodal learning
이미지와 텍스트를 잘 연결하는 visual representation을 만들기 위해서 자연어를 잘 써보자고 했는데, 그렇다면 어떻게 자연어를 이용할 수 있을까?
우선, 이전 연구(VirTex) 처럼 이미지 -------> 이미지 캡션
의 모델(image-to-caption language model)을 시도해봤는데, 스케일링하기가 힘들어서 제외
Vision Transformer도 사용해봤는데, 제로샷 셋팅에서 CLIP의 방법론 보다 낮았다. 아래 그림의 파란색 라인을 살펴보자
연구팀은 위의 두 방법이 잘 작동하지 않는 이유에 대해 이미지와 등장하는 적확한 단어를 맞추려고 했기때문이라고 설명한다. 사람이 이미지에 대해 굉장히 다양한 텍스트를 만들어 내기 때문에 이 테스크는 굉장히 어려운 테스크라 할 수 있다
그래서 연구팀은 아래의 모델 아키텍쳐처럼 전체 텍스트를 모두 입력데이터로 사용한다. 그림의 왼쪽 상단을 살펴보자
텍스트와 이미지의 관계를 잘 이해할 수 있는 representation을 만들기 위해 contrastive representation learning을 사용한다. 이 기법은 representation이 데이터들 간의 유사도를 잘 학습하도록 하는 방법이고, 선행연구들에서 이러한 방법이 visual representation에 효과적이라는 것이 소개되기도 했다
위의 그림의 파란색🟦 박스에 주목해보자. 입력으로 넣은 이미지🟩-텍스트🟪는 각자의 인코더를 지나서 multi-modal embedding 안에서 만나게 된다
이렇게 쌍으로 주어진 이미지-텍스트가 가장 유사한 조합이라고 가정하고, 모델은 이미지🟩-텍스트🟪의 각 피쳐의 유사도가 높아지는 방향으로 학습을 진행한다(그리고 쌍이 아닌 애들의 유사도는 낮아지는 식으로). 여기서는 유사도를 cosine similarity로 정의했고, 이렇게 계산된 유사도는 softmax를 거친다. 아래 코드로 보면 더욱 더 직관적으로 확인할 수 있다
그렇담 여기서 Loss Function은 어떻게 설정할까? 연구팀은 이미지 관점과 텍스트 관점을 모두 볼 수 있도록 두개의 손실함수를 사용했다. 여기서 이미지 관점과 텍스트 관점이란 간단하게 multi-modal embedding의 행(이미지🟩)-열(텍스트🟪)을 의미한다
Point 3: Zero-shot transfer
A photo of a {object}"
형태로 바꿔주는거고, 모델은 주어진 이미지와 제일 유사한 텍스트를 선택한다
위의 과정을 코드로 표현하면 다음과 같다
text_descriptions = [f"This is a photo of a {label}" for label in cifar100.classes]
text_tokens = clip.tokenize(text_descriptions).cuda()
with torch.no_grad():
text_features = model.encode_text(text_tokens).float()
text_features /= text_features.norm(dim=-1, keepdim=True)
text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
top_probs, top_labels = text_probs.cpu().topk(5, dim=-1)
y = np.arange(top_probs.shape[-1])
사전학습에 사용한 데이터: 웹검색을 통해 얻은 4억개의 이미지-텍스트 쌍으로 이뤄진 데이터셋(WIT for WebImageText)을 사용
Image Encoder: ResNet 계열, Vision Transformer (ViT)를 모두 실험했다
Text Encoder: GPT-2에서 사용한 변형된 Transformer을 사용했고, 마지막 토큰([EOS]
)을 텍스트 피쳐로 이용했다
Experiment Design: 여태까지 모델을 설계한 배경 중 하나가 다양한 테스크에 대응하는 모델을 만들기 위한 것이였으므로, 굉장히 다양한 도메인의 데이터셋을 실험했다. 아래는 실험중에서 재미있는 결과들(summerized by this video)만 골라서 정리해보겠다.
Effect of Prompt engineering
A photo of a {label}"🟦
대신 A photo of a {label}, a type of pet"🟩
로 입력 텍스트를 살짝 바꾸면 더 빠르고, 정확한 결과를 얻을 수 있다는 점이 공유됐다.Zero-shot CLIP vs. Fully supervised baseline:
Alec learned much more about flower species and German traffic signs over the course of this project than he originally antic- ipated.
Few-shot learning
Scale up!
vs. Other Baseline
Robustness
요즘 많은 컨퍼런스들에서 이 모델의 단편적인 컨트리뷰션뿐만 아니라 연구실 밖, 커뮤니티 밖에서 좀 더 사회적이고 넓은 문제들을 논의하는 걸 요구하고 있는데, OpenAI는 그러한 논의들을 어떻게 전개하는지 볼 수 있는 좋은 참고자료다.
연구팀은 젠더/인종의 얼굴을 분류하는 문제로 Bias 이슈를 다뤘고, 제로샷이 용이하다는 점을 들어서 유명인의 얼굴을 분류하는 문제로 surveillance 이슈를 다루고 있다.