1. Introduction
기존의 방법들은 pretrained model을 가져와서 fine-tuning하는 방법을 많이 이용합니다. fine-tuning의 문제점은 모델이 커질 수록, 계산이 매우 많아집니다. 그리고 source domain에 overfitting 됩니다.
이 그래프를 보면, fine tuning을 하게 되면 학습하는 parameter가 엄청나게 많은 것을 알 수 있습니다.
일반적으로, preatrinaed model은 gerneralization ability를 어느 정도는 가지고 있고, specific한 domain의 성능은 좋습니다.
세로는 모델들이고 가로는 각 도메인과 클래스에 대한 성능입니다. 표는 도메인,클래스 간의 KL-divergence입니다.
이러한 문제를 해결하기 위해 논문 저자들은 finetuning을 하지 않는 방법을 소개합니다.
2. Method
K개의 pretrained model이 있고, 이들은 같은 데이터 셋으로 학습을 했습니다.
adapter는 pretrained model의 label space를 현재 task의 label space로 바꿔주는 역할을 합니다.
즉, pretrained model이 C0개의 class에 대한 model이였다면, 이를 C개의 class에 대해 예측하도록 바꿔줍니다.
앞에서 pretrained model은 각자만의 specialty를 가지고 있습니다. 어떤 model이 해당 sample에 잘 맞는지 학습해야합니다.
c_i의 모양은 1 x d_v이고, C_m의 모양은 K x d_v 입니다.
이 두 개를 matrix 곱을 해서, score를 구합니다.
W는 k x k 입니다. layer라고 생각하면 됩니다.
layer를 통과한 후에, activation function을 적용해주고, softmax를 취해줍니다.
weight을 결과값에 곱해줌으로써, label을 예측합니다.
이는 적합한 모델에 좀 더 가중치를 주도록 하는 loss function입니다. 쉬운 식입니다.
label space adapter 학습하는 부분입니다.
classifier 학습하는 부분입니다.
3. Experiment
model pool-A는 imagenet으로 학습한 모델 15개 이용합니다.
model pool-B는 앞의 모델 15개와 YFCC100M 데이터셋으로 학습시킨 ViT 16, 32를 추가해서 총 17개나 이용합니다.
전 모델을 엄청나게 많이 이용하는 점이 현실적인 문제에서는 적합하지 않다고 생각합니다.
실제로 learnable parameter가 적어서 학습속도는 엄청나게 빠릅니다. 하지만 inference 시간은 좀 긴 편입니다. 그 이유는 여러 개의 pretrain model을 이용하기 때문이라고 전 생각합니다. 실제 컴퓨터 사양에 좀 영향을 많이 받을 것 같습니다.