티스토리 뷰

해당 글은 Stanford CS class  CS231n: Convolutional Neural Networks for Visual Recognition 강의를 기반으로 하고 있습니다.

(출처 :http://cs231n.stanford.edu/syllabus.html) Video 강의와 강의 note를 가지고 정리하고 있습니다.





1. Image Classification 

    • Data-driven approach vs Parametric approach

  Image classification problem을 해결하는 데 접근 방식을 Data-driven approach와 Parametric approach로 나눠 생각해봅시다.

전자의 경우 기계에 (여기서 말하는 기계는 보통 컴퓨터를 말합니다.) 아주 많은 데이터를 인풋하여 클래스 분류를 학습할 수 있도록 합니다. 1번 클래스는 빨갛고, 동그랗고, 빛나고.. 등 각 클래스에 대해 정확하게 정의를 하고 그 기준에 맞춰 분류하라고 가르치는 것이 아니라 각 클래스에 해당하는 수 많은 데이터를 주고 기계가 이를 보면서 각 클래스의 외적인 특징을 학습하게 되는 것입니다. 때문에 data-driven approach는 training dataset에 의해 성능의 차이가 납니다. (이미지, 실제 클래스 label)로 인풋되는 training dataset의 누적에 의해 기계가 점점 각 클래스의 특징을 잘 파악하고 클래스간 차이도 잘 구분하게 됩니다.

  parametric approach와의 구별점은 parameter의 유무라고 할 수 있습니다. Data-driven이 라벨링된 데이터들을 통해 학습하고, 테스트할 때 기존 데이터들을 돌아보면서 가까운 그림을 찾아 분류를 한다면 parametric 방식은 라벨링된 데이터들을 통해 parameter를 학습시키고, 이 값을 통해 입력이 들어오면 parameter와 곱함으로써 바로 클래스 분류가 되는 값으로 전환시킬 수 있습니다. 여기서 말하는 parameter란 데이터를 통해 업데이트해가며 학습한 결과로서 얻게되는 parameter를 말합니다. (hyper parameter가 아닙니다.) parametric approach에 대해서는 뒤에서 더 자세히 얘기하겠습니다.


    • The image classification pipeline

  image classification problem을 해결하는 과정은 다음과 같습니다.


Input - Learning - Evaluation

1. 여기서 말하는 input은 training set을 말합니다. N개의 이미지가 K개의 클래스로 라벨화되어 있다고 가정합시다.

2. training set에는 각 이미지와 그 이미지가 해당하는 클래스가 함께 주어집니다. a 이미지 -> 고양이, b 이미지 -> 강아지

 

training set의 images와 각각의 images에 맞는 labels를 받아 classifier model을 학습하게 됩니다.

3. new image가 들어왔을 때, 2. 에서 학습한 모델이 얼마나 클래스 예측을 잘하는지 평가하는 것으로 모델이 잘 학습되었는지 판단할 수 있습니다. 과적합 여부 등 더 많은 판단 기준을 거쳐야하지만 일단은 이것을 기본적인 성능 판단 기준이라고 할 수 있습니다.



# Nearest Neighbor classifier
  NN 분류 모델은 classification을 배울 때면 언제나 처음으로 배웠던 것 같습니다. 이번 강의에서도 data-driven 방식으로 학습시키는 이미지 분류 모델로서 NN 분류기를 알려주는군요. Nearest Neighbor classifier는 매우 간단한 알고리즘입니다. 
 
  Input으로 클래스가 라벨링된 이미지가 들어오고, 
  Training step -> "Memorize all images and labels"
  Predict step -> "Predict label with most similar memorized images"

most similar memorized images와 비교하여 새로운 이미지의 클래스를 예측한다는 것이 핵심입니다.

이미지 비교방법 (이미지간 거리 구하기)
여기서 두개의 이미지를 비교하는 방법으로 본 강의에서는 L1 distance를 사용하였습니다. 픽셀값의 차로 이미지를 비교하는 방법인데 아래 그림을 통해 설명하도록 하겠습니다. 

(사진 출처: http://aikorea.org/cs231n/assets/nneg.jpeg)


예를 들어, 4 x 4 x 3 의 이미지가 있다고 생각했을 때, 위의 그림은 3 RGB 채널 중 하나에 L1 distance 적용방식을 보여줍니다.
각 픽셀별로 값의 차를 구하고 각 차이들을 모두 합함으로써 이미지를 비교하는 것을 알 수 있습니다. test image와 training image가 유사할 수록 각 픽셀들의 값 차이가 적을 것이고, 그럼 각 픽셀별 차의 합 역시 작을 것이다! 라는 개념을 적용한 것입니다.
이를 L1 distance라고 하고, Manhattan distance라고도 합니다.

 L1 distance

 L2 distance
  L2 distance는 Euclidean distance를 말합니다.

L1 distance와 L2 distance는 regression line이 그려지는 모양에서 차이를 보이게 됩니다. 성능의 차이를 보이는 데 이미지의 비교 방법으로 무엇을 선택했는지 역시 중요합니다. L1 distance로 measure로 하면 성능이 어떤지, L2 distance를 measure로 하면 성능이 어떤지 등 여러 measure를 적용해보고 성능의 차이가 어떻게 나타나는지 비교해보는 것도 실험 후 꼭 필요한 것 같습니다. 

L1과 L2 distance의 차이를 잘 설명하고 있는 사이트가 있어 첨부합니다.
 

* Differences between the L1-norm and the L2-norm (Least Absolute Deviations and Least Squares)

http://www.chioka.in/differences-between-the-l1-norm-and-the-l2-norm-least-absolute-deviations-and-least-squares/


# k - Nearest Neighbor classifier
  k-NN은 NN 알고리즘에서 한번만 더 생각하면 됩니다. NN 알고리즘이 '내가 학습해놓은 n개의 이미지들 중에 새로 들어온 이미지랑 가장 유사한 단 하나의 이미지를 고르자! 그 이미지의 클래스랑 테스트 이미지의 클래스랑 같다고 예측하자!' 라면, k-NN은  '내가 학습해놓은 n개의 이미지들 중에 새로 들어온 이미지랑 가장 유사한 k개의 이미지를 고르자! k개의 이미지의 클래스들 중 다수결에 의해 한 클래스를 골라 test 이미지의 클래스로 예측하자!' 이것이 k-NN의 작동 방식입니다. 가장 비슷한 단 하나의 이미지만을 고르는 것이 아니라, k개의 이미지를 살펴보고 다수결에 의해 클래스를 예측합니다. 다수결이 잘 동작할 수 있도록 일반적으로 k는 홀수로 설정합니다. 예를들어, test 이미지가 하나 들어오고 k가 3이라고 했을 때, test 이미지로 L1 distance 값을 구해봤을 때, 가장 작은 값을 보인 3개의 이미지들을 찾고, 그 클래스들이 각각 '강아지', '고양이', '고양이'라면 모델은 test 이미지를 '고양이'라고 예측하는 것입니다!




# Validation sets for Hyperparameter tuning
  Hyperparameter는 학습을 통해 업데이트하는 parameter가 아닙니다. 우리가 직접 설정해야하는 parameter값이죠. 예를 들어, 앞에 설명한 k-NN의 경우, k 값이 바로 hyperparameter입니다. 또, 이미지들을 서로 비교하기 위해 사용했던 L1 norm, L2 norm 같은 경우도 우리가 직접 선택해야 하는 hyperparameter입니다. 때문에 hyperparameter의 값을 어떻게 설정해야 가장 성능이 좋은가에 대한 고려가 중요합니다!

  hyperparameter에 여러 값을 시도해보고 그 결과를 체크하여 가장 좋은 성능을 얻는 것이 목적인데, 이 때 주의할 것이 절대 Test data를 가지고 parameter tuning을 하면 안된다는 것입니다. test data는 모델의 train이 다 끝나고, parameter tuning까지 완료한 후, 마지막으로 evaluation 할 때만 사용해야 합니다! test data에서 hyperparameter를 tuning해 버리면, 이미 그 모델은 test data에 overfit하기 시작한 것입니다. 정말 정말 새로운 데이터! new data에서의 성능을 확신할 수 없게 되죠.


"Evaluate on the test set only a single time, at the very end."

  hyperparameter tuning을 위해 사용하는 data set을 validation set이라고 합니다. 박사님의 경우도, data에 대해 질문할 때, 'validation set은 확보되는가?' 를 여쭤보시더군요. data가 충분히 많다면 training set에서 일부를 가져와 validation set으로 놓는 것도 한 방법입니다.

"Split your training set into training set and a validation set. Use validation set to tune all hyperparameters. At the end run a single time on the test set and report performance."



  그러나 data가 충분하지 않다면 우리는 Cross-validation 방법을 사용해야합니다. 


training data를 k 개의 fold로 나누고, 매 iteration 마다 한 fold를 variation set으로 놓습니다. 위의 그림처럼 5 fold cross-validation을 하는 경우, iteration 1에서 fold 1,2,3,4를 사용해서 모델을 트레이닝하고 fold5 를 variation set으로 하여 hyperparameter tuning을 합니다. iteration 2에서는 fold 1,2,3,5로 모델을 트레이닝하고 fold4를 variation set으로 하는군요. 이를 반복하는 것입니다 fold 수만큼! 5번의 iteration을 통해 얻은 결과값을 평균내어 모델의 최종 성능으로 사용합니다. variation set을 버리지않고 training할 수 있으니 data가 적은 경우에 유용하겠죠?


위 그림으로 cross-validation이 어떻게 적용되는지 확인해봅시다.

k-NN에서 최적의 k가 무엇인지 hyperparameter tuning을 해야하는 상황입니다. 5 fold cross-validation 으로 해당 값을 찾아봅시다. 가장 좌측에 k = 0일 때, 5-fold cross-validation으로 구한 accuracy가 보입니다. 세로로 5개의 점이 놓여진 것을 확인하셨나요? k=0일 때 나타나는 5개의 점이 cross-validation의 각 iteration마다 구해진 accuracy입니다. 이를 평균낸 값이 파란 실선으로 보여지는군요. 이 실선값을 최종적으로 k=0일 때 모델의 성능이라고 할 수 있습니다. 실선을 따라 확인해본 결과 k는 0~ 20 사이에서 가장 높은 값을 보이는 군요. 약 0.288 정도의 accuracy로 보입니다. 강의에서는 이 값을 보이는 k가 7 이라고 하는군요. 



* k-Nearest Neighbor on images never used. 

- Very slow at test time 

- Distance metrics on pixels are not informative

- Curse of dimensionality

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함