히비스서커스의 블로그

[기계학습 5강] error handling in SVM and soft Margin with SVM 본문

Theory/Machine Learning

[기계학습 5강] error handling in SVM and soft Margin with SVM

HibisCircus 2021. 4. 22. 00:02
728x90

 내용들은 edwith(KAIST Open Online Course)의 인공지능 및 기계학습 개론 1 Chap. 5강 내용을 기반으로 재구성하였음을 먼저 밝힙니다.

 

 

 

 

"Error" Cases in SVM


앞에서 살펴본 내용에서 우리는 아래의 그림과 같이

 

 

선형인 Decision boundary에서 hard margin을 사용했을 경우 발생하는 error들에 대한 방안으로 두 가지를 고려하였다.

 

 

첫번째 옵션

더욱 복잡한 (비선형의) Decision Boundary를 만들고 hard margin을 유지하는 방안

 

 

두번째 옵션

선형의 Decision Boundary를 유지하고 soft margin을 만들어 에러를 허용하는 방안

 

 

두번째 옵션에 대해서 먼저 살펴보자. 이를 위해 Error에 대한 페널티를 어떻게 부여할 것인지를 생각해보아야 한다.

 

 

"Error" Handling in SVM


패널티를 부여하는 방법으로 크게 2가지가 loss function으로 나타낼 수 있다. loss function이란 패널티를 어떻게 부여하는지를 정의한 function이다. 아래의 그림은 Decision Boundary에 수직인 선상에 오른쪽 위에서 왼쪽 아래 방향으로 점이 움직인다고 할 때 패널티를 부여하는 방법을 나타내는 Hinge Loss function과 0-1 Loss function을 나타낸 것이다.

 

 

1) 0-1 Loss (검정색 함수)

 

첫번째 방안으로 아래의 식과 같이 quadratic programming에 에러의 개수를 더해준 값을 모델링 하는 것이다.

 

$min_{w, b} \left \| w \right \|  + C * num_{error}$, 여기서 $num_{error}$는 에러의 개수

모든 $j$에 대해서 $(wx_j + b)y_j \geq 1$을 만족할 때

 

이는 다음과 같은 문제점이 존재한다.

 

문제점 1. quadratic programming으로 모델링하기가 어렵다.

문제점 2. 가까운 점이나 먼 점이나 패널티를 동일하게 부여하는 것은 좋은 방법이 아니다.

 

 

 

2) Hinge Loss (빨간색 함수)

 

두번째 방안으로 아래의 식과 같이 Slack Variable을 도입하여 miss classification을 나타내는 정도를 고려하여 모델링 하는 것이다. 

 

$min_{w, b} \left \| w \right \| + C \sum_{j} \xi_{j}$, 여기서 $\xi_j$는 Slack Variable로 miss classification이 되었을 때 miss되는 정도를 나타낸다. C는 Slack Variable에 대해 얼마만큼의 강도로 설명할 것인지를 나타내는 파라미터이다. (우리가 설정해주어야 하는 값이다.)

모든 $j$에 대해서 $(wx_j + b)y_j \geq 1 - \xi_{j}$을 만족할 때 (여기서, $\xi$는 0보다 크거나 같다.)

 

이 방안의 문제점은 새로운 파라미터 C라는 것을 고려해주어야 한다. 우리는 이 방안을 고려하여(Slack Variable을 고려하여 ) Decision Boundary를 결정하는 SVM을 Soft_Margin SVM이라고 한다.

 

Soft_Margin SVM


 

이전에 Decision Boundary를 선형으로 하고 Hard margin을 사용했을 경우 위의 그림에서 Decision Boundary를 만들 수 없었다. 하지만 Slack Variable을 사용하면 Soft Margin이 되어 error인 점들을 허용하지만 이를 최소화하도록 제약을 걸어주는 것이다.

 

제약을 걸어주는 함수는 Slack Variable에 총합을 해주는 $C \sum_j \xi_j$로 만들어 주었다. 각각의 Slack Variable은 다음과 같이 확인할 수 있다.

 

 

 

 

 

좀 더 다양한 loss function을 살펴보자.

 

Comparson to Logistic Regression


아래의 그래프는 loss function 3가지를 나타낸 것이다. 빨간색 함수가 Hinge loss function 이고, 검정색이 0-1 loss function, 파란색이 log loss function이다.

 

 

Loss Function

위에서 살펴보았듯이 Loss Function에서 Slack Variable은 일반적으로 다음과 같이 나타낸다.

 

$\xi_j = loss(f(x_j), y_j)$

 

 

SVM loss function :: Hinge Loss

앞서 살펴본 SVM loss function 중 Hinge Loss에서 Slack Variable은 다음과 같이 나타났다.

 

$\xi_j = (1 - (wx_j + b)y_j)$

 

 

log loss function

log loss function은 Logistic Regression의 loss 함수이다. 이전에 배웠던 Logisitic Regression에서 $\theta$를 추정하기 위해 MCLE를 썼을 때 결과가 베르누이 시행인 것을 고려해주면 다음과 같이 추정할 수 있었다.

 

$\hat{\theta} = argmax_{\theta} \sum_{1 \leq i \leq N} log(P(Y_i | X_i ; \theta))$

$ = argmax_{\theta} \sum_{1 \leq i \leq N} \left \{ Y_i X_i \theta - log(1 + e^{X_i \theta}) \right \}$

 

여기서 $Y_i X_i \theta - log(1 + e^{X_i \theta})$부분을 살펴보면 앞에 $Y_i X_i \theta$는 위 Hinge loss에서의 $(w x_j + b) y_j$와 유사하므로, 뒤에 $-log(1 + e^{X_i \theta})$는 loss function으로 볼 수 있다. 

 

이 loss function에서의 slack variable은 

 

$\xi_j = -log(P(Y_j | X_j, w, b)) = log (1 + e^{(wx_j + b)y_i})$

 

과 같이 나타낼 수 있었다.

 

 

어떤 loss function이 좋은가?

어떤 loss function이 좋다고 할 수 없고 개별 모델의 특성을 고려하여 어떤 loss function을 선택할지 고려해야 한다.

 

 

 

 

 

Hinge loss의 $min_{w, b} \left \| w \right \| + C \sum_{j} \xi_{j}$에서 C를 어떻게 결정하느냐에 따라서 SVM의 performance가 달라질 수 있다. C값에 따른 Decision Boundary의 변화를 살펴보자.

 

Strength of the Loss Function


아래의 그래프는 C값의 변화에 따른 Decision Boundary의 변화를 나타낸 것이다.

 

 

여기서 C가 특정값 이상이 되면 더 이상 Decision Boundary가 움직이지 않고 고정됨을 알 수 있다. 그렇다면 C를 무조건 크게만 주면 되는 것일까? 우리가 지금은 Train dataset에 대해서만 SVM을 적용한 것이기 때문에 Test dataset이 들어올 것을 고려해주어야 한다. 따라서 Train dataset에서 적절한 C를 찾지 않고 무조건 C를 큰 값을 주는 것은 Test dataset이 들어올 경우 잘 맞지 않을 가능성이 크다. 즉, 적절한 C를 찾아주는 것이 더 좋다.

 

 

 

 

-히비스서커스-

 

728x90