본문 바로가기
Machine Learning

30. SVM (Support Vector Machine) - Kernel에 대하여

by 대소니 2016. 8. 14.


Kernel

이번에는 non-linear 에 대해서 알아보겠습니다. 아래 그림과 같이 dataset이 있고 h 함수가 오른쪽 공식과 같습니다. x 에 대한 다항식을 f로 치환하면 아래쪽의 함수와 같이 나타낼 수 있었습니다. 여기서 f를 어떻게 하면 잘 선택을 할 수 있을지에 대해서 살펴보려고 합니다.


임의로 세개의 점을 아래 그래프와 같이 지정을 해보겠습니다. 이 점들을 l 이라고 표현하고 landmarks라고 읽습니다.

어떠한 data x에 대해서 f를 x, l에 대한 similarity(유사성)의 함수라고 하겠습니다. 이것은 또 수학적으로 표현을 하면 다음과 같이 됩니다.

exp(- (|| x - l1 ||^2 ) / 2σ^2)

이것의 의미는 x와 l1과의 euclidean distance 값에 제곱을 sigma로 구성된 값으로 나누면 됩니다. 여기서 sigma는 통계학에서의 standard deviation(표준편차)를 의미합니다. 그리고 sigma의 제곱은 variance(분산)이라고 합니다.

이렇게 생성된 similarity 함수이자 f 함수를 kernel 이라고 합니다. 그리고 우리가 사용하는 특별한 kernel을 Gaussian Kernel이라고 합니다. 이것을 조금더 쉽게 표현하기 위해서 이제부터는 다음과 같이 하겠습니다.

f1 = k(x, l1)


앞에서 배운 kernel을 정리하면 아래 그림의 상단에 공식과 같이 되며 이것은 다시 j가 1부터 n까지의 (x-l)^2의 합으로 표현을 할 수 있습니다. 

만약 x가 l과 비슷하다면 위의 값이 0이 되며 결국 f1은 1에 가까운 값을 가지게 될 것입니다. 또 반대로 x가 l과 멀고 다를 수록 분자의 값이 큰값이 되며 이것은 결국 f1의 값이 0에 가깝게 되는 특징을 알 수 있습니다.



예를 들어서 살펴보겠습니다. 아래 그림과 같이 l 이 3,5의 값을 가지고 있습니다. sigma^2 = 1이라고 할때 그래프로 표현을 하면 가장 왼쪽의 그림과 같이 됩니다. x 값이 3,5와 가까울 수록 f1의 값은 1이 되고 거리가 멀어질 수록 0의 값이 됩니다.

여기서 sigma^2의 값이 0.5로 줄어들면 가운데 그래프와 같이 모양이 날카롭게 변하고 반대로 3의 값으로 커지게 되면 오른쪽 그래프와 같이 모양이 퍼지는 형태로 나타나는 특징이 있습니다.

이러한 특징을 보이는 sigma^2 을 Gaussian Kernel에서의 parameter라고 하며 이 값에 따라서 경사도가 달라지게 됩니다.



아래 그림에서와 같이 1의 예측되는 결과를 나타내주는 세타와 f의 함수를 가정했습니다. 이때 세타의 값들이 파란색으로 표현된 것과 같이 된다고 하겠습니다. 이때 그래프에서 l1의 근처에 있는 x에 대해서 살펴보겠습니다. 

분홍색으로 표현된 점과 공식과 같이 f1 = 1, f2=0, f3 = 0이 되어 결과 값이 0.5가 됩니다. 0.5는 0보다 큰 값임으로 최종 결과는 y=1이 될 것입니다. 이번에는 멀리있는 하늘색으로 표현된 점과 공식에 대해서 보겠습니다. f1,f2,f3 = 0 이 되어 최종값이 -0.5가 됩니다. 그리고 -0.5는 0보다 작은 값임으로 최종 예측 결과는 y=0이 될 것입니다.

이와 같이 하여 생성되는 Decision Boundary는 빨간색의 타원형(non-linear)의 형태가 되게 됩니다.


