논문명: RETRIEVAL-ENHANCED CONTRASTIVE VISION-TEXT MODELS
논문 링크: https://arxiv.org/abs/2306.07196
멀티모달? 섬세하게 '비전' 과 '텍스트'를 연결하지 못해..
- 'car', 'road' 등의 일반적으로 자주 쓰이는 단어들과 이미지를 연결하는 것은 쉽다
- 하지만 세부적인 표현은 이해하지 못한다. 가령 자동차 브랜드, 생산 연도 등과 이미지/동영상을 연결하는 건 어렵다
- 이런 문제는 세부적인 차 분류할 때, zero-shot classification 성능이 떨어질 수 밖에 없다
서로 다른 모달리티를 호환시키는 건 난이도가 높아
- 하나의 모달리티, 가령 정보 검색처럼 쿼리와 문서가 모두 텍스트라서 단일 모달리티라면 호환하기 쉽다
- 이미지도 이미지끼리 하는 건 쉽다
- 하지만 서로 다른 모달리티인 멀티모달을 호환하는 것은 매우 어렵다
이미지는 은유적으로 풍부하게 표현하지만 텍스트는 아니야
While every image is metaphorically valued at a thousand words, it is often paired with a short, sometimes noisy, text that neither exclusively nor comprehensively describes it.
해결책: 모달리티의 약점을 역이용하자
: 같은 모달리티끼리는 비슷한 걸 찾기 쉽지만, 다른 모달리티끼리 어렵다는 점을 역이용하자
비슷한 텍스트 찾는 법
- 검색할 땐, 같은 모달리티: '비슷한 텍스트를 찾고 싶은 텍스트와 연결된 이미지'와 비슷한 이미지 K개를 찾는다.
- 가져올 땐, 다른 모달리티: 그때 그 이미지들과 연결된 텍스트의 임베딩 K개를 가져온다.
- 즉, 모달리티를 교차해서 검색하는 것이 아이디어의 핵심
모든 경우에 대해서도 실험한다
- 가장 왼쪽에 있는 그림이 본 논문에서 제시한 방법이다. 검색할 땐, 같은 모달리티끼리 검색한다. 그리고 결과를 가져올 땐, 다른 모달리티를 가져온다.
- 나머지 그림들은 검색과 반환시의 경우의 수를 모두 표현한 것이다. 2 X 2 = 4가지 맞다.
잠깐, 비슷한 데이터를 검색한 건 알겠어. 어떻게 학습하는데?
- 이건 워낙 유명한 contrastive loss 라서 따로 설명은 안하겠다.
- 이 손실 함수를 사용한다.
- 이 손실함수를 3번 사용한다는 점을 알면 좋다.
- 그렇다면, V와 T가 자세히 뭔지만 알면 된다.
- 일단 외부 메모리는 원래 데이터셋 말고 비슷한 데이터를 검색할 수 있는 외부 지식을 의미한다.
Cross-Modal Search
- v(이미지)를 넣으면, 이미지와 연결된 텍스트를 통해서 외부 메모리 M에서 K개의 텍스트 임베딩을 반환해준다.
- 이건 본 논문에서 사용하는 방식이 아님
Uni-Modal Search
- 이미지를 입력하면, 비슷한 이미지 K개를 찾는다. 그 후, 그 이미지들과 연관된 K개의 텍스트 임베딩을 반환한다.
- 이게 본 논문에서 사용하는 방식이다.
- 왜 갑자기 수식을 쭈욱 설명했냐면, 이 기호를 설명하기 위해서다.
- 기존 이미지와 검색 결과로 반환한 K개의 임베딩을 단순히 평균내서 사용하지 않는다. 평균내서 실험했더니 성능이 좋지 않았다고 한다. 직관적으로 볼 때, 모델이 임베딩 평균에 대해 공부한 적이 없기 때문이라고 한다.
- 그래서 fusion model 을 사용한다. one-layer multi-head self-attention transformer encoders 이다.
- CLIP-32 기준, 2%의 파라미터만 추가되니 부담이 없다고 한다. 파라미터개수가 3.14M 라고 한다. 단, 공유해서 쓰지 않고 이미지용, 텍스트용 따로 있다.
학습 세부 사항
- CLIP과 같은 pretrained model 은 학습하지 않는다. 오직 Fusion Model 만 학습한다고 한다.
- 학습 데이터셋: Conceptual Captions (CC 12M)
- 외부 지식 데이터셋: subset of WebLI (Chen et al., 2023) containing 1B image-text pairs 을 사용한다. 여기서 subset, 즉 일부만 사용한다는 건 일부 제거해서 쓴다는 것이다. 테스트 이미지랑 비슷한 데이터는 제거했다는데, 어떻게 제거했고 얼마나 제거했는지에 대해 나와있지 않다.
평가데이터셋
- Cars: 세세하게 자동차를 구분해야 하는 데이터셋
- CUB: 세세하게 새를 분류해야 하는 데이터셋
실험 결과는?
- Zero-shot transfer to image classification 성능이다
- fusion model 을 추가한 결과, 성능이 오르는 걸 볼 수 있다
- 특히 LiT-L 16L은 검색 대상인 WebLI로 사전학습되었는데도 불구하고 성능이 올랐다는 점이 인상 깊다
- Open-domain visual entity recognition (OVEN) benchmark (Hu et al., 2023), containing 729K test images possibly belonging to 6M entity candidates 로 평가하였음
- 다양한 방식으로 했더니 성능이 다 하락한다
- 평균 임베딩은 성능이 박살났다
- fusion model 을 하나씩 빼본 성능이다
- 혹은 fusion model 은 학습하되, 추론할 때만 빼보았다
- 그 결과, 일단 둘 다 학습하는 것은 좋았다.
- 그러나 둘 다 추론할 때 사용하는 것이 가장 좋을 수도 있고 아닐 수도 있다.
- 그냥 CLIP-style 로 학습하니까 오히려 성능이 떨어진다. 그 이유로는 CLIP이 이미 광범화하게 잘 학습되었는데, 그 구조를 건들여서인 것 같다.
- 하지만 RECO, 여기서 제안한 방법을 사용하니 성능이 눈에 띄게 오른다
- 제대로 표를 이해는 못했는데, 학습할 때 그렇게 많은 메모리를 안 쓴다고 한다
- uni-modal search 가 cross-modal search 보다 낫다고 하네요 허허
한계점
- 추론할 때마다 이렇게 거대한 외부 메모리에서 검색 결과를 가져오는 게 쉽지 않다
- KNN 알고리즘에 의존한다