Meta-002, Siamese Neural Networks for One-shot Image Recognition (2015-JMLR)

0. Abstract

  • 머신러닝에서 좋은 특징을 학습하는 것은 계산이 많이 들며, 사용 가능한 데이터가 별로 없다면 매우 어려울 것이다.
  • One-shot learning이란 새로운 클래스에 대해서 데이터 샘플이 단 한개만 주어지고 이를 구별하는 것이다.
  • 이 논문에서는 siamese neural networks을 학습하는 방법으로 입력간의 유사도를 rank하는 구조를 제안한다.
  • 네트워크가 조정되면, 새로운 데이터 뿐만 아니라 unknown 분포에서 온 데이터 또한 잘 예측할 수 있게 된다. (여기서 말하는 새로운 데이터는 같은 클래스의 test data를 의미하는 것인 듯)
  • Convolutional 구조를 사용하며 one-shot classification task에서 이 당시 SOTA을 달성하였다.
  • 사람은 새로운 개념을 빨리 이해하는 능력이 있다.
    • 머신러닝도 그러길 원하는 것!
  • 현재 머신러닝은 다양한 분야 (web search, spam detection, caption generation, speech and image recognition) 등에서 연구가 활발히 되고 있다.
  • 하지만 이러한 알고리즘들은 supervised learning으로써 데이터가 부족하면 작동하지 않는다.
  • 따라서 이 논문은 데이터에 한계로 retraining이 불가능할 때, unfamiliar categories에서 일반화 하려는 목적을 가지고 있다. (online prediction setting such as web retrieval)
  • Classification task에서 text 해보기 전에 한 개만의 example이 주어지는 조건이 걸리는 것을 one-shot learning 이라고 부른다.
    • 이는 zero-shot learning과는 다르다.
    • zero-shot learning은 target class에 대한 example을 아예 못보는 것이다.
    • GPT-2 리뷰 포스팅에서 다룬 것처럼 GPT-2가 하는 것들이 zero-shot learning이다.
  • One-shot learning에서 domain-specific 특징 or inference procedures을 target task 속성에 맞춰서 설정해서 해결할 수 있다.
    • 하지만 다른 문제의 type에는 robust 하지 않다는 점이 있다.
  • 이 논문에서는 novel approach는 입력의 어떠한 가정이 없고 자동적으로 모델이 feature을 잘 얻을 수 있도록 generalize을 하는 것이다.
    • 모델 구조는 많은 layer의 non-linearities을 부과하여 input space에서 transformation을 캡쳐한다고 한다.
    • 지금봤을 땐 뭐 특별한 것은 없는 듯 한데..?

1. Approach

  • 일반적으로 image representation을 supervised metric을 통하여 siamese neural network을 학습한 후, 이를 재사용하여 one-shot learning 에서 feature을 뽑아낸다. (without retraining)
    • 여기서는 character recognition에 대해서 실험을 하지만 일반적으로 다른 곳에도 적용할 수 있고 다음과 같은 특징을 가진다. (장점)
    • a) capable of learning generic image features useful for making predictions about unknown class distributions even when very few examples from these new distributions are available
    • b) easily trained using standard optimization techniques on pairs sampled from the source data
    • c) provide a competitive approach that does not rely upon domain-specific knowledge by instead exploiting deep learning techniques.
  • one-shot image classification 모델을 학습하기 위해서 첫 번째로 이미지 쌍의 class-identity에 초점을 맞춘다.
    • 그림 2처럼, same, different을 내뱉은 모델
  • Verification model즉 입력 쌍을 구별하는 것을 배우고 출력으로 same or different class에 대한 probability을 내뱉는다.
  • 그런 다음 모델은 새로운 이미지들에 대해 (test image) inference을 할 수 있다.
  • 모델이 만약 alphabets의 하나의 set에 대해서 제대로 학습을 했다면 (deny or identity) 특징을 학습하기 위해 알파벳의 다양한 변화에 노출이 되었을 테고 다른 알파벳에 대해서도 잘 구별할 것이다.

2. Related Work

  • One-shot learning은 비교적 관심을 제한적으로 받았고 미숙하지만, 몇 개의 key lines가 있다.
  • Variational Bayesian framework으로 one-shot image classification (Fe-Fei 2003, 2006)
  • point of view of cognitive science (Lake)
    • Hierarchical Bayesian Program Learning (HBPL, 2013)
  • Hierarchical Hidden Markov model for speech primitives combined with a Bayesian inference procedure (2014)
  • Bayesian networks to predict attributes for Ellis Island passenger data  (2009).
  • Wu and Dennis address one-shot learning in the context of path planning algorithms for robotic actuation (2012). 
  • 이전 연구들에 대해서는 느낌이 베이지안으로 많이 해결하려고 했던 것 같은데.. 좀 더 자세한 설명은 Reference 3번째 한글자료를 보면 좀 더 자세히 설명되어 있으니 참고

