iBetter Books
수정

임베딩이 "얼굴을 숫자 목록으로 바꾼 것"이라면, 인식은 "두 숫자 목록이 얼마나 닮았는가"를 재는 일입니다. 이 장에서는 닮음을 재는 두 가지 자(유클리드 거리와 코사인 유사도)와, 같다/다르다를 가르는 임계값의 의미를 직관으로 잡습니다.

닮음을 재는 두 가지 자

두 임베딩이 얼마나 가까운지를 재는 방법은 크게 둘입니다. 이름은 다르지만 둘 다 "닮을수록 좋은 점수"를 준다는 점은 같습니다.

척도 무엇을 재나 닮을수록 범위
유클리드 거리 두 점 사이의 직선 거리 작아진다 0 이상
코사인 유사도 두 벡터가 이루는 각도 커진다(최대 1) -1 ~ 1

유클리드 거리는 가장 직관적입니다. 512차원 공간에서 두 점이 떨어진 거리를 자로 잰 것이라, 같은 사람이면 거리가 짧고 다른 사람이면 멉니다. 코사인 유사도는 거리가 아니라 방향을 봅니다. 두 벡터가 같은 방향을 가리키면(각도가 작으면) 1에 가깝고, 전혀 다른 방향이면 0이나 음수가 됩니다.

비유하자면, 유클리드는 "두 집이 몇 미터 떨어졌나"를, 코사인은 "두 사람이 같은 방향을 보고 있나"를 재는 셈입니다. 얼굴 인식에서는 둘 다 잘 동작하며, 모델과 라이브러리에 따라 권장하는 척도가 다릅니다.

코드로 거리 재기

두 임베딩 e1, e2가 있을 때 두 척도를 구하는 법은 짧습니다.

# 파일: distance.py"""두 임베딩의 유클리드 거리와 코사인 유사도를 구한다."""import torchimport torch.nn.functional as F# e1, e2: 앞 장/다음 장에서 얻은 (1, 512) 임베딩 텐서라고 가정euclidean = (e1 - e2).norm().item()              # 작을수록 닮음cosine = F.cosine_similarity(e1, e2).item()       # 클수록(최대 1) 닮음print(f"유클리드 거리: {euclidean:.3f}")print(f"코사인 유사도: {cosine:.3f}")

(e1 - e2).norm()이 두 벡터 차이의 길이, 곧 유클리드 거리입니다. F.cosine_similarity는 두 벡터의 각도를 코사인 값으로 돌려줍니다. 같은 사람이라면 유클리드는 작게, 코사인은 1에 가깝게 나옵니다.

임계값 — 같다와 다르다의 경계

거리나 유사도는 연속적인 숫자입니다. 그런데 우리가 원하는 답은 "같은 사람인가, 아닌가"라는 둘 중 하나입니다. 이 연속 숫자를 둘로 가르는 경계선이 임계값(threshold)입니다.

예를 들어 유클리드 거리에서 임계값을 1.0으로 정하면, 거리가 1.0보다 작으면 "같은 사람", 크면 "다른 사람"으로 판정합니다. 코사인 유사도라면 반대로 0.5 같은 값을 정해, 그보다 크면 같은 사람으로 봅니다.

flowchart LR A[두 임베딩] --> B[거리/유사도 계산] B --> C{임계값과 비교} C -->|거리 < 임계값| D[같은 사람] C -->|거리 >= 임계값| E[다른 사람]

임계값을 잘못 잡으면

임계값은 인식 시스템의 성격을 결정하는 손잡이입니다. 너무 느슨하게(거리 임계값을 크게) 잡으면 다른 사람도 같은 사람으로 통과시키고, 너무 빡빡하게 잡으면 같은 사람도 거부합니다. 이 둘은 맞바꿈 관계입니다.

임계값 효과 위험
느슨함(거리 크게) 같은 사람을 잘 통과 남을 본인으로 오인(보안 사고)
빡빡함(거리 작게) 남을 잘 차단 본인도 자주 거부(불편)

출입 보안처럼 오인이 치명적인 곳은 빡빡하게, 사진 앱의 인물 묶기처럼 편의가 중요한 곳은 느슨하게 잡습니다. "정답 임계값"은 없고, 용도와 데이터에 맞춰 직접 정하는 값입니다. PART 02의 검출 신뢰도 임계값과 똑같은 원리입니다.

실무 팁. 임계값은 반드시 내 데이터로 정하세요. 같은 사람 사진 쌍 수십 개와 다른 사람 사진 쌍 수십 개의 거리를 모두 재 보면, 두 무리가 거리 분포에서 갈라지는 지점이 보입니다. 그 사이를 임계값으로 잡으면 됩니다. 라이브러리가 주는 기본 임계값은 출발점일 뿐, 내 카메라·내 사용자에 맞춰 조정해야 정확합니다.

이 장에서 기억할 것

두 임베딩의 닮음은 유클리드 거리(작을수록 닮음)나 코사인 유사도(클수록 닮음)로 잽니다. 연속적인 이 값을 같다/다르다로 가르는 경계가 임계값이며, 느슨함과 빡빡함은 오인과 거부 사이의 맞바꿈입니다. 임계값은 용도와 데이터로 직접 정합니다. 다음 장에서는 이 비교가 쓰이는 두 가지 시나리오, 1:1 확인과 1:N 식별을 구분합니다.