https://arxiv.org/abs/1908.05832
Transferable Contrastive Network for generalized Zero-Shot Learning
Zero-Shot Learning에 Contrastive 개념을 적용한 논문이다.
위 그림을 보면 논문의 Motivation을 알 것 같다. Contrastive를 도입하여 얻고자 하는 성질은 (1) discriminative properfy, (2) Transferable property이다.
(1) Information Fusion
하나의 이미지를 여러 class descriptor와 contrast 하기 위하여 information을 fuse한다. 이미지로부터 CNN이 추출한 feature와 semantic information으로부터 MLP로 추출한 feature를 element-wise product하여 information을 fuse 한다.
z가 존재하는 space는 latent space로 생각해볼 수 있다.
(2) contrastive learning
z를 h(contrastive learning function)에 전달하여 contrastive value를 얻는다.
i image에 대한 모든 j class의 contrastive value를 구한다.
이제 loss를 정의해야하는데,
i image에 해당하는 class는 contrastive value가 1, 다른 class는 contrastive value가 0이 되도록 학습한다.
그러면 이제 seen class를 잘 구분할 수 있는 discriminative property를 얻는다.
하지만 ZSL은 이 knowledge를 unseen class로 transfer 해야 한다. seen class와 unseen class의 similarity를 활용한다.
seen class와 unseen이 약간의 similarity가 존재하면 그 정도를 기준으로 loss를 가한다. 즉 seen image로부터 추출한 contrastive value가 unseen class에 대해서도 값을 갖게 된다.
최종 로스는 다음과 같다.
그러면 seen과 unseen의 similarity를 어떻게 정의해야 할까?? 논문은 다음과 같이 정의한다.
봐도 잘 모르겠다. 왜 이렇게 했지? sk는 벡터인가? k class와 j class 사이의 similarity를 정의해줘야하는데 위 식은 하나의 스칼라를 정의해주는거 아닌가? k class에 대한 semantic 정보에서 j class에 대한 semantic 정보와 k j 사이 similarity 곱한거를 빼주는건데...... summation 기호가 들어가 있어서 헷갈린다. 그러면 스칼라 정보가 담기는거 아닌가?? 스칼라 정보를 어디서 활용하지? 위 로스 함수를 보면 s는 벡터 혹은 matrix가 되어야 하는거 같은데.. 잘 모르겠당 ㅎㅎ
이제 이렇게 학습된 모델은 contrastive value를 기준으로 classity를 수행한다.
그리고 논문 중간에 h network를 추가해서 z를 contrastive value로 전환하는데, 이 이유를 생각해보았다. z는 벡터 값이므로 class와 contrastive learning을 하려면 곧바로 semantic information과 contrast를 수행해야한다. 즉 스칼라값이 아니기 때문에 논문에서 제안하는 cross entropy loss를 사용할 수 없다. 만약 둘 사이의 similarity를 softmax로 전달해준다면 contrastive learning이 가능하지 않을까 싶다.
결과는 잘 나왔다.