3. Deep Siamese Networks for Image Verification

  • Siamese 네트워크는 두 개의 똑같은 네트워크가 있고 입력이 각각 다른 것이 들어간다.
  • 즉 병렬적으로 두 개의 입력이 figure 3 처럼 들어가고 그것의 결과를 가지고 distance을 측정하는 식이다.
  • (A,B) Distance와 (B,A) Distance는 같는 값을 가지도록 distance metric은 설정이 되어야 한다. (ex. |A-B|^2)
    • 이 논문에서는 feature vector h1, h2 사이의 L1 distance을 사용하고 그것에 sigmoid activation을 취함으로써 결과 값을 [0,1] 사이로 만든다.
    • 따라서 cross-entropy obj으로 학습하는 것은 매우 natural choice이다.
  • 논문의 best-performance models은 multiple CNN이다.
    • 그냥 일반적인 CNN classifier 네트워크임.
  • CNN에 대한 장점을 설명한느데 이 생략;

3.1 Model

  • 모델은 L layers와 개의 units을 가지고 있으며, 은 첫 번째 twin에서 layer l에서의 hidden vector이고  은 second twin에 대한 hidden vector이다.
  • 처음 L-2 layers에서는 ReLU을 사용하였고 나머지에서는 sigmoidal units을 사용하였다.
  • Conv는 fixed stride 1을 사용하고 filter 수는 16개, ReLU 함수를 사용하고 option으로 max-pooling을 사용하여서 다음과 같은 수식을 가진다.
    • 은 3차원 tensor로 layer l에 대한 feature maps이고 *는 valid convolutional operation 이다. (valid는 conv할 때, 입력과 출력  사이즈를 맞추려고 padding을 안하겠다는 것)
  • convolutional의 마지막 layer은 flatten to single vector가 된 후, 다음과 같이 distance을 구하게 된다.
    • 즉 마지막 feature (L-1 layer)에서 나온 두 벡터에서 component 끼리 절댓값 차이를 구하고 이를 weighted sum을 한 결과에 sigmoid을 취하게 된다. (weighted L1 distance 느낌)
    • 여기서 alpha (weight)도 학습하는 parameter이라고 한다.

3.2 Learning

3.2.1 Loss function

  • Binary classification으로 학습하며 optimization function은 regularized binary cross-entropy을 따른다.
  • 여기서 윗첨자 i는 i-th minibatch라는 것이다. (전체 minibatch size는 M)
  • x1와 x2가 같은 character이면 y(x1,x2)=1, 아니면 0의 값을 가진다.

3.2.2 Optimization

  • minibatch size는 128, learning rate는 , momentum은 , L2 regularization weights는 로 표기하고 각각 layers(j)에서 정의한다
  • T는 epoch을 의미한다.
  • 즉 Momentum GD을 썼는데, regularization을 사용한 것인데 굳이 왜이렇게 복잡하게 썻는지..? (석사 졸논이라 그런지 옛날에 나온거라 그런가..)

3.2.3 Weight initialization

  • Convolutional layer
    • Weight: normal distribution(평균 0, 표준편차 0.01)
    • Biases: normal distribution(평균 0.5, 표준편차 0.01)
  • FC layer
    • Weight: normal distribution(평균 0, 표준편차 0.01)
    • Biases: normal distribution(평균 0, 표준편차 0.2)

3.2.3 Learning schedule

  • 으로 1 epoch당 1%씩 유니폼하게 감소
  • Momentum은 0.5로 모든 layer에서 시작하여 에 도달할 때까지, 선형 증가를 함. (j-th layer에 따라 값이 다름)
  • 최대 200 epochs 까지 학습하였으나 one-shot learning task의 320개의 set에서 (랜덤하게 알파벳에서 생성된 것과 validation set) one-shot validation error을 확인하였따.
    • validation error가 20 epochs동안 감소하지 않으면 학습을 중단하였다. (early-stopping 했다는 듯)

