본문 바로가기

AI

[딥러닝 시리즈] ③ Loss 함수 설계하기 (2)

딥러닝 시리즈는 딥러닝 기본 개념을 복습하고, 심화 내용을 스터디하기 위해 시작한 포스팅입니다.

딥러닝을 연구하시는 모두의 피드백과 의견, 소통을 환영합니다 :)  


2021.04.24 - [AI] - [딥러닝 시리즈] ① 딥러닝으로 풀고자 하는 문제에 대하여

2021.05.07 - [AI] - [딥러닝 시리즈] ② Loss 함수 설계하기 (1)

 

딥러닝에서 Loss 설계 시 성능 개선에 사용할 수 있는 기법들

 

 

 Label Smoothing

Hard Label

- 분류 분석에서 Ground Truth 라벨은 정답 클래스는 1, 나머지는 0의 값을 가지는 one-hot vector로 넣게 된다.

- 이렇게 모델에게 정답으로 입력하는 벡터가 one-hot vector인 것을 hard label이라고 부른다.

- hard label에 대한 해석은 직관적이다.

- 이는 마치 모델에게 "이 사진은 고양이 사진이야! 고양이라고 분류해!" 라고 말하는 것과 같다.

 

Soft Label

- 이에 반해 soft label은 마치 모델에게 이렇게 말하는 것과 같다

- "이 사진이 고양이인 것은 확실하지만.. 고양이가 어떻게 생겼는지에 대해 너무 오버피팅하지 않기 위해 10%정도의 확률을 강아지랑 여우에 나눠서 학습하자"

- 즉, 실제 라벨이 가장 높은 확률값을 가지되, 정답이 아닌 클래스들도 작은 확률을 나눠갖도록 하는 것이 soft label이다.

 

이렇게 label smoothing을 사용하면 딥러닝 모델이 예측결과에 대해 over confident해지는 현상을 완화할 수 있다.

 

TensorFlow 2.0에서는 loss API에서 label smoothing을 사용할 수 있도록 구현되어 있다.

label_smoothing 값이 0이면 hard label을 사용하는 것이고, 1에 가까워질수록 더 평평한 정답 label 분포를 만드는 것이다.

 

참고 논문: When does label smoothing help?

 

 Metric Learning 

분류 과제를 수행하는 딥러닝 모델을 만들 때에는 예측하고자하는 카테고리 개수만큼의 확률값을 예측할 수 있는

Fully Connected Layer을 모델의 최종 레이어로 사용하는 것이 일반적이다.

 

하지만 이러한 기존의 방식으로는 풀기 어려운 분류 문제들이 있다.

예를 들어 자동으로 사원의 얼굴을 인식해서 출입문을 열어주는 AI 시스템을 개발해야 한다고 생각해보자.

 

이 시스템에서는 몇 장의 사원 얼굴 데이터를 사용하여 개인을 구별해내야 한다.

일반적인 딥러닝 분류 모델의 경우, 이렇게 클래스 당 데이터의 개수가 적은 상황에서 overfitting이 발생할 수 있다.

게다가, 분류해야 할 클래스의 개수가 매우 많은 상황에는 FC레이어를 사용한 분류모델의 성능은 썩 좋지 않을 수 있다.

 

뿐만아니라 신입사원이 들어와 분류해야 할 사람이 늘어나거나 퇴사한 사람의 데이터베이스를 제거해야 할 경우,

일반적인 분류 모델을 사용하게 되면 매 번 모델을 통째로 다시 학습해야 하고, 이는 유지보수에 부담이 된다.

 

이런 상황에서 사용할 수 있는 딥러닝 기법이 metric learning이다.

 

metric learning에서는 모델이 데이터에 대한 feature(representation)을 추출하도록 하는 것을 목표로 한다.

이때 이 feature vector은 같은 클래스에 있는 데이터끼리 거리가 가깝고, 다른 클래스 데이터에 대한 representation과는 거리가 멀도록 학습된다.

 

<용어 정리>

  • positive example : 어떤 데이터와 같은 클래스에 있는 데이터
  • negative example : 어떤 데이터와 다른 클래으세 있는 데이터
  • feature vector = representation = embedding : 인풋 데이터에 대해 모델이 추출해낸 특성 벡터
  • distance : feature vector들간의 거리. (예) Euclidean distance

 

이러한 similarity 관점의 representation을 학습하도록 사용할 수 있는 Loss 함수에는 다음과 같은 것들이 있다.

 

Triplet loss

- Example point에 대해 positive embedding과의 거리를 좁히고 negative embedding 사이의 거리를 늘리도록 설계한 loss

- 위의 수식에서 a는 example point embedding, p는 positive embedding, n은 negative embedding, D는 거리함수 의미

- 이때 triplet loss는 모든 {example - positive - negative}에 해당하는 조합을 고려하여 합산한다.

- 그런데 데이터셋에 있는 데이터포인트가 많아질수록 이러한 triplet의 조합 개수가 엄청나게 늘어나고,

- 따라서 보다 어려운 triplet 조합을 찾아서 배치에 넣는것이 성공적인 모델 학습의 관건이 된다.

- 너무 쉬운 것만 넣으면 비슷한 데이터를 구분하지 못하게 되고, 너무 어려운 샘플만 학습하면 일반적인 상황을 못 풀 수 있다.

- 따라서 적절히 어려운 난이도의 negative와 positive를 구성하는 것이 좋다.

 

Batch-hard triplet loss

- Triplet loss에서는 분류의 난이도를 결정하는 triplet을 구성하는 방법이 매우 중요하다.

- Batch-hard triplet loss는 배치 내에서 가장 어려운 positive와 negative sample을 활용해 loss를 계산하는 online 전략이다.

- 이 방법에서는 랜덤하게 P개의 클래스를 샘플링하고, 각 클래스에서 K개의 이미지를 골라 PxK 사이즈의 배치를 구성한다.

- 이제 배치 안에 있는 각각의 샘플에 대해 hardest positive / negative sample을 골라낼 수 있다.

- 참고 논문: In Defence of the Triplet Loss for Person Re-Identification

 

- 참고자료 >> omoindrot.github.io/triplet-loss#batch-hard-strategy

 

HAP2S loss (E/P)

- Triplet loss에서는 하나의 샘플에 대해 negative와 positive 샘플 하나씩에 대한 feature를 고려한다.

- 하지만, sample to sample로 거리를 계산하는 대신 sample to set으로 거리를 고려하는 방법이 있다.

- 참고 논문 : Hard-Aware Point-to-Set Deep Metric for Person Re-identification

- 샘플 데이터에 대해, Negative set의 중심과의 거리와는 멀게, Positive Set의 중심과의 거리는 가깝게 하는 loss이다.