반응형
2015년 구글에서 발표한 논문 FaceNet을 보면 얼굴 이미지를 학습시키기 위한 방법으로 Triplet Loss를 사용하고 여기에 Curriculum Learning을 도입하였습니다.
한 모델을 살펴봄에 있어 그 모델이 Cost Function을 어떤 식으로 정의하였는지는 그 모델의 성능이 왜 좋은가에 대한 질문에 직결되는 문제이기 때문에 이 글에서 좀 더 자세히 다뤄보도록 하겠습니다.
먼저 Triplet Loss란 무엇일까요
Triplet Loss(삼중항 손실)
Triplet Loss란 한 번의 학습 때 Anchor, Positive, Negative 세 가지의 데이터를 통해 학습하는 방법입니다.
Anchor가 무엇인지를 학습하는 것이 아니라 Anchor와 Positive의 거리, Anchor와 Negative의 거리를 비교한 후 Positive보다 Negative와의 거리가 멀도록 학습시키는 방법입니다. 여기서 positive는 anchor와 같은 클래스의 데이터이고 negative는 anchor와 다른 클래스의 데이터를 의미합니다. 같은 클래스의 데이터일 경우 임베딩된 공간에서 더 가까워야하고 다른 클래스의 데이터일 경우 임베딩 공간 상에서 더 먼 곳에 위치해야합니다.
이를 식으로 나타내면 아래와 같습니다.
식 1
위의 식에서 보시다시피 anchor와 positive의 거리에 마진 α를 더한 값보다 anchor와 negative의 거리가 더 커야합니다.
α가 의미하는 바는 무엇일까요? 다음과 같은 경우를 생각해봅시다.
positive와의 거리차 : 0.3 / negative와의 거리차 : 0.31
글쎄요. 분명 negative와의 거리가 positive와의 거리보다 멀지만 이 수치만을 봤을 때 anchor와 positive는 같은 클래스, negative는 다른 클래스라고는 단언할 수 없을 것 같습니다. 마치 같은 클래스의 데이터인 것처럼 거리 차가차가 얼마 나지 않기 때문이죠.
여기서 α는 positive와의 거리보다 negative의 거리가 다른 클래스라는 것을 보증할만큼 충분히 멀다는 걸 보증해 줄 파라미터입니다. 위에 예시로 든 경우도 학습을 통해 재조정되게 되어 그만큼 정확도가 올라가게 해주는 파라미터라고 볼 수 있습니다.
그렇다면 모델을 알아봄에 있어서 제일 중요한 Cost Function은 여기서 어떻게 구할 수 있을까요?
Cost Function
x를 이미지, 이를 임베딩시킨 결과를 f(x)라 할 때 FaceNet에서 제시한 Cost Function은 다음과 같습니다.
식 2
그렇다면 위의 식 2은 어떤 아이디를 통해 도출된 것일까요
우리는 각각의 triplet이 식 1을 만족시켜야한다는 것을 압니다. 식 1을 모두 좌변으로 옮긴다면 위 식 2 괄호 내의 형태와 같은 형태가 될 것입니다.
이 식의 결과에 대해서는 두 가지 경우가 있을 것입니다.
- 양수인 경우 - 올바르게 임베딩되지 않아 negative와의 거리가 positive보다 충분히 멀지 않을 경우
- 음수일 경우 - 올바르게 임베딩 되어 negative와의 거리가 충분히 멀 경우
[value]+ 는는 max(value, 0)와 같은 의미입니다. 따라서 올바르게 임베딩 됐을 경우, 즉 학습이 잘 되어있는 경우는 0, 아닌 경우는 그 값 자체를 가지게 됩니다.
따라서 식 2가 의미하는 바는 올바르게 임베딩 되지 못한 값들의 거리 차의 합, 오차의 합이 되는 것입니다. 즉 식 2의 값을 줄여나가는 행위는 전체의 오류 합을 줄여나가는 것을 의미하고 위 식이의 최저값은 0이고 이 경우 모든 데이터들이 원하던 대로 올바르게 임베딩 된 경우입니다.
Curriculum Learning(논문링크)
FaceNet에서는 위와 같은 Cost Function에 대해 확률적 경사 하강법 (SGD - Stochastic Gradient Descent)을 적용하여 학습을 진행하였습니다. 그렇다면 데이터들로 triplet을 만들고 위의 cost function을 감소시키는 방향으로 학습을 시킨 것이 이 논문이 발표하고자 한 전부였을까요?
그렇지 않습니다. 좀 더 빠르고 정확한 학습의 위해 이 논문에서는 Triplet을 고름에 있어 Curriculum Learning의 아이디어를 적용하였습니다. Curriculum Learning은 2009년에 논문으로 발표된 학습방식입니다. 단순히 주어진 데이터들을 전부 학습하는 데 사용하는 게 아니라 데이터들을 학습에 도움이 되도록 고르고 정렬시켜 학습시키는 방법입니다.
이 논문에서는 semi hard triplet또는이라 불리는 데이터들을 고르는 식으로 이 방법을 적용시켰습니다.
많은 양의 이미지가 주어졌을 때 임의로만 이미지를 선택한다면 같은 클래스일 경우보다 다른 클래스일 경우가 압도적으로 더 많기 때문에 triplet을 만든 후 비교한다면 positive보다 negative가 큰 경우가 더 많을 것입니다. 즉 위의 식에서 loss가 0인 경우가 많아지고 이는 결국 Cost Function이 완만해지는 결과를 낳을 것입니다. 즉 학습 효율 느려지게 됩니다.
또는 의도적으로 hard한 triplet만 고를 경우 bad local minima에 빠지게 되는 상황이 생기게 됩니다.
그렇다면 FaceNet에서는 어떤 triplet을 골라 curriculum learning을 적용시킨 걸까요?
위의 식을 만족시키는 triplet은 anchor와 negative와의 거리가 여전히 멀긴 하지만 anchor와 positive와 여전히 가깝습니다.
FaceNet에서는 이렇게 추려낸 학습 데이터를 통해 위에서 언급된 문제를 피하면서 뛰어난 성취를 이루어내었습니다.
여기까지 FaceNet 모델에서 사용한 Cost Function에 대한 이해를 해보았습니다.
FaceNet은 2015년도에 발표된 모델임에도 Labeled Faces in the Wild 데이터셋에서 99.63%의 정확도를 얻어낸 뛰어난 모델입니다.
뛰어난 모델이 왜 뛰어난지에 대해 이해하는 것은 공부를 함에 있어 매우 중요하다고 생각하기에 이렇게 글로 정리해봅니다.
반응형