얼굴로 잠금 해제
- 스마트폰이나 노트북 등에서 얼굴로 잠금 해제
- 이미지 분류로는 어려움
- 일반적인 이미지 분류 방법은 한 종류의 이미지를 매우 많이 수집하여 학습
- 얼굴 인식의 경우 같은 사람의 이미지를 많이 모으기 어려움
- 같은 사람의 얼굴이라도 날마다 다름
- 컨디션, 조명, 화장, 각도 등등에 따라 이미지는 다르게 찍힘
- 요구 조건:
- 카메라에 얼굴을 비췄을 때 정확하면서도 빠르게 잠금이 풀려야
- 저장된 얼굴 이미지와 카메라에 비춰진 이미지를 잘 비교할 수 있어야
- 사람의 얼굴에서 특징을 추출하는 것이 중요
- 같은 사람을 찍은 사진에서는 비슷한 특징을, 다른 사람을 찍은 사진이면 최대한 다른 특징을 추출하도록 학습
- 새로운 이미지가 입력되었을 때, 가장 유사한 특징을 갖는 사람의 이미지를 찾아 신분을 확인
임베딩 embedding
- 유사성을 보존하면서 원래보다 낮은 차원의 벡터로 표현하는 것 또는 그렇게 표현된 벡터
- embed: 어떤 좁은 공간에 무언가를 심어넣는 것
- 일종의 좌표 또는 디지털 지문과 비슷한 개념
- 비슷한 내용의 이미지는 비슷한 임베딩 값을 가짐
- 지문만 비교하면 두 사람이 같은 사람인지 확인할 수 있듯이, 임베딩을 비교하면 두 이미지가 비슷한 이미지인지 빠르게 비교할 수 있음

듀이 십진 분류 코드
- 도서관에서 책의 내용을 몇 개의 숫자로 표시한 것
- 000은 컴퓨터, 지식, 정보 등에 대한 책들, 100은 철학, 300은 사회과학, 400은 자연과학, 800은 한국 문학 …
- 국립중앙도서관에서 자연어 처리에 대한 책들은 004로 시작되는 코드가 붙어 있음
- 책의 내용을 몰라도 004번 서가 있는 책들은 비슷한 내용일 것이라는 것을 짐작할 수 있음
- 도서관의 분류 코드는 사람이 임의로 만들어놓고 분류
- 임베딩은 도서 분류 코드와 달리 데이터에 딥러닝을 적용해서 만든 것
이미지 임베딩의 필요성
- 이미지는 많은 점들로 이뤄져 있음
- HD 해상도 1280x720 = 92만개의 픽셀
- 4K 해상도 3840x2160 = 829만개의 픽셀
- 원본 이미지를 바탕으로 검색할 경우 하나의 이미지와 비교하기 위해 수 십 만~수 백 만 개의 값을 계산 필요
- 고해상도 이미지에는 불필요한 디테일을 많이 포함
- 단순히 크기만 줄이는 것으로는 불충분
- 이미지의 '의미'를 보존해야
이미지 임베딩의 응용
- Face identification
- DB에 저장된 얼굴 이미지들 중에서 찾기
- 예: 출입 시스템
- Face verification
- 특정 얼굴과 일치 여부를 확인
- 예: 얼굴로 잠금 해제
- Image recommendation systems
- 검색 또는 구매한 상품과 시각적으로 비슷한 상품을 추천
- object re-identification
- CCTV 등에서 특정 대상을 추적할 경우 서로 다른 이미지에서 동일 대상을 식별할 수 있어야 함
임베딩 구현 방법
교차 엔트로피 손실 crossentropy loss
- 이미지 분류 모형을 학습 (crossentropy를 최소화)
- 신경망의 마지막 예측 레이어를 제거
- 신경망의 특정한 레이어를 출력으로 사용
- 해당 레이어가 추출하는 특징을 임베딩으로 사용