3.2.4 Hyperparameter optimization

  • Whetlab의 beta version을 사용하였다. (옛날의 keras-tuner 같은 것인가?)
  • Learning rate : [10^-4, 10^-1]
  • Momentum : [0, 1]
  • Regularization weight : [0, 0.1]
  • Conv filter size: 3x3 to 20x20
  • Conv filter number: 16 to 256 (16의 배수로 탐색)
  • FC: 128 to 4096 units (16의 배수로 탐색)

3.2.5 Affine distortions

  • Affine transformation으로 data agumentation을 했다.
  • x1,x2을 각각 T1,T2의 transformation으로 x1'=T1(x1), x2'=T2(x2) 식으로 한 것이다.
  • 을 가지고 있으며
    • 는 [-10, 10]의 원소
    • 는 [-0.3, 0.3]의 원소
    • 는 [0.8, 1.2]의 원소
    • 는 [-2, 2]의 원소이다.
    • 각각은 0.5의 확률, 즉 동일한 확률로 랜덤하게 가진다는 것

4. Experiments

  • Omniglot 데이터세트의 subset으로 모델을 학습하였다.

4.1 The Omniglot Dataset

  • 50개의 알파벳에 대한 샘플로 만들어졌고 Latin, Korean부터해서 잘 안알려진 local dialects (방언)에 대한 것도 있다.
    • 한국어 ㅚ, ㅃ ... (반갑)
  • 각 언어당(알파벳) 15~50 characters 을 각기 다르게 가지고 있다.
    • 총 character은 1623개라고 함
  • 알파벳은 40개의 background set과 10개의 evaluation set으로 구성되어 있다.
    • 글씨는 20명이 쓴 것 (즉 총 데이터는 1623x60=97380)
    • Background set은 모델의 hyperparameters, feature mapping을 위해 train / validation / test set을 의미한다.
    • evaluation set은 one-shot classification 성능을 측정하기 위해 있다.
    • 근데 뒤에서 실험들은 verification을 위해 30개 알파벳, one-shot 을 위해 20개 알파벳을 사용하는 것 같은데??

4.2 Verification

  • Verification network을 학습하기 위하여 30,000, 90,000, 150,000 학습 쌍을 모았다.
    • same pairs + different pairs 합친 개수를 의미
  • 60% 데이터를 학습을 위해 설정하였다.
    • 50개의 알파벳중 30개의 알파벳 (ex. a1~a30)
    • 20개의 drawer 중 12명 (ex. d1~d12)
    • 50개 알파벳중 30개의 알파벳을 고르고 이 알파벳을 쓴 20명의 drawer중 12명이 쓴 것에 대해서만 학습을 한다.
  • 첫 번째 성능 평가 방법
    • 그리고 나머지 20개의(ex. a31~a50) 알파벳중 10개의(ex. a31~a40) 알파벳을 고른다.
    • 이 10개 알파벳에 대해 아까 안고른 8명 drawer중(ex. d13~d20) 4명을(ex. d13~a16) 선택하여 10,000개의 verification examples을 만든다.
    • 나머지 10개(ex. a41~a50) 알파벳과 나머지 drawer 4명에(ex. d17~d20) 대한 것은 testing examples이 된다.
  • 두 번째 성능 평가 방법
    • 같은 알파벳과 같은 drawer로 320개의 one-shot recognition 세트를 만들고 평가하는 방법? (4.3에서 설명하는 방법인 듯)
  • 정해진 수의 알파벳 학습 examples에 affine distortion을 통한 agumentation을 통하여 학습을 하였다.
    • 8개의 transform을 이용하여 총 데이터를 270,000, 810,000, 1,350,000으로 증가시켰다. (위에서 모은 데이터세트의 9배)
    • 각각 90k, 150k의 데이터 세트로 학습되어진 결과이다.

