SYDLAB_inha/Machine Learning

ML - Classifier(1) / Linear Classifier / SVM Classifier

빈그레 2023. 9. 10. 18:13

 

 

 


Linear Classifier

 

 

 

 

 

Linear Classifier

 

: 직선으로 class를 구분하려는 것이다. 

 

image가 input으로 들어오면 Linera Classifier이라는 함수에서 input image인 x값과 가중치 값인 weigths에 따라, output으로서 class가 구분될 것이다. 위 예시에서 구분하고자 하는 class가 3개이므로 output은 3차원의 벡터로 표현될 것이다.

 

Linear, Quadratic, Cubic 식에서 x앞에 붙어있는 값들이 weights이다. 이는 learnable한 상태이다.

이전에 다뤘던 regression은 실수 하나의 값으로 output이 나왔지만, 여기에서는 class 개수만큼 score가 나온다.

 

목표는 weights를 조정함으로써 정답인 class의 score가 높아지도록 하는 것이다.

 

 

 

regression은 supervised learningd의 하나이므로, 위와 같이 cat의 이미지가 주어졌을 때, label도 같이 주어진다. cat의 socre가 다른 class들의 score보다 높게 나와야 좋은 값이 나왔다고 볼 수 있다.

 

처음에는 W값이 random하게 찍혀있겠지만, 이를 정답인 class의 socre가 높아지는 방향으로 weigths를 조정해나가야 한다.

 

1) Feed-forware
(x의 1열로서의 vector가 4개라 가정)

input으로 들어온 이미지의 matrix 픽셀들을 1열의 vector로 쭉 늘여놓는다. w는 input data의 차원과 output의 score의 차원을 연결해주는 역할을 한다. 

위 예시에서 w값인 weight는 output을  3개의 클래스에 대해 표현하기 위해
 1*4인 input vector에 4*3의 weight로 곱하여 1*3의 output score을 만들어내었다.

cat이란 input에 대하여 target scores 즉, label을 준비하고 임의로 초기화한 W  f(x,W)값에 대해 target scores와의 차이를 구하는 loss function을 구한다.  ex. MSE(Mean Squared Error) 

따라서 Linear Classfier의 명시적인 목표는 corret class의 score는 높이고 loss funciton은 줄이는 방향으로 weights를 조정해나가는 것이다.

 

 

 

 

 


 

 


SVM Classifier

 

 

 

 

 

 

SVM(Support Vector Machine) Classifier

 

:  클래스 간격을 넓게 유지하며 분류 경계를 찾고, 분류 경계에서 가장 가까운 데이터 벡터를 나타내는 서포트 벡터를 사용하여 데이터를 분류하고 예측하는 알고리즘이다. 클래스가 두개로 나뉘는 경우 간소한 차이로 완전히 다른 class로 판단되는 데에서 생기는 오류를 줄이기 위한 알고리즘이라 볼 수 있다.

 

 

 

 

 Suppose 3 training examples & 3 classes





 

 

- Loss Function


 loss function 은 현재의 classifier가 얼마나 잘 수행되고 있는지를 표현하는 함수이다. 

-> x는 image, y는 해당 image의 label로 N개의 data가 들어오는 것을 표현

주어지는 모든 데이터에 대하여 W로 classification한 값과 label과의 loss를 구하고 이를 모두 더한 것의 평균을 내어 데이터 전체의 loss를 구한다. 이 loss를 줄이는 방향으로 세타 혹은 W를 조정해나간다.



 

 

- Multiclass SVM loss


SVM classifier는 SVM loss를 쓰는 것을 지칭한다.

SVM이 추구하는 것은 정답인 score가 정답이 아닌 score와 충분하게 delta(차이)가 있게하는 것이다. 이를 margin이라 할 수 있다.

Sj는 어떠한 class에 대한 output score를 의미하고 Syi는 실제 정답인 class의 score를 의미한다.
j != yi는 정답이 아닌 놈에 대해서만 계산하겠다는 것을 의미한다.

margin은 1이라 가정한다. margin은 support vector 까지의 거리를 의미한다.
(정답인 놈이 충분히 커야한다~~의 기준이 되는 수)



cat이 정답인 첫번째 예시에서 car의 score와 yi인 cat의 socre을 빼고 margin인 1을 더해 값을 구하고 frog에 대해서도 동일하게 계신하여 max함수에 넣는다. 

class에 대한 판단은 score가 더 높은 것으로 되기 때문에 정답인 class보다 낮게 score가 나온 것에 대해서는 loss라 보지 않는다. 이를 max함수로서 구현하였다.

이렇게 구한 loss를 줄여나가는 방향으로 classifier를 만든다.