대조 손실 contrastive loss
- 대조(contrast): 두 가지를 비교해본다는 뜻
- 대부분 이미지, 텍스트, 오디오 등 다양한 도메인에서 효과적으로 사용
- 긍정적 쌍과 부정적 쌍을 데이터로 사용해서 학습
- 얼굴 인식의 경우:
- 긍정적 쌍(positive pair): 같은 사람의 서로 다른 사진 두 장은 겉보기에 아무리 달라도 비슷한 이미지
- 부정적 쌍(negative pair): 다른 사람의 얼굴 사진이면 겉보기에 아무리 비슷해도 다른 이미지
대조 손실 contrastive loss
- 이미지를 입력하면 임베딩을 출력하는 딥러닝 모델을 만듦
- 모델에 두 장의 이미지를 입력 → 두 개의 임베딩이 출력
- 긍정적 쌍의 이미지 두 개를 입력했을 때 두 임베딩이 서로 다르면, 모델을 약간 수정해서 두 개의 임베딩이 좀 더 비슷하게 고침
- 긍정적 쌍만 가지고 임베딩을 출력하는 딥러닝 모델을 학습시키면, 어떤 이미지를 입력해도 똑같은 임베딩을 출력하도록 학습이 될 수 있음
- 부정적 쌍의 이미지 두 개를 입력했을 때 두 임베딩이 서로 많이 다르면 특별한 조치가 필요 없음
- 부정적 쌍의 임베딩이 비슷한 경우, 모델을 수정해서 두 개의 임베딩이 달라지도록
- 이런 수정 과정을 수많은 이미지에 대해서 조금씩 아주 여러 번 반복해주면, 딥러닝 모델은 사람의 얼굴에 있는 어떤 패턴을 찾아내서 같은 사람의 얼굴은 같은 임베딩을 출력하고, 다른 사람의 얼굴은 다른 임베딩을 출력하도록 학습
삼중항 손실 triplet loss
- 대조 손실의 확장
- a, p, n 3개의 이미지를 사용
- a, p는 같은 대상의 이미지, n은 다른 대상의 이미지
- a는 n보다 p에 가깝게 출력하도록 학습
- 적절한 난이도의 삼중항 찾기
- a와 n이 너무 다르면 학습이 전혀 안됨
- a와 n이 너무 비슷하면 데이터가 잘못되었거나(예: 같은 사람이 다른 사람으로 잘못 레이블링) 특이 사례일 수 있음
- 너무 쉽거나 너무 어렵지 않은 정도의 semi-hard data를 찾아 학습
임베딩과 오토 인코더
- 오토 인코더로 압축된 값을 임베딩으로 사용할 수도 있으나, 여러 가지 단점을 가짐
- 오토 인코더는 원본 이미지를 정확하게 복원하는 데 초점, 비슷한 이미지가 비슷한 임베딩을 가진다는 보장 없음
- 대조학습은 서로 비슷한 이미지와 다른 이미지를 명시적으로 비교 → 임베딩 공간에서 의미론적으로 유사한 이미지가 가까이 위치하도록 만듦
- 오토 인코더는 학습 과정에서 임베딩으로부터 이미지를 복원
- 임베딩만 만드는 목적으로는 불필요한 과정 → 학습 속도 느려짐
- 더 복잡한 패턴을 학습할 필요
코사인 유사도
- 코사인 유사도(cosine similarity)는 두 벡터 간의 유사성을 측정하는 방법 중 하나
- 코사인 유사도의 결과 값은 -1에서 1 사이의 범위
- 값이 1에 가까울수록 두 임베딩이 매우 유사한 방향
- 값이 -1에 가까울수록 두 임베딩이 완전히 반대 방향을 가리킴
- 값이 0인 경우, 두 임베딩은 서로 관련이 없음
- 코사인 유사도는 문서 유사도, 추천 시스템, 이미지 및 텍스트 임베딩 간의 유사성을 측정하는 데 널리 사용됨