😺

[cs231n] Lecture 2 : Image Classification

Lecture 01은 OT같은 느낌이라 생략
Lecture 01에서 Feifei 교수님이 Vision의 시작부터 Computer Vision의 발전을 설명 해주시는 것이 흥미로웠다 ㅎ

Image Classification

컴퓨터 비전의 핵심 task로, Image가 주어졌을 때 Labeled 된 카테고리에서 이 이미지가 어디에 해당하는지 알아내는 것이다.
컴퓨터에서 이미지는 [0,255]의 숫자로 이루어진 거대한 행렬로 구성되므로 사람의 뇌에서 이미지를 인식하는 것처럼 이미지를 분석하는 것은 굉장히 어렵다.
고양이를 분석한다고 할 때,
빛의 각도, 세기와 상관없이
고양이가 앉은 자세나 위치와 상관 없이
고양이의 일부만이 보이더라도 
배경이 어떻든 간에
주어진 사진이 고양이임을 알아내는 것은 사람과 다르게 컴퓨터에게는 매우 어려운 일이다.
특히, 알고리즘 시간에 배우는 다른 알고리즘과는 다르게 정해진 방법이 없다는 것이 더욱 어렵게 한다.

이전의 시도들

사진의 테두리를 찾아서 특징을 찾으려는 시도가 있었으나,
1.
다루기 어렵고
2.
고양이가 아니라 다른 것을 찾으려면 처음부터 알고리즘을 짜야하는
등의 문제가 있어서 사장되었음

그래서? : Data-Driven Approach

1.
이미지와 Label로 구성된 Dataset을 모으고
2.
ML을 통해 Classifier를 학습 시킨 후,
3.
새로운 이미지를 Classifier을 통해 평가한다.
Data-Driven Approach 자체는 Deep Learning, CNN등 보다는 훨씬 광범위한 주제이다.

Nearest Neighbor Classifier

모든 데이터와 라벨을 저장해두고, 새로운 이미지와 가장 유사한 이미지를 찾아서 해당 라벨로 예측하는 방식
하지만 이런 방식으로는 유사한 이미지는 찾을 수 있으나, 그렇다 보니 정확성이 떨어진다. 위 사진은 CIFAR-10이라는 유명한 학습용 Dataset을 Nearest Neighbor 방식으로 돌려본것이다.

L1 (Manhattan) Distance

d1(I1,I2)=pI1pI22d_1(I_1, I_2) = \sum_p |I_1^p-I_2^2|
단순히 좌표들의 값의 차이들을 더하는 것
좌표축을 어떻게 설정하느냐에 따라서 L1 Distance가 달라질 수 있다.

L2 (Euclidean) Distance

d2(I1,I2)=p(I1pI2p)2d_2(I_1,I_2)=\sqrt{\sum_p(I_1^p -I_2^p)^2}
익히 잘 알고 있는 점과 점 사이의 거리
좌표축의 정의와 상관없이 L2 Distance는 일정하다.
거리를 정의하는 두가지 방법을 선택하는 것도 매우 중요한데, 좌표축의 의미를 정확하게 알고 있는 경우에는 L1 Distance를 선택하는 것이 자연스럽고 좌표축의 의미를 잘 모르고 그냥 있는 데이터는 L2 Distance를 선택하는 것이 자연스럽다.
Nearest Neighbor Classifier는 학습에는 O(1)O(1), 예측에는 O(n)O(n)의 시간 복잡도가 필요한데 이는 매우 비효율적이다. 학습에 시간이 아무리 오래 걸려도 예측하는 데 시간이 짧은 것이 좋기 때문이다.

k-Nearest Neighbors Classifier

Nearest Neighbor Classifier의 한계

Nearest Neighbor 분류에는 다른 문제도 있다.
class들을 색칠해서 2차원 평면에 위와 같이 나타내보자.
한개의 값만을 살피다보니 초록 영역에 속해있는 점이 노란색으로 분류되기도 하고, 파랑 영역 초록 영역 빨강 영역의 경계가 잘 분류되지 않는 것을 볼 수 있다.

k-Nearest Neighbors Classifier

그래서 가까운 한개의 값을 살피는 것이 아니라 가까운 k개의 값을 살펴서 우세한 class로 결정하는 것이다.
k값이 올라갈수록 경계가 부드러워(smooth)해지는 것을 볼 수 있다.

Distance 계산 방식에 따른 차이

Distance를 계산하는 방법에 따라서 영역이 조금 달라지게 된다.

Hyperparameters

k값과 Distance 계산 방식등을 Hyperparameter라고 한다.
Hyperparameter의 결정은 문제에 따라서 변하며, 전부 해보고 제일 잘 돌아가는 방식을 채택하기도 한다.

Hyperparameter의 결정

Hyperparmeter를 결정하는 아이디어는 다음과 같은 것이 있다.
모든 데이터셋
모든 데이터셋에 돌려보고 잘 작동하는 Hyperparameter 선택
학습용 데이터에는 K=1일때가 가장 잘 작동하므로 좋은 방법이 아님
데이터셋을 Train용과 Test용으로 나누기
Test용 데이터에 가장 잘 작동하는 Hyperparameter 선택
골라놓은 Test용 데이터에는 가장 잘 작동하는 Hyperparmeter일 수 있지만, 새로운 데이터에 대해서는 어떻게 알고리즘이 작동할지 모름
데이터셋을 Train, Validation, Test 세개로 나누기
Validation dataset을 통해 Hyperparameter를 결정하고 Test set을 돌려서 나온 결과를 사용
Cross-Validation
fold로 나눠서 하나를 Validation, 나머지를 Train 해보고 다른 하나를 Validaiton 나머지를 Train... 을 반복하는 방법
딥러닝에서는 돌려보는게 비싸기때문에 잘 사용하지 않음
k=7을 넘으면 Accuracy가 떨어지기 때문에 k~=7이 좋음

kNN은 안쓰인다

1.
느리고
2.
픽셀의 차이가 유의미한 정보를 주지 않음
Boxed, Shifted, Tinted 모두 Original과 같은 L2 Distance를 갖고 있다.
3.
Curse of Dimensinality
kNN을 통해서 이미지를 판별하려면 Space를 충분히 채울 수 있을 만큼의 Dataset이 필요한데, Dimension이 늘어날 때마다 필요한 Dataset의 갯수가 지수적으로 증가한다.

Linear Classificaion

Neural Network는 Linear Classifiers를 레고 블럭처럼 잘 쌓는것
Linear Classification은 Parametric Model의 가장 단순한 형태
Parametric Model(Approach)란? 주어진 Dataset이 Statistical Distribution; Nomal Distribution을 갖고 있을 때 Parametric Approach라고 한다. Parameter가 있다고 해서 Parametric Approach가 아님!
입력 데이터 x와 Weights 집합 W를 넣으면 class score를 뱉는 함수를 이용하는 것이고, 딥러닝이란 이 함수 f의 구조를 잘 설계하는 것이다.