# 선형 SVM 분류 모형
가중치 벡터 w , 편향 b
샘플 x 에 w 을 점곱하고 b 를 더해 계산한 결과를 토대로 예측 ˆy 를 구함
wT⋅x+b=w1x1+⋯+wnxn+b
ˆy={0wT⋅x+b<01wT⋅x+b>=0
SVM 분류 모형은 제한된 마진 오류 내에서 가장 큰 마진을 갖는 w 와 b 를 찾아야 한다. 이때 w 은 결정 모델의 기울기이며 기울기를 줄일 수록 큰 마진을 갖게 된다.
# 목적 함수
하드 마진 모델일 경우, 양성 샘플은 결정함수 값이 1보다 크며, 음성샘플은 결정함수 값이 -1 보다 작게 된다.
음성샘플 yi = 0 일때 ti = -1, 양성샘플 yi = 1 일때 ti = 1 이 되는 ti 를 가정하면
목적함수는 다음과 같게 되며
minimizew,b12wT⋅w
제약조건은 다음과 같다
ti(wT⋅xi+b)>=1
소프트 마진 모델일 경우 각 샘플에 대한 슬랙변수 ζi >= 0 을 도입하여 얼마나 마진을 위반할지 결정한다.
가중치 벡터를 최소화 해야 하는 상황과 슬랙 변수를 최소화 해야 하는 상황의 트레이드오프를 하이퍼파라미터 C 를 이용해 결정한다.
소프트 마진 모델의 목적함수와 제약조건은 다음과 같다.
minimizew,b,ζ12wT⋅w+Cm∑i=1ζi
ti(wT⋅xi+b)>=1−ζi,ζi>=0
# 콰드라틱 프로그래밍(QP)
선형적인 제약조건 하에 볼록함수 2차 최적화 문제는 quadratic programming 문제이며, 일반화된 공식은 다음과 같다.
minimizep12PT⋅H⋅P+fT⋅P,A⋅P<=b
P : np 차원 벡터
H : (np×np) 행렬
f : np 차원 벡터
A : (nc×np) 차원 행렬
b : nc 차원 벡터
np : 모델 파라미터 수, nc : 제약 수
콰드라틱 프로그래밍은 라그랑주 승수를 응용한 알고리즘으로 풀 수 있을 것이며, 필자도 아직 공부 중이라 풀이법을 모르기 때문에 관련 논문 을 참고할 수 있다.
# 쌍대(dual) 문제
위의 콰드라틱 프로그래밍 문제를 원문제로 해결하는 방법이 있고 쌍대 문제로 해결하는 방법이 있다.
쌍대 문제는 SVM 모델의 연산량을 마법과 같이 줄여주는 수학적 skill 인 커널 트릭(kernel trick)을 가능케 하는 접근 방법이다.
minimizeα12m∑i=1m∑j=1αiαjtitjxTi⋅xj−m∑i=1αj
subject to i=1,2,⋯,mαi>0
위의 목적함수를 최소화하는 벡터 ˆα 를 찾아 ˆw 과 ˆb 를 구할 수 있다.
ˆw=m∑i=1ˆαitixi
ˆb=1nsm∑i=1(ti−ˆwT⋅xi),ˆαi>0
# 커널 트릭
예를 들어 2차원 데이터 상에서 선형 SVM 분류기를 훈련시키기 위해 데이터를 2차원으로 매핑하는 함수 ϕ 가 있다고 하자. 데이터 x 를 매핑한 결과는 다음과 같을 것이다.
ϕ(x)=(x1x2)=(x21√2x1x2x22)
이렇게 3차원 벡터가 만들어진다. 데이터 a 와 b 를 ϕ 함수로 매핑시키고 둘을 점곱한 결과는 다음과 같다.
ϕ(a)T⋅ϕ(b)T=(a21√2a1a2a22)T⋅(b21√2b1b2b22)=a21b21+2a1a2b1b2+a22b22
이는 다음의 결과와 같다
(a1b1+a2b2)2=((a1a2)T⋅(b1b2))2=(aT⋅b)2
와! 놀랍지 않은가???
실제 매핑함수를 구하지 않고도 매핑함수끼리의 점곱을 원래 데이터의 점곱으로 구할 수가 있다. 이것이 이번 포스트의 핵심 내용인 커널 트릭 이다.
위에 살펴본 쌍대 문제의 목적함수에 매핑함수 ϕ 를 적용하면, ϕ(xi)T⋅ϕ(xj) 를 (xTi⋅xj)2 바꿀 수 있고, 이는 실제로 데이터를 다차원으로 매핑해서 기하 급수적으로 늘어난 특성 값을 일일히 계산하지 않고도 그와 같은 결과를 낼 수 있게 해준다.
모델이 새로운 샘플 x 에 대한 예측값을 예상할 때도 커널 트릭을 이용하여 ˆw 과 ˆb 를 직접 구하지 않고 예측값을 도출할 수 있다.
이러한 마법같은 단순화 기법은 SVM 모델에서 다차원 데이터를 다룰 때 널리 사용된다.
일반적으로 많이 쓰이는 커널들은 아래가 있다.
선형커널 K(a,b) = aT⋅b
다항식 커널 K(a,b) = (γaT⋅b+r)d
가우시안RBF 커널 K(a,b) = exp(−γ‖a−b‖2)
시그모이드 커널 K(a,b) = tanh(γaT⋅b+r)
댓글