Coursera의 Machine Learning에서 SVM에 대해서 강의를 들었지만, 조금 부족한 부분이 있어서 따로 더 공부를 해보았습니다.
강의에서 SVM을 설명할 때는 Logistic Regression에서 시작해서 Cost Function으로 hinge loss라는 함수를 사용하면서 설명을 했었습니다.
강의에서와 시작점은 다르지만, 결국 SVM은 주어진 data를 분류할 때, 클래스들 사이의 가장 적절한 Decision Boundary를 결정하는 것이 목적입니다.
SVM에는 선형 SVM 분류기, 비선형 SVM 분류기가 있고 선형 SVM에서도 소프트 마진 분류기, 하드 마진 분류기로 나뉩니다. 우선 선형 SVM 분류기(하드 마진)부터 살펴봅시다.
- 선형 SVM 분류기(하드 마진)
위 data 분포와 같이 positive class(+)와 negative class(-)를 분류해야하는 문제가 있을 때, 우리는 여러 가지의 Decision Boundary(초록색, 노란색, 하늘색 점선)를 구할 수 있습니다. 그 중에서 직관적으로 class 경계에 있는 두 class의 각 sample 사이의 거리가 가장 넓은 어떠한 직선이 가장 적절한 Decision boundary(노란색 점선)라고 예상할 수 있습니다. 이때, 두 sample 사이의 거리를 margin이라고 하며 SVM은 이런 Decision boundary를 찾아주게 됩니다. 이러한 특성 때문에 SVM은 Large margin classification이라고 합니다.
SVM은 margin이 가장 넓은 Decision Boundary를 찾아줍니다. 그렇다면 어떻게 최대의 margin을 가지는 Decision Boundary를 찾는지 알아봅시다.
위 그래프에서 노란색 점선을 중심선, 빨간색/파란색 점선을 경계선이라고 지칭하겠습니다.
우선 Decision Boundary를 정하기 위한 Decision Rule을 결정해야 하는데, 이 rule은 어떤 형태인지 생각해보아야 합니다.
여기서 w는 강의에서 나왔던 Parameter θ를 의미하며, 이 벡터는 중심선에 직교하는 법선 벡터(normal vector)입니다.
이제 우리가 알고자하는 샘플 x가 있을 때, 우리는 이 샘플이 중심선의 어느 쪽에 위치하는 지 알아야합니다. 우리가 여기서 할 수 있는 방법은 w와 x를 내적한 후에 그 값이 어떠한 상수 c보다 큰 지 확인하는 것입니다.(w⋅x≥0)
이 내적 결과값이 특정한 상수보다 크다면 positive, 작다면 negative로 분류할 수 있습니다.
이것을 일반화시켜서 표현하면 다음과 같이 표현할 수 있습니다.
w⋅x+b≥0, ,then positive class(1)
이 (1)식이 Decision rule이 되는 것이고, w⋅x+b=0이 중심선의 방정식이 됩니다.
여기서 w와 b를 구해야 하는데, 사실 중심선에 직교하는 벡터(normal vector)는 다양합니다. 그렇기 때문에 w,b를 구하기 위해서 추가적인 제약조건들이 필요합니다.
w는 왜 중심선에 직교하는 벡터인가 ?
w=(w1,w2)가 있을 때, 이 벡터의 기울기는 w1w2입니다.
그리고 중심선 위에 존재하는 어느 x=(x1,x2)가 있을 때, 이 중심선의 방정식은 아래와 같이 나타낼 수 있습니다.
w1x1+w2x2+b=0↔x2=−w2w1x1−w2b
이 중심선의 기울기가 −w2w1이고, 즉, 법선의 기울기와의 곱이 -1이기 때문에 w는 중심선에 직교하는 벡터가 됩니다.
우리는 위의 (1)식에서 조금 더 나아가서 positive class의 샘플 x+와 negative class의 샘플 x−에 대해서 아래와 같이 설정해봅시다.
w⋅x++b≥1w⋅x−+b≤−1(2)
이것은 우리가 방금 정한 decision rule에서 1보다 큰 영역(파란색 실선 위쪽)이 positive class이고, -1보다 작은 영역(빨간색 실선 아래쪽)이 negative class라는 의미이빈다.(여기서 1이라는 크기는 중요하지 않고, 부호가 서로 반대인 것이 중요합니다. 크기는 계산 편의상 1로 설정했습니다)
(2)에서 두 가지의 식이 나왔기 때문에 계산하기에 불편함이 있습니다. 그래서 우리는 두 가지의 식을 하나로 표현하기 위해서 yi라는 변수를 새롭게 정의해서 식을 하나로 만들 것입니다.
yi={1−1 , if x in positive class , if x in negative class
이 편도함수 방정식을 풀게되면, x=23,y=−411,α=1을 계산할 수 있습니다. 주어진 조건을 만족하는 정류점은 하나뿐이므로 이 값이 제약이 있는 최적화 문제의 해가 됩니다. 즉, 라그랑주 승수법은 연립방정식에 대해서만 적용 가능하며, 만약 제약 조건이 연립부등식이라면 KKT조건을 만족하도록 라그랑주 승수법을 적용하면 됩니다.
우리는 이미 정의한 목적 함수와 제약식을 라그랑주 승수법으로 식을 다시 쓰면 아래와 같습니다.
위 식을 풀어서 α를 구하면, (7)식으로 w를 구할 수 있고, yi(w⋅xi+b)−1=0 을 통해서 b를 구할 수 있습니다.
LD를 보면((9)식), α에 대해서 첫째항은 선형합이고, 둘째항은 quadratic하기 때문에 QP 테크닉을 사용해서 α를 항상 구할 수 있습니다. NN과 달리 local optima에 빠질 걱정을 하지 않아도 되며, SVM으로 구한 해는 언제나 최적의 해라는 것이 보장되어 있습니다.
따라서 support vector들로 이루어진 decision boundary가 가장 최적의 boundary이라고 할 수 있습니다.
((9)식은 목적 함수의 prime problem인 랑그랑주 함수 (6)식을 변형한 목적 함수의 dual problem(쌍대형식)입니다.)
- 선형 SVM 분류기(소프트 마진)
모든 샘플들이 경계선 바깥쪽에 올바르게 분류되어 있다면 하드 마진이라고 하지만, 하드 마진 분류에는 두 가지 문제점이 존재합니다. 데이터가 선형적으로 구분되어 있어야 제대로 동작하고, 이상치(Outlier)에 민감합니다. 이러한 문제를 피하려면 좀 더 유연한 모델이 필요하며, margin을 가능한 최대로 유지하는 것과 마진 오류(margin violation) 사이에 적절한 균형을 잡아야 합니다.
소프트 마진 분류기의 목적 함수를 구성하려면 각 샘플에 대해서 슬랙 변수(slack variable ζi≥0)을 도입해야 합니다. ζi는 i번째 sample이 얼마나 마진을 위반할 지 결정하게 됩니다. 여기서 우리는 마진 오류를 최소화하기 위해서 가능한 한 슬랙 변수를 작게 만드는 것과 마진을 크게 하기 위해 21∥∥w∥∥2를 가능한 작게 만드는 것, 두 가지 상충되는 목표를 가지게 됩니다. 여기에서 하이퍼파라미터 C가 등장하고, 이 파라미터는 두 목표 사이의 trade-off를 정의합니다.
결국 아래와 같은 제약 있는 최적화 문제가 됩니다.
subject to w,b,ζminimize21∥∥w∥∥2+Ci=1∑mζiyi(wTxi+b)≥1−ζi,ζi≥0
그리고 하드 마진과 동일하게 KKT 조건을 만족하도록 라그랑주 승수법을 적용하면 아래와 같은 쌍대 형식의 최적화 문제를 얻을 수 있습니다.
subject to αmaximizei=1∑m−21i∑j∑αiαjyiyjxiTxj0≤αi≤C,i=1∑mαiyi=0 for i=1,⋯,m
ζi는 우리가 신경 쓸 필요 없으며, 적절한 C만 찾으면 됩니다.
- 비선형 SVM 분류기
data들이 linear separable하지 않는다면 앞서 적용한 SVM은 잘 동작하지 않을 것입니다. 이런 경우에는 다항 특성과 같은 특성(feature)을 더 추가하여서, 차원을 증가시켜서 선형적으로 분류할 수 있도록 만들고 SVM을 사용하는 방법이 있습니다. 이때 사용되는 것이 커널 함수(K)입니다.
[다항식 커널]
아래와 같은 다항식 매핑 함수로 특성을 추가하여서 차원을 높혀 SVM을 적용합니다.
ϕ(x)=ϕ((x1x2))=⎝⎛x122x1x2x22⎠⎞
다음과 같은 커널이 사용됩니다.
K(a,b)=(γaTb+r)d
[가우시안 커널]
각 data들이 특정 landmark l과 얼마나 유사한 지 정하는 similarity 함수로 계산한 특성을 추가하는 방법입니다. similarity 함수로 가우시안 커널을 사용합니다.
핵심은 모든 Training Example에 변환 ϕ를 적용하면 쌍대문제(dual problem)에 내적 ϕ(xi)Tϕ(xj)가 포함될 것 입니다. 하지만 2차 다항식 변환이라면 변환된 벡터의 내적을 간단하게 (xiTxj)2으로 바꿀 수 있습니다. 그래서 실제 훈련 샘플을 변환할 필요가 없습니다. 결과는 실제로 training example을 어렵게 변환해서 선형 SVM 알고리즘을 적용한 것과 완전히 동일하지만, 계산적인 측면에서 훨씬 효율적입니다. 이것이 커널 트릭입니다.
댓글