Fewshot Learning Similarity Approach
Few shot Similarity
많은 데이터만 있으면 모델은 입력에 해당하는 클래스를 분류할 수 있습니다.
하지만 얼굴 인식과 같이 사람의 경우 한 번만 그 사람의 얼굴을 보아도 대충 누구인지 알 수 있고, 기억할 수 있습니다.
이러한 문제에 대해 여러 사람에 대해 3장 씩만 가지고 있다면 모델은 학습하기 어려울 것 입니다.
이러한 부분에서 사람과 기계의 핵심 포인트
1. 사람은 학습이 빠르다.
2. 모델은 많은 양의 데이터가 필요하다.
얼굴 인식에서 사람과 인간이 다른 이유 : 사전 지식을 가지고 있기 때문에 (인간이 어떻게 생겼는지, 인종이 무엇인지, 옷을 입고 있는 것을 통해)
사전 지식을 제공한다면 문제를 해결할 수 있을까? -> 사전 지식에 달려있다.
사전 지식은 여러 형태가 될 수 있다.
1. 유사성에 대한 사전 지식
2. 학습에 대한 사전 지식
3. 데이터에 대한 사전 지식
새로운 클래스를 분류하는 Task가 제시되기 전에 이 세 가지를 모두 사용할 수 있다.
유사성에 대한 사전 지식.
Disadvantage of Traditional Models :
기존
1. 모델의 매개 변수를 배우기 위해 많은 예제가 필요.
2. 필요한 경우 잘한다는 것.(학습한 얼굴의 경우만 잘 한다는 것)
유사성에 대한 사전 지식은 모델을 정의하는 방식에서 하는 역할?
앞서 말한 일반적인 방법 : 모델에 이미지를 제공하고 모델이 그것이 누구인지 알아내도록 지시하는 것으로 해결하고 있다.
새 얼굴을 인식하기 위해서는 새 클래스에 나타내기 위해 Softmax 계층에 노드를 추가해야하고 모델 아키텍처를 수정해야하기 때문에 이러한 두 가지 단점을 해결하기 위해 모델을 다시 학습해야 하는 문제 -> 변환
Metric Learning 으로 볼 수 있으며 단순히 표현을 학습하는 것의 확장된 개념
Sample을 설명하는 Feature를 추출하고 추출된 Feature의 유사성을 검토하는 것을 목표로 함.
(가장 기초적인 방법은 각 Sample의 유사성을 검증하는 방법).
1. Siamese Network
모델에 두 개의 이미지를 제공하고 이미지가 동일한 사람인지 아니면 다른 사람인지 결정하도록 네트워크에 지시할 수 있다.
위 그림은 siamese-network 이다.
위에 설명하는 모델은 단일 네트워크가 아니며, 그림에서는 Euclidean Distance(Similarity Function)이라고 하는 부분에서 두 모델의 결과가 수렴하고 두 이미지가 유사하거나 다른지 여부를 시그모이드 뉴런에서 종료하는 네트워크이다.
또한 일반적인 유사성을 이용하는 모델은 최종 분류에 사용하는 Softmax Function을 사용하지 않고 입력된 이미지의 압축된 표현을 형성한 임베딩 결과를 사용한다.
보통 데이터 셋은 이미지 쌍을 사용하므로 작은 이미지 세트에서 이러한 쌍을 만드는 것이 가능하다. 따라서 훈련 이미지에 새로운 이미지를 추가한다고 가정하면, 이전에 볼 수 없었던 이미지가 나오더라도 더이상 네트워크 아키텍처를 수정할 필요가 없다.
그리고 단지 입력으로 들어가는 두 이미지가 비슷하냐 아니냐의 이진 분류 문제로 바뀌게 된다.
2. Triplet Network
기존 CNN 방식의 한계점을 해결하기 위한 방법으로 제시됨.
어떤 공간에서 유사한 데이터는 가깝게, 다른 데이터는 멀리 떨어지게 하도록 하는 것이 목적.
x : 기준이 되는 데이터
x+ : x와 일치하는 클래스를 가진 데이터
x- : x와 일치하지 않는 클래스를 가진 데이터
Triplet Network의 경우 동일한 CNN 모델에서 기준이 되는 이미지와 이를 비교할 두 개의 이미지를 사용한다. 그리고 기준 이미지에 대한 각각의 Euclidean Distance(Similarity Function)를 계산하고 L2-Norm을 계산한 뒤 두 Distance 사이의 로스를 계산한다
* Margin(Bias와 같은 개념으로 보면 쉽다.)이라는 요소가 각각의 Distance 값의 변화를 주고 최적의 Loss를 구한다.
x를 x-와 x+로만 분류하기 때문에 이진 분류 문제 같이 보인다. 따라서 어느 한 샘플 x에 가까운지 아닌지만 결정한다.
3. Matching Network
적은 양의 Support Set(K-Shot Classification)을 가지고 분류기(Classifier)를 학습시키는 방법. 분류기는 주어진 Test Sample Image x 에 대해서 Output Label y에 대한 Probability Distribution을 정의.
Attention Kernel에서 가중치에 의해 Support Sample의 Label Sum 으로 나타나며 Attention Kernel은 이미지 x와 xi 사이의 유사한 정도와 비례해야 한다. Attention Kernel은 Support Sample을 Embedding Vector로 인코딩 하고, Test Sample을 Embedding Vector로 인코딩하는 두 개의 Embedding Function으로 구성되어 있으며 두 데이터 간의 Attention Weight는 두 Embedding Vector 간의 Cosine Similarity Distance를 이용하여 유사성을 계산하며 최종적으로 Softmax를 통해 Normalize 된다.
단일 입력으로 받는 것이 아니라 Support Set까지 사용하면서 Support Sample과의 관계를 사용하며 보정될 수 있다.
4. Relation Network. 2018
Siamese Network와 유사하다.
Relationship은 Siamese에서는 간단한 Similarity Function(L1 Distance)을 통해 계산했다면 최종 CNN Classifier에 의해 예측된다. Relation Score(Classifier)는 입력으로 들어온 xi(Training Sample)와 xj(Query input) 사이에 대해 계산.
Siamese Network 의 Objective Function 은 Cross Entropy Loss 를 사용했지만 MSE Loss를 사용했다. Binary Classification보다 Regression에 적합한 Relation Score를 예측하는 것에 초점을 맞추고 있기 때문.
각 데이터 사이의 유사성을 구하고, 각각의 데이터를 임베딩. 임베딩 후 샘플과 테스트가 있을 때 [Sample 1, Test], [Sample 2, Test]와 같이 유사성 계산 모듈에 입력으로 넣고 Relation Score로 Test가 어떤 Sample과 유사한 클래스인지 파악한다.
임베딩 값을 Concat 하여 Relation Module의 추가적인 입력으로 사용하여 나온 출력값을 유사성으로 표현.
5. Prototypical Network (Protonet)
Train Dataset 에 있지 않은 새로운 Class에 대해 학습할 때, 새로운 Class에 대한 Dataset이 부족할 경우를 대처하기 위한 방안.
각 Class의 Prototype Representation 까지의 거리를 계산해서 Classification을 수행할 수 있는 Meric Space을 학습.
위의 이미지는 3-Way 5-Shot Classification을 보여준다. 초록 C1 부분만 계산한다고 가정하면 X1~X5는 Support Set의 Data이고, 이 데이터를 어떤 모델에 입력으로 넣으면 Z1~Z5의 C1 주변의 초록색 점으로 변환됩니다. 그리고 5개의 Z를 모두 평균한 값이 C1이 되고 이것이 하나의 Class의 Prototype이 된다.
이를 반복하여 C1, C2, C3 처럼 각 Class의 Prototype이 생성되고, 이후 Query Set의 데이터를 이용하여 어떤 Class인지 예측하게 된다. 마찬가지로 Query Set의 Data를 모델에 입력으로 넣고 Zq를 얻을 수 있고, 이 Zq를 가지고 C1, C2, C3와 Similarity Function(Euclidean Distance)를 계산한다. 이후 계산된 값에 마이너스(-)를 붙이고 거리가 멀수록 Similarity가 작고 거리가 가까울수록 Similarity가 커지게 된다.
따라서 Support Set을 통해 이러한 Class를 대표하는 Prototype을 생성하고, 이후 Query Set을 이용하여 Distance 기반 Softmax를 계산한 후 값을 비교한다. 이후 Training Episode 랜덤하게 Class를 선택하여 만듦. 방식으로 학습.