※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.
<Support Vector Machine>
- Optimization, Cost Function
logistic regression에서는 $ \theta^Tx $가 0 이상이면 1(hypothesis(x) >= 0.5 ), 그렇지 않으면 0으로 판단했었다.
SVM을 통해서는 y가 1일 때 , hypothesis의 값도 단순히 0.5를 기준으로 판단하는 것이 아니라 실제 1에 근접한 수가 되기를 목표로 하고, 반대로 y가 0이라면 hypothesis 또한 0에 근접한 수가 되기를 목표한다.
그를 위해 기존 logistic regression에서의 cost를 조금 변형한다.
y가 1이라면 z가 1 이상일 때는 0, 그 이하에는 직선이 되는 위 그림의 좌측 그래프와 같은 cost 를 정의하고, y=0인 경우는 오른쪽 그래프와 같이 z 가 -1 이하라면 그 값이 0이 되는 함수를 정의하는 것이다.
(각각 cost1, cost0)
위 cost를 도입하여 최정적으로 SVM의 cost function을 정의하면 다음과 같다.
logistic regression에서의 cost function과 거의 유사하다.
우선 cost를 새로 도입하고, 기존 식에 포함되었던 1/m은 제거하였고(m을 곱해도 optimization 후 파라미터에 영향x), 같은 원리로 $ C = \frac{1}{\lambda } $를 곱해주면 된다.
SVM의 hypothesis 는 다음과 같다.
$ h_\theta(x) = 1 (\theta^Tx \geq 0) $
$ h_\theta(x) = 0 (\theta^Tx < 0) $
Logistic Regression의 hypothesis는 sigmoid function을 통해 확률을 계산했던 반면, SVM에서는 단순히 1, 0 만을 결과로 갖는다.
- Large Margin Classifier
SVM은 Large Margin Classifier라고 불리기도 한다.
Margin은 decision boundary와 가장 가까운 데이터 사이의 거리를 의미한다.
즉, 위의 그림처럼 여러 decision boundary가 이용될 수 있지만, SVM을 통해서는 margin이 가장 큰 decision boundary가 가장 선택된다는 것이다.
앞서 살펴보았던 cost function에서 C를 큰 값으로 설정하면, optimization은 안의 값을 0으로 만드는 방향으로 이뤄질 것이다. $ \theta^Tx $가 1 이상이거나 (y = 1), -1 이하(y = 0)가 되도록 만들면 아예 0이 될 수 있도록 cost 함수를 정의했기 때문에 가능하다.
그렇게 된다면(C가 충분히 크다면) cost function은 다음과 같이 단순화될 수 있다.
단, 기존 cost function에서 앞의 항을 0으로 만든다는 조건이 있었기 때문에
$ \Theta^Tx \geq 1 $ (if y = 1)
$ \Theta^Tx \leq -1 $ (if y = 0)
을 만족해야 한다.
왜 C가 충분히 커서 위와 같은 cost function으로 만드는 것이 Large Margin을 유도하는지에 대해서는 수학적으로 확인할 수 있다.
- Large Margin이 되는 이유 -> 수학적 관점
우선 inner product에 대해 정리하자면 다음과 같다.
u와 v의 inner product는 의미는 같다.
v를 u에 정사영한 vector의 크기(음수 가능)와 u의 크기를 곱하는 것
이를 수식으로 계산하면 다음과 같다.
$ u^Tv = p*\left \| u \right \| = u_1v_1 + u_2v_2 ( +...) $
위 식에서 p가 v를 u에 정사영하여 생긴 vector의 크기를 의미하고 정확히는 $ vcos(\theta) $로 계산된다.
이제 다시 SVM의 cost fucntion을 살펴보자.
위 inner product의 의미를 의식하여 보면,
$ \theta^Tx $는 theta와 input data x의 inner product임을 알 수 있다.
즉, input data를 $ \theta $에 정사형한 벡터의 크기와 $ \theta $의 크기의 곱으로 계산된다.
이제 다음 2가지 사항만 고려하면 왜 large margin이 결정되는지 이해할 수 있다.
(1) $ \theta $는 decision boundary와 perpendicular하다.
-> decision boundary는 z = 0인 점들을 이은 선이다(at logistic regression : h(x) = 0.5 ).
즉, decision boundary위의 임의의 점 x에 대해 $ \theta^Tx = 0 $를 만족하기 때문.
(더 정확히는 decision boundary 위의 두 점 a, b에 대해 $ \theta^Ta - \theta^Tb = \theta^T(a-b) = 0 $ 을 만족, perpendicular)
(2) cost function에서 알 수 있듯이 $ \theta$ 를 minimize하면서 $ p^{(i)}\cdot \left \| \theta \right \| $ 가 1 이상인 것을 만족하려면(y = 0 인 경우면 -1 이하) p, $ \theta$에 x를 정사영시킨 벡터의 크기가 커야한다.
이를 그림으로 표현하면 더욱 직관적으로 이해할 수 있다.
decision boundary와 $\theta$가 수직인 점을 생각해보면, decision boundary로 빨간선을 선택했을 때와 파란선을 선택했을 때 \$theta\에 가장 가까운 데이터가 어떻게 정사영되는지 알 수 있다.
위의 (2)번 문항에서 p가 margin에 대응된다. 따라서 margin이 클수록 cost function을 최소화하는 $ \theta$가 선택되는 것이다.
<Kernel>
Kernel은 landmark과의 similarity를 기준으로 기존 feature를 바탕으로 새로운 feature를 생성해주는 함수이다.
Kernel을 적용하여 non-linear한 decision boundary를 만들 수 있다.
(Landmark는 similarity를 평가할 때 기준이 될 임의의 점이다.)
f1~f3는 각각 landmark1~3에 대한 similarity(gaussian kernel, 유클리안 거리로도 볼 수 있음)를 나타낸다.
파라미터가 위 이미지처럼 설정되어있다면 l1과 l2에 근접한 데이터만 1로 predict할 것이고, 최종적으로 2개의 원을 겹쳐놓은 것 같은 non-linear한 decision boundary를 만들 수 있다.
* SVM의 cost function 때문에 가끔 $ \theta^Tx $가 1, -1을 기준으로 predict 해야되는 것이 아닌지 헷갈릴 수 있는데, 1, -1은 traing 시에 파라미터를 설정하기 위한 것이고 예측은 동일하게 0을 기준으로 한다.
여기서 similarity는 gaussian kernel을 통해 계산되었다. 대부분의 경우 사용되는 kernel이다.
*시그마는 표준편차가 아니라 단순히 계산에 사용될 parameter 이다.
- Landmark 선택
그렇다면 Landmark는 어떻게 설정해야 할까.
결론부터 얘기하자면 train data를 모두 landmark로 사용하면 된다.
landmark를 기준(+ $ \theta $)으로 data를 판단하게 되기 때문에, train data를 사용하는 것이 어떻게 보면 당연하다.
그렇기 때문에 kernel을 사용하면,
m개의 train data에 대해서 feature는 m개로 변하게 된다.
(각각의 feature는 landmark-(i)와의 similarity를 기준으로 결정되므로 m개의 featrue)
그렇기 때문에 cost function 또한 다음과 같이 변한다는 것에 주의해야 한다.
※ 실제로 cost function을 계산하는 라이브러리 등에서는 우측의 parameter 제곱의 합을 matrix의 연산으로 계산하지만, 추가적으로 다른 matrix를 곱하여 계산한다고 한다.
-> 계산적인 측면에서 큰 차이를 보인다. 그러나 logistic regression에서는 이러한 개선이 어렵기 때문에 kernel은 SVM에서 소개하였다.
-> logstic regression에서 사용이 어려운 자세한 이유를 알아보려 했지만, 강의를 듣는 현 시점에서는 logistic regression에서도 kernel을 적용하는 경우도 있는 것 같았다.
- SVM의 paramater(C , $ \sigma $) 선택
parameter를 어떻게 선택하는지에 따라 bais, variance 문제와 관련이 있다.
(1) C
C는 logistic regression에서 regularization parameter, 람다의 역수와 동일하게 볼 수 있다.
-> C가 크다면 regularization이 적게 이뤄지고, C가 작다면 regularization이 크게 이뤄진다.
즉, C가 크면 lower bias, high variance
C가 작으면 higer bias, low variance이다.
(2) $\sigma^2$
※sklearn의 SVC 에서는 gamma parameter가 반비례 관계로 대응된다.
gaussian kernel을 이용하면 $ \sigma$도 설정해야 한다.
우측의 그래프가 sigma에 따른 gaussian kernel 의 차이를 보여준다.
시그마 제곱이 크면 1에 근접한 범위가 넓다 -> similarity를 잘 인정해준다. -> bais가 크고, variance가 작다.
반대의 경우도 같은 원리로 생각할 수 있다.
- SVM의 사용
SVM을 사용할 때는 잘 정리된 패키지를 사용하는 것을 권장한다.
(cost function optimization의 구현에 행렬 연산 구현 등이 필요한듯, optimization function은 convex한 것은 동일하다)
(1) parameter 선택?
앞서 다룬 내용대로 bias, variance를 고려하여 알맞게 고르면 된다.
(2) Kernel의 선택?
kernel을 사용하지 않는 linear kernel 또는 Gaussian Kernel을 가장 일반적으로 사용한다.
linear kernel의 경우 m은 크고 n은 작을 때 사용한다. (데이터의 수는 작고, feature의 수는 많음)
Gaussian Kernel의 경우 feature는 작고, m은 클 때 사용한다.
특히, Gaussian Kernel을 사용할때는 feature scaling이 필수이다.
scaling을 하지 않아 혼자 scale이 큰 feature가 있다면, 그 feature가 similarity를 결정하게 될 것이다.
* 이 외에도 polynomial kernel 등 다양한 커널이 있다.
(3) logistic regression vs SVM
logistic regression 모델과 SVM 모델은 유사한 점이 많은데, 그렇다면 어떨 때 사용해야 어떤 모델을 사용해야 할까?
● n이 m에 비해 큰 경우,
logistic regression이나 SVM without kernel을 사용하면 좋다.
-> 우선 feature는 충분하여 두 모델 모두 적용이 가능하지만, data가 적기때문에 매우 복잡한 non-linear function을 적용하기에는 적합하지 않다.
● n은 작고, m은 적당한 경우
Gaussian kernel SVM.
-> feature가 많지 않다면 logistic regression은 적합하지 않을 수 있고(high bias), 많은 데이터도 SVM을 통해 non-linear하게 설명가능. 또한 m이 적당하다면 gaussian kernel을 적용하는 것에 연산적 부담이 적음(50,000 이상부터는 부담될 수 있음)
● n이 작고, m이 매우 큰 경우
다시 logistic regression이나(create more feature는 필요) SVM with linear kernel을 사용하면 좋다.
-> 우선 앞서 말했듯이 m이 50,000 이상이라면 가우시안 커널을 적용하는 것은 무리가 있음.
그러나 n은 작기 때문에 logistic regression이나 SVM without kernel을 사용하되 추가적인 feature를 생성해야 함.
추가로, Neural Network는 모든 경우에 적용해볼 수도 있지만, 비교적으로 연산이 느릴 수 있다.
또한 실제로 문제가 되는 경우는 거의 없지만, local minimum이 존재한다는 차이도 있긴하다.
'머신러닝 > Machine Learning(Ng)' 카테고리의 다른 글
[8주차 - 2] Dimensionality Reduction, PCA (0) | 2021.08.22 |
---|---|
[8주차 - 1] Clustering, K-means algorithm (0) | 2021.08.21 |
[6주차 - 2] prioritizing what to do, error matrix (0) | 2021.08.18 |
[6주차 - 1] 모델 성능, Bias와 Variance (0) | 2021.08.16 |
[5주차] Neural Network - 2 (0) | 2021.08.14 |