입력 이미지가 들어왔을 때, 이미 정해져 있는 Categories에서 이미지가 어떤 Category에 속할 지 고르는 문제
Computer 입장에서 Image Classification이 어려운 이유는 무엇일까?
다음과 같은 변화가 발생했을 때 이미지를 분류하기가 어렵다.
Image의 Feature(특징)을 찾고, Featrue(특징)을 이용하여 명시적인 규칙을 만드는 방법으로 접근
데이터를 보고 데이터 중심으로 접근(Data-Driven Approach)
(1) 이미지와 라벨 데이터셋을 수집한다.
(2) 분류기를 학습시키는데 머신러닝을 사용한다.
(3) 새로운 이미지를 사용해 분류기를 평가한다.
데이터를 보고 데이터 중심으로 접근(Data Driven Approach)한 경우 수많은 데이터를 수집해야 한다는 문제점이 있지만, 최근 하드웨어의 발전으로 성능이 좋아졌다.
K-Nearest Neighbor Algorithm은 분류 알고리즘으로써 새로운 데이터가 들어왔을 때 어떻게 분류를 할 것인가를 정해주는 알고리즘이다.
K-NN 알고리즘
K Nearest Neighbor는 크게 두 가지 과정을 거친다.
Train 과정 : 모든 train data를 기억한다.
Predict 과정 : 입력 데이터를 train data와 비교하여 어떤 label 값을 가질지 예측한다.
K값
K=1일 경우
K 값을 높일 경우
K값을 조절함으로써, 경계선을 조금 더 부드럽게 만들어 주거나 영역을 조금 더 잘 분류할 수 있다.
Distance Metric(거리 척도)
L1 Distance(Manhattan distance), L2 Distance(Euclidean distance)
특정 벡터가 개별적인 의미를 가지고 있다면(ex. 키, 몸무게) L1 Distance를, 일반적인 벡터 요소들의 의미를 모르거나 의미가 별로 없을 때는 L2 Distance를 사용한다.
학습을 하는데 영향을 미치는 parameter이면서, 학습을 통해 알아내기 보다는 학습을 하기 전 선택하는 parameter를 하이퍼파라미터라고 한다. (ex. K값, Distance Metric)
어떻게 하면 이 하이퍼파라미터를 잘 선택할 수 있을까?
가장 간단한 방법은 데이터에 맞게 다양한 하이퍼파라미터 값을 시도해보고 가장 좋은 값을 찾는 Trial&Error 방법
Dataset을 Train, val, test 로 나누어 한번도 보지 못한 data에 대해 분류를 잘 하게 되는 하이퍼파라미터를 선정한다.
다음과 같이 교차 검증(Cross-Validation)을 하면 더 확실하게 분류를 잘 하는 하이퍼파라미터 값을 찾을 수 있지만, 데이터가 작을 때는 괜찮지만 데이터가 많을 경우 너무 오래 걸린다는 단점이 있어 딥러닝 분야에서는 잘 사용하지 않는다.
이미지 분류에서는 K-Nearest Neighbor Algorithm을 잘 사용하지 않는다.
test를 하는데 시간이 너무 오래 걸린다.
Distance Metric(거리 척도)는 픽셀 단위에서 별로 유용한 정보가 아니다.
차원이 늘어나면 필요한 train data가 기하급수적으로 증가한다. → 차원의 저주
Linear Classification은 Neural Network를 구성하는 가장 기본적인 요소이다. NN은 여러 개의 다양한 층들을 마치 레고블럭처럼 쌓아 하나의 거대한 타워를 짓는 것이라고 볼 수 있다.
Linear Classifier는 Parametric model의 가장 단순한 형태
X : input image
W : 가중치(Weight)
b : 바이어스, 곱을 끝내고 더하는 역할로 데이터에 무관하게 특정 클래스에 우선권을 부여한다.(scaling offset)
→ 가령 데이터셋이 불균형한 상황(고양이 데이터 > 개 데이터)에서는 고양이 클래스에 상응하는 바이어스가 더 커지게 된다.