Linear Classifier  

32*32 픽셀의 이미지에 대해서 R/G/B 별로 색이 지정된다고 생각하고 

Input 이미지에 대해서 라벨링을 하는 과정 (label y : Output)

x (input) 을 linear 함수 f 에 넣어서 각 레벨별로 점수를 산출한다. 

 

x 와 가중치 W를 내적곱 하면 아래 그림과 같이 곱해질 것이다. 

 

W dimension : (10*3072), x dimension : (3072*1) , label score dimension : (10*1)

 

지금부터는 아래 도식과 같이 bias 'b'를 따로 빼지 않고 가중치 'W'안에 열로 넣어줘서

한번에 볼 것이다. (학습 데이터 x에는 1값의 행을 한 줄 추가해줘서 가중치에 추가된 열과 곱해지게 만든다)

 

 

 

 

다시 이미지가 있다고 생각하고 예시를 들어보면 아래와 같음. 

 

 

최종 linear classifier model :  f (x,W) = Wx 

Advantages of parametric models : 

  • Once trained, what we need is the weights W only. We don't need to store the huge training dataset : space efficient
  • At test time, an example can be evaluated by a single matrix-vector multiplication (Wx) : much faster than comparing against all training data

 


 

이렇게 만들어진 Linear Classifier를 어떻게 해석할 것이냐?

 

(1) Geomertic Viewpoint

각 행별로 (각 클래스별로) 곱해지는 가중치 값이 나오는데, 그 W 값에 따라 평면이 그려지고 각 평면들의 교선들이 classifier 역할을 한다.

 

(2)  Visual Viewpoint

 

가중치 W가 마치 이미지 픽셀이라고 생각하고 이미지를 생성했을 때, 생성되는 이미지가 클래스별로 나온 결과값 (이미지)가 위 그림의 마지막 줄과 같게 된다.

 

- kNN 분류기와 비교했을 때 (kNN 분류기는 새로운 데이터 (테스트 데이터)가 들어왔을 때, 라벨이 주어진 각 training data과의 거리를 계산해서 거리의 합이 가장 짧게 계산된 트레이닝 데이터에 해당하는 label로 분류하는 분류기이다.) kNN과 같이 점수 (거리)를 비교한다는 것은 같지만, 전체 트레이닝 데이터와 하나하나 비교하는게 아니라, 그 비교할 대상이 딱 class 개수만큼이라는 점이 시간적, 공간적 측면에서 계산이 효율적이게 된다. 

 

- 예를 들어 유튜브 영상들을 바탕으로 해당 영상이 어떤 종류의 영상인지 분류하는 작업을 한다고 하자. 

  1000 종류의 label이 붙어있는 100억개의 영상들을 기계가 학습한다. 

  새롭게 label을 부여하고 싶은 영상, (test)를 기계에 입력한다면

   # kNN 분류기로 학습한 기계는 새로 들어온 영상을 기존 100억개와의 영상과 그 거리를 측정.
   # Linear 분류기로 학습한 기계는 학습 과정에서 만들어진 (1000*1) 가중치를 새로 들어온 영상에 곱해서 1000개의 점수를 비교

 


Linear Classifier의 한계 ?

 

- 일단 지금 클래스별로 score이 계산됐는데, 그 score이 해석가능하지 않음

- 'score'말고 각 클래스별 확률 [0,1]이 나오도록 계산할 수 없을까?

 

> solution 제안 

클래스 2개에 대해 점수 2개가 주어졌을 때, 두 점수의 차이를 확률로 mapping 하는 함수를 만들 수 있지 않을까?

* score : s1, s2* S = s1 - s2* S가 클수록 c1으로 구분될 확률이 1에 가까워져야 함
* S가 작을수록 (음수값) c2로 구분될 확률이 0에 가까워져야 함
* S가 0이면 차이가 없다는 것이므로 p(c1) = p(c2) = 0이 되어야 함

 

그런 함수는 바로 시그모이드 함수였다.

W * x를 클래스별 스코어로 만들고, 그 스코어를 확률로 만들기 위해 sigmoid function에 mapping했는데 
그 결과가 정말 '확률'인지 확인해봐야 한다. 
'확률'이 되기 위한 조건은 (1) 각 확률이 0이상 1이하의 범위에 있어야 함. (2) 전사건의 확률의 합이 1이어야 함. 

확인해보면 아래와 같고, 만족한다는 사실을 알 수 있다. 

 


  Softmax Classifier  

그런데 위에는 지금 클래스가 딱 두 개일 때의 상황이고, 

클래스가 여러 개일 때 어떻게 해야할지 살펴보자. (let's generalize the sigmoid function above to n(n>2) classes)

 

위 그림의 softmax function 에 따라 클래스별 스코어 (s_i)를 대입하면 각 클래스 별 확률이 나온다.

따라서 sofmax classifier에 판정이 필요한 그림을 넣었을 때 해당 그림이 어떻게 분류가 되는지 살펴보면 아래와 같다. 

 

input image will be classified as 'dog'

 


지금까지 주어진 이미지를 바탕으로 학습을 하고 학습을 통해 가중치를 구해놓고, 가중치를 바탕으로 새로 들어온 이미지를 어떤 클래스로 분류할 것인지, 그 방법을 알아봤다. 

그런데 가중치 행렬에 들어갈 값들은 어떻게 구하는 것일까? 

Loss function을 이용한 손실의 계산과 Optimizer를 통한 parameter의 업데이트를 통해 가능하다. 

단순회귀의 경우 loss function이 MSE이고 optimizing 방법은 경사하강법이다. 

 

분류의 경우에는 어떻게 w 파라미터를 업데이트하고 구할 수 있을지는 다음에 알아보기

 

 

 

 

'Study > 딥러닝' 카테고리의 다른 글

Data Preprocessing & Augmentation  (1) 2023.10.22
Activation Functions  (0) 2023.10.21
Convolutional Neural Networks  (1) 2023.10.14
Nerual Networks and Backpropagation  (0) 2023.10.13
Loss function & Optimization  (0) 2023.10.11