Super Kawaii Cute Cat Kaoani Triplet Loss 이해하기(개념, 수식, 주의사항)

수업정리/딥러닝 이론

Triplet Loss 이해하기(개념, 수식, 주의사항)

치킨고양이짱아 2024. 5. 19. 18:48
728x90
728x90

Triplet Loss

Triplet Loss는 딥러닝 기반의 임베딩 학습에서 자주 사용되는 손실 함수이다. 해당 손실 함수를 사용하면, 주어진 데이터들의 관계를 고려하여 임베딩 공간에서 특정한 거리를 유지하도록 학습하는데 도움을 준다. Triplet Loss는 이름에서도 추측할 수 있듯이 세가지 샘플(triplet set)로 구성된 입력 데이터(Anchor, Postive, Negative)를 사용하여 정의된다.

 

Triplet Loss의 구성요소

1) Anchor(A): 기준이 되는 데이터 포인트

2) Postive(P): Anchor와 같은 클래스에 속하는 데이터 포인트

3) Negative(N):Anchor과 다른 클래스에 속하는 데이터 포인트

 

Triplet Loss의 목표

Triplet Loss의 주요 목표는 임베딩 공간에서 다음 두가지 조건을 만족하도록 하는 것이다.

1) Postive 샘플이 Anchor 샘플과 더 가깝도록 학습, 즉 임베딩 공간에서 Anchor와 Positive 간의 거리가 작도록 학습
2) Negative 샘플이 Anchor 샘플과 더 멀도록 학습, 즉 임베딩 공간에서 Anchor과 Negative 간의 거리가 멀도록 학습

두가지 조건을 만족하도록 학습하여 -> 모델이 같은 클래스의 샘플은 가깝게, 다른 클래스의 샘플은 멀도록 학습시킬 수 있다.

Embedding Space for train data using PCA in Tensorboard.

 

Triplet Loss 수식

  • f는 임베딩 함수이다.
  • 는 마진(margin)값으로, Postive 샘플과 Negative 샘플 간의 최소 거리 차이를 유지하기 위해 사용된다.

수식의 의미를 살펴보면...

Anchor-Postive 쌍과 Anchor-Negative 쌍의 거리를 구한 뒤, 두 거리의 차이를 구한다. 마진

 

Triplet Loss를 사용할 때의 주의점

1. Margin 값 설정 & 샘플링

Triplet loss를 사용할 때는 anchor, postive, negatvie의 3쌍이 필요한데, 이 3개의 쌍을 어떻게 선택하느냐에 따라 학습의 안정성과 성능이 크게 달라질 수 있다. ||f(A) - f(P)||가 너무 작은 쌍이 dataset의 대부분을 이룰 경우, 해당 데이터로부터 배우는 정보량이 너무 적을 수 있다. 반대로 ||f(A) - f(N)||가 이미

1) easy triplets: ||f(A) - f(N)|| > ||f(A) - f(P)|| +
hard triplets: ||f(A) - f(N)|| < ||f(A) - f(P)||
모델이 구분하기 어려운 삼중항으로, 이 경우 학습에 큰 도움이 됨.
하지만 너무 어려운 삼중항은 모델이 수렴하는 것을 방해할 수 있음
3) semi-hard triplets: ||f(A) - f(P)|| < ||f(A) - f(N)|| < ||f(A) - f(P)|| + anchor와 postive의 거리가 anchor와 negatvie 거리보다는 작지만, 여전히 마진 내에 있는 삼중항이다.
이런 삼중항은 학습에 매우 유용하다.

즉, 너무 작은 마진은 학습을 방해할 수 있고, 너무 큰 마진은 모델이 유의미한 삼중항을 찾기 어렵게 만든다. 따라서 적절한 마진 값을 찾는 것이 중요하다.

2. dataset 내의 클래스 균형

데이터셋 내에 클래스의 불균형은 triplet loss 학습에 부정적인 영향을 미칠 수 있다. 따라서 균형잡힌 데이터셋을 사용하는 것이 좋으며, 그렇지 않다면 오버샘플링이나 언더 샘플링을 통해 데이터셋을 조정해야한다.

3. 정규화

임베딩 벡터의 정규화는 triplet loss의 학습에 도움이 될 수 있다. L2 정규화를 통해 모든 임베딩 벡터의 길이를 1로 맞추면, 임베딩 공간에서의 거리를 비교할 때 일관성을 유지할 수 있다.

728x90
728x90