4.3 One-shot Learning

  • Evaluation 과정
    • 4.2 절의 verification처럼 30개의 알파벳으로 학습을 하고 나머지 20개의 알파벳으로 평가를 한다.
    • 몇 개의 다른 이미지 가 주어진다. (categories: C개)
    • query x에 대해서 다음과 같이 maximum similarity을 계산을 하게 된다.
    • 이 논문에서는 One-shot learning 성능을 측정하기 위해 20-way 알파벳 classification을(정확히는 character?) 하게 된다.
    • 20개의 알파벳은 무작위로 선정한다. (학습 때 안쓴 것)
    • 20명의 drawer중 2명을 선택한다.
      • 이 2명이 선정된 20개의 characters을 만든다.
      • 첫 번째 drawer가 만든 Ic 이미지와 두 번째 drawr의 이미지 세트 I1~I20와 비교하여 Ic와 가장 비슷한 이미지를 I1~I20에서 찾는 방법이다.
      • 이를 20-way one-shot classificaiton이라고 한다.
  • Total one-shot result
    • 위 Evaluation 과정을 반복하는 것인데
    • 모든 알파벳에 대해서 2번씩 위 과정을 반복한다. (2번씩이라는게 아마 drawer 2명을 다르게 고르는 경우를 말하는 것 같음)
    • 즉 20개의 알파벳에 대해서 2번씩 하니까 20개의 한 세트에 대해서 40 one-shot learning trials을 하는 것이다.
    • 이를 모든 알파벳에 대해서 하는데, (20개의 알파벳 세트) 총 10개의 evaluation 알파벳이 존재해서 총 400 one-shot learning trials을 한다고 되어 있다. (20x2x10=400)
  • 즉 정리하자면, One-shot learning을 위해 모델을 학습한다는 것은 Verification 모델을 학습한다는 것이다.
    • 그리고 test할 때, 20-way one shot task를 한다는 것은 새롭게 모델을 학습하는 것이 아니다.
    • 즉 unseen data 20개가 있는데, 이중 test image가 주어질 때, 20 class중 어디에 해당하는 지를 verification model로 판단하겠다는 것이다.
    • 즉 데이터 쌍을 지어서 distance을 측정하는 것!
    • 성능을 보면 HBPL이 best지만, 이는 character, stroke을 이용하여 그리는 법에 관한 사전 정보를 담고 있다. (extra prior 지식) 
    • 그러나 CNN은 이러 외부정보가 없고 성능은 92%나 나오는 것이 장점이다.

4.4 MNIST One-shot Trial

  • Omniglot으로 학습한 모델이 얼마나 MNIST에서 일반화가 되었는지 확인하는 것이다.
  • MNIST는 손글씨 숫자 10개이므로 10-way one-shot classification task가 되는 것이다.
  • Training set에서는 어떠한 fine-tunning도 하지 않고 MNIST test set으로만 진행하였다.
  • 원래 MNIST는 28x28인데 35x35로 unsampling해서 Omniglot의 35x35 이미로 학습한 버전에 집어넣었다.
    • 결과를 보면 1-nearest Neighbor 보다 훨씬 좋다.
    • 즉 MNIST에 대한 학습 없이 Ominglot으로만 학습한 모델로 뽑은 feature가 generalization을 나름 잘한다는 것을 볼 수 있다.

5. Conclusion

  • Verification을 위한 convolutional siamese neural network 학습을 첫 번째로 시도하였고 이는 one-shot classification에 수행된다.
  • 이전 연구 SOTA와 비슷한 성능을 낸다.
  • 학습한 네트워크는 사람 수준의 정확도를 보여줄 뿐 아니라 다른 domain에서도 작동하는  확장성을 보여준다.
  • 이 논문에서는 image pairs와 global affine transform을 이용한 distortions만을 사용하여 verification 학습을 하였다.
  • 하지만 다른 extended 알고리즘을 통하여 final computed distortion을 다음 그림과 같이 추가하였다.
    • 이것을 통해 일반적으로 variation에 강인한 features을 학습할 수 있을 것이라 기대한다. (future work)
  • 즉 one-shot learning이란, 데이터가 한 장 밖에 안주어졌을 때 어떻게 task에 맞는 모델을 학습할 것인가? 에서 시작되었다고 생각한다.
    • 여기서 핵심은) 일반적으로 다른 많은 이미지로 classification하는 것으로 모델을 학습했다고 하자.
    • 학습에 쓰이지 않은 새로운 클래스의 이미지 한 개를 새롭게 받았다고 하자.
    • 그러면 이 새로운 클래스 이미지를 classification하는 모델을 pre-train 모델을 곧바로 이용할 수가 없다.
    • 왜냐하면 pre-train 모델은 이 class을 분류하도록 만든 모델이 아니기 때문이다.
    • 따라서 새로운 output layer(node 개수가 달라진)을 다시 학습해야하는데, 데이터가 한 개 밖에 없으니까 학습하기가 어려운 상황에 도달하는 것이다.
    • 따라서 이것을 해결하기 위해 verification 모델 방식으로 학습한 것이다.
    • 즉 여기서는 task가 verification이고 one-shot learning외 다른 많은 이미지로 부터 verification 모델을 pre-training해서 쓰는 방법론이다.
    • 만약 task가 verification이 아니고, 학습에 쓰일만한 다른 데이터들이 없다면?? pre-train 없이 하는 방법이 있을까?? → 최신 논문들은 있을지도...
Reference

댓글