위에서는 landmarks를 3개만 지정했었는데 이번에는 dataset의 사이즈인 m 만큼 지정을 해보겠습니다. 즉 모든 data를 landmark로 생성해보는 것입니다. 아래 그림의 하단과 같이 x(i) = l(i)와 같이 생성합니다. l은 1부터 m 만큼이 만들어지게 됩니다. 

이것은 우리의 features이 dataset에 얼마나 유사성이 큰지(근접한지)를 측정하는 방법이 됩니다.


아래 그림에서와 같이 x,y가 주어지고 l = x로 놓았습니다. f1은 x와 l1에 대한 similarity의 함수가 되며 landmarks가 m 사이즈만큼 존재하므로 f 함수도 m 만큼의 사이즈로 존재하게 됩니다. 우리가 l = x로 놓았으니 f 함수의 값은 1에 가까운 값이 될 것입니다. 이때 f0 = 1 이 됩니다. 이전에 배운 bias term과 비슷하게 생각하면 됩니다.

이렇게 생성된 f 는 0부터 m 만큼의 사이즈를 가짐으로 m+1의 크기를 가지는 벡터가 됩니다.



우리의 hypothesis는 data x에 대해서 m+1 사이즈를 가지는 f 함수를 연산하게 됩니다. 그리고 세타t f 가 0이상의 값을 가질 때  y = 1이 됩니다. 이때의 세타도 f와 마찬가지로 m+1 사이즈를 가지며 세타0 f0 + 세타1 f1 + 세타m fm의 공식이 됩니다.

앞에서 살펴본 cost 함수를 다시 살펴보겠습니다. cost1과 cost0 함수는 세타와 f의 함수로 표현이 되며 뒷부분의 공식은 세타가 m 만큼의 사이즈를 가지고 있으므로 결국은 n = m이 될 것입니다.

그리고 세타 제곱은 세타t 세타로 표현이 가능하며 세타 백터는 m 사이즈를 갖는 벡터가 되고 이때 세타0은 무시됩니다. 여기서 세타의 제곱은 세타 벡터의 norm의 제곱이 되고 이것은 다시 세타t m 세타로 표현이 될 수 있습니다. 이것은 수학적인 계산을 통해서 이렇게 변화하게 되는데 자세한 내용을 다루지는 않습니다만 알아두면 좋습니다.(아래 그림의 하단부분) 

m은 사용하게 되는 kernel에 대한 Matrix로서 세타를 rescale하는 역할을 하며, 구현시에 for 반복문을 사용하지 않고 matrix연산을 사용할 수 있어 유용합니다. 실제로 dataset이 아주 클때 모든 세타와 f에 대해서 연산을 하는 것은 많은 비용이 들게 됩니다. 하지만 이렇게 변화한 연산 방식을 사용하면 보다 효율적으로 연산이 가능하며 대부분의 tools에서 제공하기 때문에 너무 걱정을 하지는 않아도 됩니다.



Bias, Variance trade off

SVM 알고리즘에서 bias와 variance는 C의 값과 sigma^2에 의해서 조절이 가능합니다.

C의 값이 크면 Lower bias, high variance가 되며, 값이 작으면 higher bias, low variance가 됩니다. C는 logistic regression에서의 lambda의 역수이며 비슷한 작용을 하게 됩니다.

sigma^2은 f features의 경사도를 의미하며 이 값이 커지면 higher bias, lower variance가 되고 경사가 보다 부드럽게 퍼지는 형태가 됩니다. 또 이 값이 작으면 lower bias, higher variance가 되고 경사가 급하게 떨어지는 형태가 됩니다.

이전에 bias, variance에 대해서 배운것과 동일하게 우리의 알고리즘에 문제점을 분석하고 적절하게 해결하기 위해서 이 두가지 값을 적절하게 조절하면 좋은 결과를 나타내는 알고리즘을(머신러닝 시스템)을 만들 수 있겠습니다.


댓글