Learning Transferable Visual Models From Natural Language Supervision (CLIP) 정리
용어
- 발생한 쌍
- 학습 데이터 세트에 존재하는 (이미지, 설명문) 쌍.
풀어내는 문제
- 약한 지도 학습(weakly supervised learning)으로 vision backbone을 학습하는 문제
데이터 세트
- (이미지, 설명문) 쌍을 사용하여 vision backbone을 학습할 때, 일반적으로 MS-COCO, Visual Genome 그리고 YFCC100M 데이터 세트를 사용함
- MS-COCO와 Visual Genome의 설명문 품질은 우수하지만, 합쳐서 200,000개 정도의 이미지밖에 없음
- YFCC100M은 1억 개 정도의 이미지로 구성돼 있지만, 설명문의 품질이 떨어짐.
- 이미지의 제목, 태그 등의 메타 데이터가 포함된 데이터 세트임. 그렇기에 이를 설명문으로 사용해야 하는데, 제목이나 태그가 자동으로 생성된 무의미한 데이터인 경우도 종종 있음.
- 이를 해결하기 위해, 제목이나 설명이 자연어로 구성된 사진만 필터링하여, 1,500만 개의 사진만 사용함
- 웹에 공개된 (이미지, 설명문) 쌍을 추가로 수집함
- 크기: 4억 개의 (이미지, 설명문) 쌍
- 수집 방법: 50만 개의 질의어를 구성한 뒤 한 개의 질의어를 포함하는 설명문을 갖는 (이미지, 설명문) 쌍을 수집함
- 질의어 집합은 위키피디아 영문 문서에 최소 100번 이상 등장하는 단어로 구성함
- 질의어별로 최대 2만 개의 (이미지, 설명문) 쌍을 수집함
사전 학습 방법
- 초기에 시도한 방법
- 이미지 CNN과 텍스트 트랜스포머를 같이 학습. 이때, 학습 목표는 주어진 이미지의 설명문을 예측하는 것
- 이 방법으로도 좋은 특징을 학습하긴 함. 다만 표본 효율이 낮고 모델의 크기가 커야 함.
- 이유: 설명문을 정확히 예측하는 것은 너무 어려운 작업임. 이미지에 적합한 설명문이 유일하지 않을 수 있기 때문. 그렇기에 개별 단어를 예측하지 않고 설명문 전체를 예측하는 작업을 사용하는 것이 바람직할 수 있음.
- 최종적으로 사용한 방법
- 이미지 인코더와 텍스트 인코더를 동시에 학습함.
- 학습 목표: 발생한 (이미지, 설명문) 쌍의 이미지와 설명문 임베딩의 코사인 유사도를 최대화하고 발생하지 않은 (이미지, 설명문) 쌍의 코사인 유사도를 최소화.
- 손실 함수는 이 논문에 나오지 않고 인용한 논문에 나옴.
- 필자의 초기 생각: batch의 발생한 쌍의 코사인 유사도를 계산하고 발생하지 않은 쌍의 코사인 유사도에 -1을 곱해서 둘을 선형 결합할 줄 알았음. 생각과는 다르게 이렇게 multi-objective로 만들지 않았음.
- u,v를 각각 이미지 인코더와 텍스트 인코더라 하자. Image to text 손실 함수는 다음과 같이 정의된다.
- liu→v=−log∑k=1Nexp(<ui,vk>/τ)exp(<ui,vi>/τ)
- ui,vi는 각각 이미지 그리고 텍스트 임베딩임.
- 이는 그냥 log softmax이기에 이를 최소화하면, 발생한 쌍의 코사인 유사도는 증가하고, 그렇지 않은 쌍의 코사인 유사도는 감소함.
- Text to image 손실 함수는 다음과 같이 정의된다. liv→u=−log∑k=1Nexp(<vi,uk>/τ)exp(<vi,ui>/τ)
- N 개의 쌍으로 이루어진 batch에 대해 비용 함수는 다음과 같이 정의된다. L=N1∑i=1N(λliv→u+(1−λ)liu→v)
- 다만 아래 L′이 더 직관적으로 보이는데, 왜 위처럼 두 손실 함수를 정의하고 선형 결합하는지 의문.
- L′=N1∑i=1N(log∑k=1N∑i=1Nexp(<ui,vk>/τ)exp(<ui,vi>/τ))
- 식을 작성하고 나니 왜 L′을 사용하지 않는지 알 수 있었다. L′에는 분모에 발생한 쌍도 들어가기 때문에, 발생한 쌍의 코사인 유사도를 낮출 수도 있다.
- 이미지 인코더와 텍스트 인코더의 결괏값을 선형 변환한 후 코사인 유사도를 계산함.
- 이유: 선형 변환할 때와 비선형 변환할 때의 학습 효율이 달라지지 않음.
- 설명문을 문장으로 나누지 않음. 즉 복수의 문장으로 구성된 설명문도 단일 문장으로 구성된 설명문과 동일하게 인코더에 들어감.
- 이유: 학습 데이터 세트의 설명문 대부분이 단일 문장으로 구성되기에 특별히 나눌 필요가 없었다고 함.
- 소프트맥스의 온도(temperature)도 log-parameterized scalar로 보고 최적화함. 즉 하이퍼 파라미터가 아니기에 튜닝할 필요 없음.
- 한 가지 유의할 점으로, 너무 커지면 학습이 불안정해지는 것을 관찰하고 clipping 함.
- 이미지 변환으로 무작위 crop만 사용함.
- 이미지 인코더는 ResNet-50,101 EfficientNet 그리고 ViT-B/32, ViT-B/16 and a ViT-L/14을 시도함.
- 이 중에서 마지막 에폭동안 더 높은 해상도인 336px의 이미지로 학습한 ViT-L/14@336px이 제일 좋은 성능을 보임.
- 텍스트 인코더는 트랜스포머를 사용함.