본문 바로가기
Project/실전문제연구단

[실전문제연구단] Siamese Network, Contrastive Loss, Triplet Loss

by na1-4an 2024. 1. 11.

드디어 연구 주제를 정하고 본격 연구에 들어가게 되었습니다!

그래서 연구에 필요한 개념인 "Siamese Network"에 대해 기록해보도록 하겠습니다.

 

Few-shot learning을 공부하다가 알게된 Siamese Network!

(샴 네트워크라고 부르겠음)


샴 네트워크는 샴 쌍둥이로부터 착안된 개념.

샴 쌍둥이는 신체의 일부를 공유하는데,

샴 네트워크 역시 weight를 공유해서 그 이름을 가지게 됨.

 

2015년 논문 " Siamese Neural Networks for One-shot Image Recognition "에서 처음 제시됨.

https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf

위의 그림처럼 두 그림으로 이루어진 한 pair와 둘의 same, different를 data와 label로 가져 학습을 함!

보통 이미지의 클래스를 분류할 때 few-shot learning과 함께 사용됨.

전체적인 구조는 아래와 같음.

<training 과정>

  • 입력 데이터 쌍과, 정답 라벨을 준비.(두 데이터가 같은 클래스면1, 다르면 0)
  • 가중치를 공유하는 CNN을 통과시켜 임베딩 값 얻음.(Convolutional Siamese Net)
  • 두 임베딩 사이 거리를 계산.(L1, L2 norm 등 사용)
  • 두 입력의 클래스가 같으면 거리를 가깝게, 다르면 멀게하는 Constrastive loss 사용

Contrastive Loss

 

D는 x1과 x2의 거리, y는 x1, x2가 같은 클래스면 1, 아니면 0.

 

만약 같은 클래스면 1/2*D^2이 loss가 되는 것이고

 

만약 다른 클래스면 거리가 m(우리가 생각하는 다른 클래스 간의 거리) 이상이 되도록 학습한다는 것임.

만약 m 보다 크면 이미 많이 떨어져 있는 것이니, 업데이트 할 이유가 없어서 안 해도 됨.

만약 m보다 작으면 m-D^2이 loss가 되는 것임.

 

Contrastive loss의 한계점

  • m 값은 사람이 정해줘야하는 하이퍼 파라미터 값임.
  • 여러번 시도 없이는 최적의 m을 정하기 어려움.
  • distance가 m보다 작은 모든경우에 결국에는 모든 embedding 거리가 m으로 수렴해 정보를 잃어버릴 수 있음,

이를 보완하기 위해 FaceNet이 제안됨.


FaceNet: 샴 네트워크가 두 개의 입력 간의 유사도를 비교했다면,

FaceNet은 3개의 입력 간의 유사도를 비교하는 모델임.

FaceNet에는 Anchor data, Positive data, Negative data 세 가지가 입력됨.

 

<샴 네트워크와의 차이점>

샴 네트워크와 다른 점은 샴 네트워크는 유사도 즉, distance를 직접적으로 구했지만,

FaceNet은 임베딩만하여 Anchor와 나머지 두 이미지와의 거리를 통해 상대적 유사도를 알 수 있음.


Triplet Loss는 

Positive 클래스와 Negative 클래스 간의 상대적인 거리를 고려함.

D(A,P) + m > D(A,N) 이면 D(A,P)는 작아지도록, D(A,N)은 커지도록 update하고

D(A,P) + m < D(A,N) 이면 가중치 update 안 함, 

 


Reference

https://wikidocs.net/150813

https://wikidocs.net/151187

https://wikidocs.net/152387

https://wikidocs.net/151187

https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf