학습 임베딩을위한 시암 및 삼중 항 네트워크의 Pytorch 구현.
시암 및 삼중 항 네트워크는 이미지에서 소형 유클리드 공간으로의 매핑을 배우는 데 유용합니다. 이러한 방식으로 훈련 된 임베딩은 분류 또는 소수의 학습 작업을위한 기능 벡터로 사용할 수 있습니다.
Torchvision 0.2.1의 Pytorch 0.4가 필요합니다
Pytorch 0.3 호환성 체크 아웃 태그 Torch-0.3.1의 경우
우리는 MNIST 데이터 세트에 임베딩을 훈련시킬 것입니다. 실험은 Jupyter Notebook에서 실행되었습니다.
우리는 MNIST 데이터 세트에서 다른 손실 기능을 사용하여 학습 감독 기능 임베딩을 진행할 것입니다. 이것은 시각화를위한 것이므로 실제로 최선의 선택이 아닌 2 차원 임베딩을 사용할 것입니다.
모든 실험에 대해 동일한 임베딩 네트워크가 사용됩니다 (32 CONC 5X5-> PRELU-> MAXPOOL 2X2-> 64 CONC 5X5-> PRELU-> MAXPOOL 2X2-> 밀도 256-> PRELU-> 밀도 256-> PRELU-> 밀도 2).
클래스 수를 가진 완전히 연결된 레이어를 추가하고 SoftMax 및 Cross-Entropy로 분류 할 네트워크를 교육합니다. 네트워크는 ~ 99% 정확도로 훈련합니다. 두 번째 층에서 2 차원 임베딩을 추출합니다.
기차 세트 :

테스트 세트 :

임베딩은 분리 가능해 보이지만 (우리가 훈련 한 것), 메트릭 속성이 좋지 않습니다. 그들은 새로운 클래스의 설명 자로 최선의 선택이 아닐 수도 있습니다.
이제 우리는 한 쌍의 이미지를 찍고 임베딩을 훈련시키는 시암 네트워크를 훈련시켜 동일한 클래스에서 나오고 다른 클래스를 나타내는 경우 일부 마진 값보다 큰 경우 그 사이의 거리는 최소화됩니다. 대비 손실 함수를 최소화 할 것입니다 [1] :

Siamesemnist 클래스 샘플은 임의의 양성 및 음의 쌍을 샘플링하여 시암 네트워크에 공급됩니다.
20 개의 훈련을받은 후 여기에 훈련 세트를 위해 얻는 임베드가 있습니다.

테스트 세트 :

배운 임베딩은 클래스 내에서 훨씬 더 잘 클러스터됩니다.
우리는 앵커, 앵커와 동일한 클래스의 앵커와 앵커와 다른 클래스의 부정적인 ()를 취하는 삼중 항 네트워크를 훈련시킬 것입니다. 목표는 앵커가 일부 마진 값에 의한 부정적인 예가되는 것보다 긍정적 인 예에 더 가깝도록 임베딩을 배우는 것입니다.
출처 : Schroff, Florian, Dmitry Kalenichenko 및 James Philbin. Facenet : 얼굴 인식 및 클러스터링을위한 통합 임베딩. CVPR 2015.
트리플렛 손실 : 
Tripletmnist 클래스 샘플 모든 가능한 앵커에 대해 긍정적이고 부정적인 예입니다.
20 개의 훈련을받은 후 여기에 훈련 세트를 위해 얻는 임베드가 있습니다.

테스트 세트 :

학습 된 임베딩은 시암 네트워크의 경우와 같이 클래스 내에서 서로 가깝지 않지만 우리가 최적화 한 것이 아닙니다. 우리는 임베드가 다른 클래스보다 같은 클래스의 다른 임베딩에 더 가까워지기를 원했고, 그것이 훈련이가는 곳을 알 수 있습니다.
시암 및 삼중 항 네트워크에는 몇 가지 문제가 있습니다.
이러한 문제를 효율적으로 처리하기 위해 분류를 위해했던 것처럼 표준 미니 배치로 네트워크를 공급합니다. 손실 함수는 미니 배치 내에서 하드 쌍과 트리플렛을 선택하는 데 도움이됩니다. 10 클래스 당 16 개의 이미지로 네트워크를 공급하면 이전 구현에서 80 쌍과 53 개의 트리플렛에 비해 최대 159*160/2 = 12720 쌍과 10*16*15/2*(9*16) = 172800 트리플을 처리 할 수 있습니다.
일반적으로 미니 배치 내에서 가능한 모든 쌍이나 트리플렛을 처리하는 것이 가장 좋은 아이디어는 아닙니다. [2]와 [3]에서 삼중 항을 선택하는 방법에 대한 몇 가지 전략을 찾을 수 있습니다.
우리는 분류 네트워크와 마찬가지로 미니 배치로 네트워크를 공급합니다. 이번에는 각 클래스 내에서 n_classes 및 n_samples를 샘플링하는 특수 배치 샘플러를 사용하여 크기 n_classes*n_samples 의 미니 배치가 발생합니다.
각각의 미니 배치 양성 및 음수 쌍은 제공된 레이블을 사용하여 선택됩니다.
MNIST는 다소 쉬운 데이터 세트이며 무작위로 선택된 쌍의 임베딩은 이미 매우 좋았으며, 여기서는 많은 개선이 보이지 않습니다.
기차 임베딩 :

테스트 임베딩 :

우리는 온라인 쌍 선택과 마찬가지로 미니 배치로 네트워크를 공급합니다. 라벨과 예측 임베딩이 주어진 트리플렛 선택에 사용할 수있는 몇 가지 전략이 있습니다.
삼중 항 선택 전략은 신중하게 선택해야합니다. 나쁜 전략은 비효율적 인 훈련으로 이어질 수 있으며, 심지어 더 나빠질 수는 붕괴를 모델링 할 수 있습니다 (모든 임베드는 같은 값을 갖게됩니다).
다음은 각 긍정적 인 쌍에 대해 임의의 단단한 네거티브로 얻은 것입니다.
교육 세트 :

테스트 세트 :

온라인 부정 마이닝의 장점이 약간 더 눈에 띄는 Fashionmnist 데이터 세트에 대해 유사한 실험이 수행되었습니다. 2 차원 임베딩 만 사용한 동일한 네트워크 아키텍처가 사용되었으며, 이는 아마도 좋은 임베딩을 배우기에 충분히 복잡하지 않을 수 있습니다. 클래스 클래스가 더 많은 복잡한 데이터 세트는 온라인 채굴에서 더 많은 혜택을받을 수 있습니다.

무작위로 선택된 쌍이있는 시암 네트워크

부정적인 채굴로 온라인 대조적 손실

임의의 트리플렛이있는 트리플렛 네트워크

부정적인 채굴로 온라인 삼중 항 손실

[1] Raia Hadsell, Sumit Chopra, Yann Lecun, 불변의 매핑을 배우는 차원 감소, CVPR 2006
[2] Schroff, Florian, Dmitry Kalenichenko 및 James Philbin. Facenet : 얼굴 인식 및 클러스터링을위한 통합 임베딩. CVPR 2015
[3] Alexander Hermans, Lucas Beyer, Bastian Leibe, 사람 재 식별을위한 삼중 항 손실을 방어하여 2017
[4] Brandon Amos, Bartosz Ludwiczuk, Mahadev Satyanarayanan, Openface : 모바일 애플리케이션이있는 일반 목적 얼굴 인식 라이브러리, 2016
[5] Yi Sun, Xiaogang Wang, Xiaoou Tang, 공동 식별에 의한 딥 러닝 얼굴 표현, NIPS 2014