Verification(1:1)
Recognition(1:k)
즉, 얼굴 검증 문제보다 얼굴 인식 문제가 더 어렵다!
앞으로 살펴 볼 내용은 구성 요소로서 얼굴 검증 시스템을 만드는 것. 정확도가 충분히 높으면 이를 인식 시스템에 활용할 수 있다.
원샷 학습 문제에선 하나의 예시를 통해서만 사람을 인식해야 함.
(대부분의 얼굴 인식 시스템이 이것이 필요. 보통 DB엔 직원 혹은 팀원의 사진이 하나밖에 없기 때문!)
접근 방법 중 하나는 출력 시 직원과 모르는 사람이라는 클래스를 추가해서 학습시키는 것.
하지만 이는 신경망을 훈련시키기에 충분하지 않기도 하고, 새로운 사람이 입사하게 되면 소프트맥스 유닛을 추가해서 다시 훈련 시켜야 함.
이 방법 대신 유사도 함수를 학습시키는 방법이 있다.
이는 신경망으로 하여금 두 이미지의 유사도를 구하는 함수를 학습시킴.
: 두 개의 입력에 대해 독립적으로 두 개의 합성곱 신경망을 실행한 뒤 비교하는 아이디어
삼중항 손실 함수는 항상 하나의 이미지를 기준으로, 같은 사람인 것을 뜻하는 "긍정 이미지"와 다른 사람인 "부정 이미지"의 거리를 구한다. 즉, 한 번에 3개의 이미지를 보게 됨!
이는 아래와 같이 변형할 수 있음.
위의 식을 만족하는 자명한 방법 중에 하나는 두 거리가 모두 0이 되는 것. 따라서 신경망이 무조건 0을 반환하지 않게 하기 위해, 신경망으로 하여금 모든 인코딩이 같지 않다는 것을 알려줘야 함.
따라서, 목적 함수를 약간 수정함.
(alpha는 하이퍼파라미터. 마진이라고 불리기도 함. 마진의 역할을 두 거리의 값이 차이가 충분한 거리를 갖게 만드는 것. 왜냐면 A와 P의 거리에 알파를 더한 값보다 A와 N의 거리가 같거나 크게 만드니까!)
단일 손실함수는 아래와 같음.
(여기서 max함수의 역할은 거리의 차이값이 얼마나 음수인지는 신경쓰지 않게 하기 위함! => 즉, A와 P와의 거리가 A와 N과의 거리보다 작을 경우엔 신경 쓰지 않음. 맞게 계산된 거니까!)
즉, 이 목적 함수는 A와 P와의 거리가 A와 N과의 거리보다 충분히 작아서(마진만큼), max( ... , 0)을 했을 때 0이 도출되도록 함.
전체 손실 함수는 아래와 같음.
만약 천 명의 사람에 대한 만 개의 이미지 훈련 세트가 있다면 만 개의 사진을 사용해서 삼중항을 만들고, 삼중항에 대해 정의도니 비용 함수에 경사 하강법을 적용해서 신경망을 훈련시켜야 함.
삼중항 데이터셋을 정의하기 위해서 A와 P의 쌍들이 필요함. 같은 사람에 대한 쌍! 따라서 시스템을 훈련시키기 위해서 같은 사람에 대한 많은 이미지의 데이터셋이 필요하다. 그래서, 예시로 천 명의 사람에 대해 만 개의 이미지를 예로 든 것.
이를 적용해서 시스템을 훈련시킨 다음에 얼굴 인식 시스템의 원샷 학습 문제에 적용할 수 있다!
어떻게 삼중항을 생성할 수 있을까?
훈련 세트인 A, P, N을 무작위로 고르면 제약식을 쉽게 달성하게 됨. 왜냐면, 무작위로 뽑힌 두 장의 사진에서 확률적으로 A,N이 A,P보다 훨씬 다를 것이기 때문. 즉, d(A,N)이 d(A,P)+alpha보다 클 확률이 높다(N은 A와 다른 사람이니까!).
따라서, 훈련 세트를 만들 때 학습하기 어렵게 만들어야 함.
참고 : https://deep-learning-study.tistory.com/681, https://omoindrot.github.io/triplet-loss
논문에서는 hard negative, hard positive method를 제안함. 학습하기 어려운 positive와 negative sample을 추출하여 모델이 어려운 환경에서 학습되도록 함. 학습 초기에는 hard example 방법이 모델의 불안정함을 유발하므로 초기에는 all positive sample로 학습을 진행함.
hard positive sample은 다음의 조건을 만족하는 sample을 의미.
위 수식을 보면, anchor와 positive사이의 embedding거리가 최대인 sample을 의미. 일정 임계점 거리 이상이면 negative로 분류되는데, negative로 분류되기 전까지의 거리가 최대인 sample을 의미
hard negative sample은 다음의 조건을 만족.
negative sample이 되는 임계점에 가까운 negative sample은 hard negative sample임.
모델이 positive인지 negative인지 판별하기 어려운 sample로 학습한다면 더 좋은 성능을 나타낸다.
즉, mini-batch안에서 가장 큰 d(a,p)과 가장 작은 d(a,n)의 조합을 선택해서 모델을 좀 더 좋게 학습시킬 수 있음.
샴 네트워크를 훈련시키는 다른 방법은 인코딩들의 차이를 로지스틱 회귀 유닛에 입력해서 예측을 하면 됨! (같은 사람일 경우 1, 다른 사람일 경우 0)
샴 네트워크의 훈련 방법
안녕하세요 16기 김경준입니다.
15기 이윤정입니다.
투빅스 16기 박한나입니다.