2. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 2 -
목 차
번호 주제 PG
I Introduction 3
II Classification overview 4
III Support vector machine with linearly
separable data 6
IV Support vector machine with slack variable 9
V Connectivity with the logistic regression 15
VI Support vector machine with kernel trick 17
VII Conclusion 26
VIII Appendix 28
IX Reference 30
3. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 3 -
1. Introduction
5주차 강의 내용으로 교수님께서 classification의 개념과 대표적인 통계 분류 모형인 logistic
regression에 대해 설명해주셨습니다. Logistic regression은 오즈비(odds-ratio)를 통해 모형을 일정
수준 해석할 수 있는 좋은 분류 방법입니다. 그러나 그 simple한 구조만큼 분류 성능에 있어서는 다른
분류 알고리즘에 비해 아쉬운 것이 사실입니다. 이후, 한계로 지목된 성능을 개선하기 위하여 다양한
분류 알고리즘이 연구되었습니다.
Logistic regression보다 좋은 성능을 보이는 여러 기계학습(Machine Learning) 기반의 분류
모형은 통계학에서 많은 영감을 얻었습니다. Deep learning에서 일반적으로 사용되는 function의 형태인
는 오차항()이 없는 회귀모델의 개형과 유사한 구조이며, numerical 한
방법으로 parameter를 추정하는 경우 초깃값으로 통계학에서 많이 다루는 normal distribution, uniform
distrubution 등을 가정합니다.
그러나 현대 AI와 통계학은 그 노선을 많이 달리하고 있습니다. 통계적 모형은 다양한 가정
(assumption) 위에 수립되고, 모형을 추정하면 이후 그 가정이 일정 수준 만족하는지에 대한 검증
과정을 거칩니다. 이 과정은 통계적 모형이 현상을 설명하고 그것에 대한 해석을 제시하는 데 있어서
매우 중요한 사항입니다. 물론 통계적 모형도 예측(prediction)이 가능하지만, 많은 경우 통계 모형은
해석 가능성에 더 강점을 갖습니다.
반면 대다수의 AI는 예측을 비롯한 어떤 task를 수행하기 위하여 개발된 “기계”에 더
가깝습니다. 물론 AI도 수많은 가정 위에 구축되지만, 이후 그 가정을 검토하는 과정은 많은 경우
생략됩니다. 그냥 task에 대한 성능이 좋다면, 그 모델은 좋은 모델로 평가되고 널리 활용됩니다. 이러한
철학 위에서 다양한 AI 모형은 점차 복잡해졌으며, 모델의 decision에서 사람이 해석 가능한 영역은
점차 줄어들게 되어 소위 “black-box” 모델로 취급되었습니다.
이러한 한계를 극복하기 위하여 최근 XAI(Explainable AI)라는 AI를 해석하고자 하는 영역이
지속적으로 연구되고 있습니다. 이 분야를 통해 AI에서 멀게만 느껴졌던 통계학의 중요성이 다시
대두되고 있습니다. 여러 통계적 모형을 모델의 일부분으로 활용하거나 idea를 얻어 해석을 위한 보조
도구를 개발하는 것입니다.
복잡성과 해석 가능성. AI와 통계의 중요한 연결고리인 이 딜레마를 잘 담고 있는 모형 중
하나가 support vector machine(SVM)이라고 생각했습니다. SVM의 핵심 idea인 분류 경계의 형태에
따라 모델의 복잡도가 결정되기 때문입니다. 또한 분류 경계는 향후 다른 알고리즘에도 폭넓게 적용될
수 있는 직관적이면서 좋은 방법론입니다. 이 외에도 SVM의 여러 특성은 단순히 SVM만의 강점을
넘어서서, 다른 모형으로 확장될 수 있습니다.
본 보고서에서는 통계적 분류 모형 중 좋은 분류 성능을 보이는 support vector machine의
원리와 구현 방식에 대해 살펴보고, SVM의 성능 개선에 중요한 역할을 한 kernel-trick을 다룹니다.
특히, 분류 경계의 형성 과정과, 형성된 경계의 활용 방법을 중점적으로 전개합니다.
4. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 4 -
2. Classification overview
통계학에서 분류(Classification)란 관찰된 데이터가 어떤 범주에 포함될지 분석하는 것입니다.
우리 삶의 다양한 영역에서 분류 문제를 발견할 수 있습니다. 대표적인 분류 예제는 Spam / Non-Spam
분류, 사기 거래 / 정상 거래 분류 등이 있습니다.
분류 모형은 전통적으로 통계학의 영역에서 많이 개발되었습니다. 저희 강의에서 다루었던
logistic regression이나, 데이터 마이닝 강의에서 다루는 의사 결정 나무인 CART(Classification And
Regression Tree) 등 다양한 모델이 알려져 있습니다.
현재 분류 성능이 매우 좋다고 알려진 deep learning 기반 모델이나 gradient boosting 기반의
모델도 사실 위에서 언급한 전통적인 모델의 변형으로 해석할 수 있습니다. 제 보고서에서 핵심으로
다루어질 서포트 벡터 머신(Support Vector Machine / SVM)은 앞서 언급한 모형의 확장으로
분류되지는 않습니다. SVM은 perceptron 기반의 분류 모델에 포함되기 때문입니다.
이처럼 분류 모형에는 다양한 범주가 존재합니다. 이 범주를 구분하는 대표적인 방법은 ‘확률
기반 모델(Probabilistic Model)’과 ‘비확률 기반 모델(Non-Probabilistic Model)’로 분할하는
것입니다. 이 둘을 표로 정리하면 아래와 같습니다.
is given, and denotes a classifier, then
범주 설명 예시
확률 기반
Probabilistic
어떤 데이터가 특정 범주 C에 속할 “확률”을 출력함.
Output은 결국 [0 , 1]의 실수가 된다.
Logistic regression
Naive Bayes
비확률 기반
Non-Probabilistic
어떤 데이터가 속할 “범주 자체”를 출력함
Output은 결국 속할 class 자체가 된다.
Perceptron
Support Vector Machine
확률 기반 모형의 대표적인 예시는 앞서 언급한 logistic regression입니다.
의 형태의
함수는 0과 1 사이의 값을 갖기 때문에 X의 domain을 ∞∞으로 확장할 수 있습니다. 확률이 많이
언급되는 통계학의 특성상 이 확률 기반 모형은 우리의 직관에 부합합니다.
반면 비확률 기반 모델은 데이터에 대해서 class 자체를 출력합니다. 물론 비확률 모델이라고
해서 모델의 학습부터 의사 결정까지 모든 과정에 확률이 전혀 관여하지 않는 것은 아닙니다. SVM과
같은 모형은 확률적인 접근방식을 채택하기보다, 주어진 데이터에 대해서 어떤 경계를 잡고, 경계의
위/아래에 따라 class를 할당합니다.
5. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 5 -
Logistic regression이나 의사결정나무는 다양한 학부 과목에서 다룹니다. 그러나 Support
vector machine을 자세하게 다루는 학부 수업이 아직 없는 것으로 알고 있습니다. 따라서 이 기회를
통하여 SVM에 대해 자세히 알아보고, 이 알고리즘과 기존의 logistic regression과의 연결성을
공부하고자 하였습니다.
SVM은 이진 분류 (Binary classification) 뿐만이 아니라 다중 분류 (Multi-class
classification)에도 활용이 가능합니다. 그러나 본 보고서에서는 모형의 이해에 초점을 맞추기 위하여
이진 분류의 경우만 다루도록 하겠습니다.
물론 SVM도 최근 모형보다는 비교적 전통적인 모형에 속하지만, 이에 대한 이해가 추후
다양한 통계학이나 기계학습 모델을 공부하거나 개발하면서 많은 도움을 줄 수 있을 것으로
생각했습니다. 무엇보다 SVM은 통계학의 해석 가능성과 deep learning의 성능 지향적 특성 사이에
놓인 알고리즘이기 때문에, SVM의 철학을 이해하는 것이 이 둘의 접점을 찾는데 기여할 것이고,
통계학의 지평을 더 넓힐 수 있을 것으로 기대합니다.
본문은 다음과 같이 크게 네 파트로 구성되어 있습니다.
- SVM with linearly separable data.
- SVM with slack variable.
- Connectivity with the logistic regression
- SVM with kernel trick.
Reference에 언급된 자료 중, 본 보고서는 아래 세 자료를 가장 많이 참고하였습니다.
- The Elements of Statistical Learning (2nd Edition) (교재)
- Pattern Recognition and Machine Learning (2006) (교재)
- KAIST 산업공학과 문일철 교수님 기계학습 강의자료 (강의)
본 보고서의 notation 중 소문자와 대문자가 혼용되어 사용하는 경우가 발생합니다. 소문자와
대문자에 따른 차이는 없습니다. (즉, )
6. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 6 -
3. Support vector machine with linearly separable data
3.1. What is a support vector machine?
아래와 같은 예제를 생각해 보겠습니다.
(1) : Raw Data (2) : 가능한 분류 경계선
그림 1. Linearly Separable Case
우리의 목적은 붉은색 점과 푸른색 점을 분류하는 모델을 설계하는 것입니다. 그림 1의 (1)과
같은 경우에는 단순한 선형 직선으로 두 집단을 완벽하게 분류할 수 있습니다. 물론 현실에서 이런
데이터는 거의 존재하지 않습니다. 더불어 이러한 데이터는 SVM이 아닌 더 단순한 모형으로도 충분히
좋은 결과를 얻을 수 있습니다. 하지만 이 예제는 SVM의 작동 원리를 이해하는데 좋은 자료가 되므로
우선은 이 데이터부터 시작하겠습니다.
SVM은 두 집단을 분류하는 경계를 찾는 알고리즘입니다. 여기서 두 집단을 분류하는
직선은 그림 1. (2)에 보이는 (a), (b), (c)를 비롯한 무수히 많은 직선이 있습니다. 이 중, SVM은
“마진(Margin)”을 최대화하는 경계를 찾고자 합니다.
그림 2. Setting Maximum-Margin Linear Classifier
7. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 7 -
여기서 마진이란, 초록색 직선부터 각각 붉은색, 푸른색 직선까지의 면적을 의미합니다.
먼저 각 집단의 데이터 중 서로의 집단에 가장 가까이 있는 점이 있다고 가정해보겠습니다. 그 점을
지나는 직선을 각각 (Red, Blue line)으로 놓을 수 있습니다. 물론 이때
와 는 2차원의 벡터입니다. 이 두 직선은 각 집단의 최전선에 있는 직선이고, 둘은 정확히
서로로부터 y축으로 만큼 이동한 직선입니다. 따라서 두 집단의 중앙지점을 지나는 직선
가 (Green Line) 바로 두 집단의 경계가 될 것입니다.
바로 이 직선의 형태여야 아래 두 조건을 만족합니다.
- 두 집단을 완벽하게 분할함.
- 두 집단의 분류 직선(Green)으로부터 두 집단의 최전선 직선(Red & Blue) 사이의 공간인
마진이 최대화됨.
궁극적으로 우리가 하고자 하는 작업은 위의 두 조건을 만족하는 직선을 찾고자 하는
것입니다. 그런데 이는 2차원이기 때문에 경계면이 직선으로 표현되지만, 차원이 높아지면 더 이상
경계는 직선이 아니고 이와 같은 단순한 시각화로 경계를 찾을 수 없습니다. 따라서 이를 일반화하여
경계면인 초평면(Hyperplane)을 찾는 수학적 과정을 제시해야 합니다. 즉, 위의 예제에서 바로 벡터
와 상수 를 추정하는 방법을 찾아야 한다는 뜻입니다.
3.2. Mathematical optimization
이러한 원리를 토대로, 이제 n차원의 데이터에 대해 동일하게 적용할 수 있는 수식을 정립해야
합니다. 아래 그림을 보겠습니다.
그림 3. Calculating the distance r
임의의 점(벡터) 와 경계선 위에 위치한 점(벡터) 의 거리를 r이라고 하겠습니다. 이 경우
는 에서 직선 와 수직인 방향으로 r만큼 이동하면 도달합니다. 에 수직인
벡터의 방향은 가 되지만, 이는 단위가 남아있기 때문에
의 형태인 unit vector로 바꾸어줍니다.
여기서 거리 는 우리가 최대화하고자 하는 마진과 밀접한 관련이 있습니다. 주어진 조건 내에서 r을
최대화하면, 그것이 곧 마진을 최대화하는 것으로 생각될 수 있기 때문입니다.
8. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 8 -
먼저, 로 정의합니다. Boundary 위의 점들에 대해서는 이
성립하게 되고, 이 경우 임의의 점 x를 다시 표현하면
로 표현이 가능합니다.
이때 에 이를 대입하면,
∙
최종적으로 가 됩니다. 그런데, 는 경계면 위의 점이기 때문에
이 성립. 따라서 이를 모두 정리하면 의 관계식이 도출됩니다.
따라서 우리가 정리하고자 했던 거리 은
로 정리됩니다. … (A)
이 식을, 우리가 원래 하고자 했던 마진 최대화에 적용해보도록 하겠습니다. 각 집단의
최전선에 있었던 직선은 를 만족했었습니다. 이를 위의 거리식(A)에 대입하게 되면
로 둘 수 있습니다. 또한 이는 maximizer maximize
c
minimize 로
연결될 수 있습니다. 어차피 C는 상수이고, 구하고자 하는 모수가 아닌 임의의 값이기 때문입니다.
여기서 구하고자 하는 모수는 & 이므로, 최종적으로 식은 minimize 가 됩니다.
문제는 이 최적화 식은 두 집단을 완벽하게 분할하는 식이 아닙니다. 이를 해결하기 위하여
별도의 장치를 추가해주어야 하는데, 여기서 우리는 임의의 변수를 추가합니다.
즉 우리가 잡은 경계면은 모든 데이터가 각각 위/아래 경계면의 안쪽에 위치하게 되어야
한다는 뜻입니다. 각 데이터의 label은 1 또는 –1이 되고, label을 y 값으로 할당하여, 최적화에
해당하는 제약식으로 추가하게됩니다. 이때, 각 경계면 바로 위에 있는 데이터를 support vector 라고
표현합니다. 여기서 SVM의 SV인 support vector라는 표현이 사용되었습니다.
여기서 여전히 c는 우리가 경계면의 상수항으로 설정한 임의의 값입니다. 따라서 계산의
편의상 1로 설정해도 모수의 추정에는 별다른 영향을 주지 못합니다. 이에 근거하여 원 식과 제약식을
모두 혼합하면 아래와 같습니다.
여기서 는 모든 데이터에 대한 첨자를 의미합니다. 이 최적화 식은 Quadratic Programming을
통해 그 해를 쉽게 구할 수 있습니다. Quadratic Programming에 대한 내용은 Appendix A에
첨부하였습니다. 여기서 구한 해를 바탕으로, 비현실적이었던 우리의 데이터를 보다 현실적인 데이터에
맞게 모수를 추정하는 방법에 대해 이어서 논의하도록 하겠습니다.
9. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 9 -
4. Support vector machine with slack variable
4.1. Introduction to real world data
앞선 예제에서는 데이터가 단순한 초평면으로 완벽하게 분류가 가능한 이상적인 경우에서
SVM의 대략적인 구현 방식에 대해 알아보았습니다. 그러나 현실적으로 단순한 초평면으로 분류가
가능한 데이터는 거의 없으며, 그러한 경우에는 굳이 SVM과 같은 알고리즘이 아니어도 다른 단순한
모델로 충분히 표현 가능합니다.
보다 현실적인 분류 문제를 시각화해보도록 하겠습니다.
(1) : Raw Data (2) Linearly Not Separable
그림 4. Linearly not separable case
그림 4. (1)과 같이, 현실의 분류 데이터는 복잡한 형태로 얽혀있고, 집단 간 구분이 명쾌하게
이루어지지 않습니다. 또한 이러한 데이터는 그림 4. (2)에서 확인 가능하듯이 결코 하나의 직선으로
경계면을 형성할 수 없습니다. 이와 같은 복잡한 데이터에 대해서 SVM은 두 가지 방법으로 해결이
가능합니다. 방법은 아래와 같습니다.
(1) : Acceptance of Error (2) : Non-Linear Boundary
그림 5. Breakthrough for real world problem
10. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 10 -
4.1.1. Accpetance of error
첫 번째 방법은 단순 Hyperplane으로는 모든 데이터를 분류할 수 없음을 인정하고, 이 에러를
모델의 일부로 수용하는 방법입니다. 즉 모델이 분류에 실패하는 case를 감안 하면서 모델을 fitting
하겠다는 뜻입니다. 물론 이때도 경계면이 임의로 생성되는 것이 아니라 slack variable이라는 변수를
추가함으로서 오분류율을 최소화하는 최적의 경계면을 탐색하고자 합니다.
이 방법의 강점은 여전히 모델의 경계면은 선형으로 남아있다는 점입니다. 그에 따라서 모델이
과적합(overfitting)의 문제에서 비교적 자유롭고, 해석이 여전히 가능합니다. 각 변수 축에 대해서
초평면의 좌표를 확인함으로서 class 간 구분 경계를 확인할 수 있고, 이를 토대로 사람이 그 결과를
직관적으로 유추가 가능합니다.
4.1.2. Non-linear boundary
두 번째 방법은 선형 경계면의 제한을 완화하는 방식입니다. 이에 따라서 우리는 비선형의
경계면을 갖추게 되고, 기존의 선형 경계면으로는 분류할 수 없었던 예제까지 분류할 수 있게 됩니다.
이 방법은 추후에 언급되는 Kernel-Trick이라는 방법을 활용하여 구현할 수 있습니다.
이 방법의 강점은 더욱 정밀한 분류가 가능해진다는 점입니다. 그러나 경계면이 비선형으로
바뀜에 따라 사람이 해석할 수 있는 부분은 그만큼 줄어듭니다. 더불어 관측된 데이터에 최적화되기
때문에 과적합의 문제가 선형 경계보다 더 심각하게 발생할 수 있습니다.
이처럼 SVM의 응용에도 해석 가능성과 모델의 분류 성능 간 trade–off 관계가 발생하게
됩니다. 사실 이는 비모수통계학에서 사용되는 비모수 회귀모델 (non-parametric regression)과 비슷한
성격을 갖고 있습니다.
이번 chapter에서는 error를 수용하는 slack-variable method를 알아보고, 이어지는 chapter에서
kernel-trick을 활용하는 비선형 경계면에 대해 알아보겠습니다.
4.2. What is a slack variable?
앞선 예제를 다시 자세히 살펴보도록 하겠습니다.
그림 6. Mis-Classified Case
11. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 11 -
기존의 분류 경계를 고집하는 경우 우리 데이터에는 라는 오분류 데이터가 발생하게
됩니다. 이를 모델의 학습 과정의 일부로 추가하기 위해서, 앞서 언급했던 slack variable을 추가합니다.
Slack variable은 기존에 각자의 경계면 안쪽에 있어야 했던 데이터들이 그 경계면을 넘어와서
존재하는 경우의 penalty를 계산하는 변수입니다. 경계면을 넘어왔는지, 혹은 넘어오지 않았는지를
표시하는 dummy variable로 치환하여 생각할 수도 있지만, 주로 사용하는 방법은 그 침범 정도를
계량하여 더 많이 넘어온 경우를 더 심각한 사례로 처리하는 방법입니다.
구체적인 예시를 통해 확인해보겠습니다.
그림 7. How much did it violate?
앞선 예제에서 라는 데이터는 원래 붉은색 경계면 위쪽에 위치해야 하지만, 푸른색 집단에
위치하고 있습니다. 따라서 이 이 됩니다. 그러나 이 데이터는 붉은색 집단의 데이터이기
때문에 입니다. 따라서 이 됩니다. 이는 위에서 언급한 우리의 제약식을 위반합니다.
이제 그 정도를 계량화하는 작업이 이어서 필요합니다. 데이터가 붉은색 경계면에서 멀리
멀어지면 멀어질수록 작아지게 될텐데, 그 값은 결국 로 측정 가능합니다. 이 전체적인 내용을
아래와 같이 정리할 수 있습니다.
결과적으로 를 Slack Variable이라고 하고, 이를 이용하여 위반 정도를 계량화 할 수 있다는
것입니다. 은 다음과 같은 Hinge Loss를 갖게됩니다.
12. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 12 -
그림 8. Slack Variable and it’s Hinge Loss
즉, 저 값은 1보다 크면 0이되고, 1보다 작을수록 저렇게 선형적으로 증가하는 형태를 띄고
있습니다. 이렇게 정의된 slack variable 를 활용하면, 데이터의 error 정도를 최적화 식에 반영할 수
있습니다. 최종적으로 우리의 Optimization 식은 아래와 같이 정리될 수 있습니다.
대부분의 식은 우리가 앞서 직관적으로 보여왔던 부분과 유사하지만, 한 가지 부분인 C가
추가되었습니다. C는 최적화 과정에서 구하는 상수가 아니라 우리가 모델을 설정하는 단계에서 사람이
임의로 정해주는 값입니다. 일반적으로 C는 0보다 큰 값을 주게 되고, 분류가 잘 안 되는 데이터에
대해서 penalty를 얼마나 줄 것인가를 의미합니다.
C값이 작으면 작을수록 SVM은 오분류 데이터를 중요시하지 않겠다는 뜻이 되고, C값이 크면
클수록 오분류에 대해 민감하게 반응하겠다는 뜻이 됩니다. 이처럼 오류를 허용하는 Margin을 우리는
완화된 경계라는 뜻으로 “Soft-Margin”이라는 표현을 사용합니다. 그리고 오류를 전혀 허용하지 않는
경우의 경계면은 우리는 “Hard-Margin”이라는 표현을 사용하게 됩니다.
13. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 13 -
4.3. Implementation of basic support vector machine
앞선 내용에서 공부한 support vector machine을 python을 활용해서 직접 구현하였습니다.
Data Fitting result of data
그림 9. 이상적인 데이터에서의 support vector machine
그림 9와 같이 이상적인 형태의 데이터에서 support vector machine을 fitting 해보면, 우리가
생각한 이상적인 형태로 support vector들이 형성되는 것을 확인할 수 있습니다. 이어서, 보다 현실적인
형태의 데이터에 대해서 support vector machine을 fitting 해보도록 하겠습니다.
그림 10. Mixing된 데이터에서 C값에 따라 바뀌는 boundaries
14. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 14 -
그림 10을 통해 확인할 수 있듯이, slack variable의 hyper-parameter인 C 값에 따라 전체적인
decision boundary가 바뀌는 것을 확인할 수 있습니다. C가 0.01이라는 0에 매우 가까운 값을 가질 때는
전체적인 decision boundary가 거의 제대로 생성되지 못하다가, 이후 C값이 점차 높아지면서 안정적인
형태로 접어드는 것을 식별할 수 있습니다.
한 가지 흥미로운 부분은, C값이 계속 높아져도, 일정 임계점 이상부터는 더 이상 decision
boundary에 변동이 없는 것입니다. 즉, 오분류의 정도에 대한 penalty가 일정 이상을 넘어서면 더는
decision boundary에 영향을 주지 않는다는 것을 확인할 수 있습니다.
Slack variable을 사용한다고 해도, 선형식으로는 분류 모형을 거의 근사할 수 없는 데이터들이
존재합니다. 아래와 같은 예제를 확인해 보겠습니다.
그림 11. 단순 label이 혼합된 것을 넘어서서, 분류가 거의 진행되지 않는 데이터
위의 그림 11의 경우에는 선형 decision boundary를 사용하는 support vector machine으로는
거의 데이터를 설명할 수 없습니다. 이러한 형태의 데이터에도 support vector machine을 적용할 수
있도록, 뒤에서 non-linear한 function들에 대해 자세히 다뤄보도록 하겠습니다.
본 과제 구현에 사용한 코드는 아래 github 링크에서 확인할 수 있습니다. 또한 이후
kerenel-trick을 구현한 결과물(chapter 6.4)의 코드도 아래 링크에 함께 첨부되어 있습니다.
https://github.com/kswoo97/Theoretical-Statistics
15. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 15 -
5. Connectivity with the logistic regression
통계학에서 분류 모델로 많이 다루는 logistic regression과 SVM의 차이는 그 objective
function의 차이에서 확인 가능합니다. 먼저, logistic regression의 경우에 우리가 MLE 추정에서
최대화하고자 하는 likelihood는 다음과 같았습니다.
이번에는 같은 결과를 얻을수 있지만 response variable을 (1 , -1)로 바꾼 경우를
알아보겠습니다. 일반적인 support vector machine과 같은 형태의 데이터입니다. 우리가 최대화하고
싶은 각 확률은 다음과 같습니다.
앞선 support vector machine에서 우리는 확률의 최대화가 아니라, loss의 최소화를 중심으로 생각해
보았습니다. 그렇다면, 여기서 negative-log-loss로 기존의 전개 방식을 맞춰보도록 하겠습니다. Negative log
loss는 이름 그대로 log
의 형태를 띄고 있는데, 직관적으로 likelihood의 최대화 → -log의
최소화, → loss의 최소화의 흐름으로 연결되어, 기존에 우리가 하고자 했던 목표와 일치하게 됩니다. 결국
우리의 문제는 이 negative log loss를 최소화하는 것으로 치환할 수 있습니다.
16. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 16 -
물론 support vector machine은 확률 기반의 MLE 추정이나 log loss와는 다른 방법인
hinge-loss를 사용했었습니다. 그렇다면 만약 우리가 hinge-loss가 아니라 방금 확인한 log-loss를
사용하면 어떻게 될까요? 그 경우 우리의 식은 다음과 같이 치환될 수 있습니다.
Using negative log loss : logexp
이 경우, 우리의 관심 대상인 가 1보다 크게 하는 것이 우리의 목표였고, 따라서
loss 값은 1에서 음의 방향으로 갈수록 커져야 합니다. 실제로 log-loss를 사용하면 이 철학을 잘
반영할 수 있습니다.
그림 12. Comparison between hinge-loss & log-loss
그림 12를 통해 확인할 수 있듯이, log-loss든 hinge-loss든 같은 목표를 추구하고 있는 것을
확인할 수 있습니다. 그러나 두 loss function의 차이는 logistic regression과 SVM의 차이와 명확하게
연결됩니다.
Logistic regression은 어떤 에 대한 확률을 추정하고자 합니다. 그 결과는 완전히 0
또는 1이 될 수 없고, 그 사이의 값을 가집니다. (e.g. 0.6, 0.4). 모델 추정의 단계에서는 cut-off가 없기
때문에 인 경우에 0.8과 같은 확률을 제시해도, 여전히 계속 1에 가까워지도록 loss가 주어집니다.
즉, 추정 과정에서는 무조건 모델의 예측이 맞았다 / 아니다의 개념이 없는 것입니다.
그러나 SVM은 어떤 boundary를 기준으로 class에 포함된다. 아니다. 와 같이 명확하고 엄격한
기준을 적용합니다. 따라서 분류 경계면도 strict하게 설정하고자 합니다. 그에 근거하여 조건을
만족시키는 값 ( )가 1보다 크거나 같으면 전혀 loss를 적용하지 않고, 그렇지 않은 값들에
대해서는 큰 penalty를 부여합니다. Logistic regression이 큰 확률값에 대해서도 loss를 적용하는 것과는
다르게, SVM은 boundary에 따라 정분류된 데이터에 대해서는 penalty를 주지 않겠다는 뜻이 됩니다.
이처럼 logistic regression과 SVM에는 철학의 차이가 있고, 그 철학의 차이는 각각의
loss-function에 반영됩니다. 물론 이 둘 중 “어느 모델이 더 좋다”는 개념은 없습니다. 단지 모델이
추구하는 방향과 분류의 방식이 다를 뿐입니다.
17. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 17 -
6. Support Vector Machine with Kernel Trick
6.1. Lagrangian Problem
먼저, 앞서 언급한 최적화 과정은 결코 간단하지 않습니다. 그 이유로는 여러 가지가 있는데,
가장 중요한 이유는 나중에 사용할 kernel-trick에 적합한 형태가 아니기 때문입니다. 이를 해결하기
위하여 문제를 dual problem으로 치환(1)하고, KKT 조건을 만족(2)하도록 설정한 후에, 새롭게 정의한
dual problem의 해를 구합니다. 이 작업의 구체적인 필요성과 방법은 Appendix B에 자세히 기술되어
있습니다. 문제를 다시 정리하면 아래와 같이 재구성됩니다.
우선, 의 연산을 쉽게 하기 위하여, 이를
∘로 대체하겠습니다. 루트를 벗겨내고
상수 0.5를 곱한 형태이기 때문에 원래 식에서 추구하는 방향은 다르지 않습니다.
이전에 우리는 복잡한 형태의 데이터를 다루고 있었습니다. 하지만 여기서 전체 최적화 식을
재정립하기 위하여 다시 linearly separable한 간단한 경우로 돌아와서 이를 적용하겠습니다. 먼저,
기존에 채택하여 사용했던 최적화 식은 아래와 같습니다.
min ≧ ∀
여기에 Appendix B에 설명된 duality를 적용해보면 이 최적화는 아래의 최적화로 치환하여
생각할 수 있습니다.
minmax
∙
≧ , for all ∀
여기서 strong duality를 만족시키기 위해 KKT 조건을 적용하겠습니다. 각 KKT 조건에
값들을 맞추어 보면 아래와 같습니다.
원 조건 적용한 조건
∇
≧ ≧ ∀
≦
≦
Linearly separable 하므로 만족
∀
18. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 18 -
여기에 근거하여 우리는 기존의 최적화 식을 재정리 할 수 있습니다.
∙
로 모수의 추정치를 추정할 수 있습니다. ... (a)
∙
으로 기존의 값들을 정리할 수 있습니다. ... (b)
위에서 도출된 (a)와 (b)를 활용하여, Lagrangian 식을 다시 세울 수 있습니다.
∘
∘
, 위의 식에서 괄호를 풀었음.
×
∵ (a) , (b)
... (c)
복잡한 과정을 거치고 나면, 기존에 와 에 대한 최적값을 구하는 문제에서, lagrangian
multiplier의 값인 를 구하는 문제로 치환됩니다. (는 추정치와 모수의 notation을 구분하지 않도록
하겠습니다). 즉, 제약조건을 추가한 최적화 식인 가 의 식으로 치환되고, 에서
는 우리에게 주어진 데이터이기 때문에 결국 최적화하는 대상은 만 남습니다. 참고로 더 이상
이는 를 minimize하는 것이 아니라 Dual Problem에서의 과정에 따라 Lower Bound를
Maximize하는 개념으로 바뀝니다. (자세한 과정은 Appendix B에 수록되어 있습니다.)
위의 과정에서 부분적으로 언급된 우리의 관심 대상인 와 은 아래의 식으로 추정 가능합니다.
,
, j는 경계면
위에 위치하는 support vector의 index.
최종적으로 우리의 관심 대상을 정리해보겠습니다.
19. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 19 -
여기서 multiplier의 상한을 명확히 규정해야 하지만, 여기서 언급하지 않도록 하겠습니다. 현재
우리의 제약식은 KKT 조건을 만족하도록 설정되었기 때문에 아래와 같이 추가적으로 두 조건이 만족
되어야 합니다.
제약조건 (e)의 경우에는 우리 예제가 현재 linearly separable 하다고 가정했기 때문에
boundary가 잘 설정되면 모든 데이터에 대해서 만족할 수 있을 것입니다. 제약조건 (f)의 경우에는
우리가 가 해당 값을 만족하도록 해야 하기 때문에, 여전히 최적화에서 제약식으로 남아있어야 할
것입니다. 그러나 일반적인 lagrangian의 형태를 띄고 있기 때문에 quadratic programming으로 해결할
수 있습니다.
이번 Section에 복잡하고 긴 수식을 돌아왔습니다. 5.1.을 통해 우리가 얻은 결론은 아래와
같습니다.
- 기존의 최적화는 제약조건 하에서 를 찾는 것이었습니다.
- 그러나 이는 나중에 소개될 kernel-trick에 적합한 형태가 아닙니다.
- 따라서 이 형태를 dual function으로 바꾸고, KKT 조건을 적용하여 결과적으로 lagrangian
multiplier인 를 찾는 문제로 치환하였습니다.
- 여기서 우리가 구하고자 하는 boundary의 모수인 는 특정 equation에 따라 로 표현이
가능하기 때문에, 우리는 따로 를 추정할 필요가 없습니다.
문제는 우리가 아직 linearly separable한 case에 머물러 있다는 것입니다. 앞서 slack
variable을 통해 이 주제를 해결했던 것처럼, 이번에는 non-linear function을 통해 이 문제를
해결하도록 하겠습니다. 이어지는 주제인 kernel-trick은 바로 이 non-linear한 decision boundry를
어떻게 도입할지 다루게 될 것입니다.
20. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 20 -
6.2. Kernel Trick
아래와 같은 예제를 생각해보겠습니다.
그림 13. 1-D Linearly unseparable data
본 예제에서 빨간색 점들과 파란색 점들을 하나의 선형식으로 분류하는 것은 현실적으로
불가능합니다. 하지만 이 데이터를 보다 높은 차원으로 보내면 그때는 선형 분류가 가능해집니다. 각
데이터의 값을 라고 했을 때, 각 데이터를
인 function에 넣고, 데이터를 2차원으로 옮기도록
하겠습니다.
(1) : Moving to the 2-Dimensional Space (2) : Now it is Linearly Separable
그림 14. To the higher dimension
기존에 1-D 였을 때 본 데이터는 선형 분류가 불가능했지만, 데이터를 더 높은 차원으로
보내니 분류가 가능해졌습니다! Kernel-Trick의 기초적인 개념은 이러한 아이디어에서 시작하게 됩니다.
Kernel-Trick에서 말하는 kernel은 다소 생소한 개념입니다. Kernel의 정의는 아래와 같습니다.
- A function that takes as its inputs vectors in the original space and returns the dot
product of the vectors in the feature space is called a kernel function.
21. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 21 -
- Formally, it indicates if we have data xz∈X, and a map →
, then,
kxz xz , which is a dot product is a kernel function.
요약하자면, 어떤 벡터들에 특정 function을 씌운 값을 내적하는 function을 kernel
function이라고 표현합니다. 저 는 우리의 데이터가 분류가 가능하도록 보다 높은 차원으로 원래의
데이터를 mapping 하는 함수입니다.
문제는 여기서 내적이 왜 등장하는지입니다. 내적이라 함은 주로 어떤 두 값의 similarity를
계산하기 위한 지표로 많이 활용되는 개념입니다. SVM의 kernel-trick에서는, 최적화 식의
에
내적의 형태가 들어있기 때문에 주의깊게 확인해야합니다. 구체적인 kernel의 예시를 확인하겠습니다.
먼저, 가장 유명한 2nd – degree polynomial kernel function을 살펴보겠습니다. 아래와 같은
function 가 있습니다.
∈
이 function은 2차원 벡터 X를 input으로 받아 다음과 같은 비선형 연산을 거쳐 3차원 벡터로
출력합니다. 이 function을 토대로 와 의 내적을 계산해 보겠습니다.
∙
∙
여기서 신기한 현상이 발생합니다. 우리는 분명 X와 Z를 여러 제곱과 곱셈의 형태로 바꾸는
3차원의 함수에 mapping하고, 그 결과를 내적 하는 행위를 했는데, 그 결과는 X와 Z의 일반적인
내적을 제곱한 값과 같은 결과를 도출했습니다!
우리는 이 과정의 결과에 주목해야 합니다. 어떤 고차원으로 변수를 보내는 함수(
→
)가
있다고 했을 때, 그것의 내적은 낮은 차원에서 내적 한 후에 높은 차원으로 보내는 연산을 해도
결과가 같아진다는 것이 핵심적인 아이디어입니다.
따라서 이 사실을 이용하여 SVM은 trick을 사용합니다. 앞서 관측한 사실은 기존의 차원에서
linearly separable하지 않은 데이터가 더 높은 차원으로 이동했을 때 linearly separable 해질 수 있다는
것입니다. 따라서 우리는 데이터를 높은 차원으로 보내고자 하는데, 이때, 높은 차원으로 데이터를
보내고 그것을 토대로 모수를 추정하는 방식을 하는 것이 아니라, 변수는 건드리지 않은 상태로 그
연산 과정에 약간의 변형을 가하는 방법을 사용합니다.
이것이 어떻게 적용되는지 지금부터 살펴보도록 하겠습니다. 우선, 다음과 같이 kernel의
notation을 정리하겠습니다.
∘ ; inner product of high dimensional vectors
22. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 22 -
이 kernel function은 와 같이 각 데이터를 고차원의 함수를 씌우지 않고,
∙를 계산해서 그 값을 고차원 함수에 씌워도 된다는 것이었습니다. 우리가 이 trick을 활용하는
이유는 전체적인 computational cost가 훨씬 적기 때문입니다.
계산 복잡도 측면 외에도, 무한이 높은 차원으로 데이터를 mapping 할 수 있다는 것이
kernel function과 그 trick의 강점입니다. 또 다른 kernel로 radial basis function이라고 불리는
gaussian kerenl이 그 대표적인 예시입니다. Gaussian kernel을 다음과 같이 정의하겠습니다.
exp
, where is a nuisance parameter (hyper-parameter)
If ∈
, exp
여기서, 설명의 편의상 데이터의 차원을 2차원으로 제한하겠습니다. 위의 식을 다시 쓰면,
exp
. 계산상의 편의를 위해 로 정의.
exp
exp
exp
expexp
exp
exp
여기서, 우리는
를 테일러 근사에 따라서 다음과 같이 표현할 수 있습니다.
→
∙
. Inner product of infinite terms.
exp
exp
, let
exp
exp
exp, 위에서 언급했듯이, 로 가정.
exp
∙
정리해보겠습니다. 이론적으로 RBF kernel을 사용하면 어떤 데이터를 무한의 차원으로 보내서
내적을 하는 것과 유사한 값을 얻을 수 있다는 것이 핵심 idea입니다. 어떤 데이터를 무한차원으로
mapping하는 것은 현실적으로 불가능하고, 그것을 근사한다고 해도 큰 computational cost를
요구합니다. 하지만 RBF를 통해 그것과 유사한 값을 훨씬 간단한 방법으로 계산할 수 있습니다.
23. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 23 -
이제 kernel trick을 이해했으니, 원래 support vector machine의 optimization function으로
돌아오겠습니다.
여기서, 원 데이터를 그대로 사용해서는 데이터를 linearly separate 할 수 없었습니다. 따라서,
data vector인 를 보다 높은 차원으로 보냅니다. 여기서 (
→
)인 함수 를
원 데이터 자리에 대체하면 위의 식을 아래와 같이 재구성 할 수 있습니다.
이 식은 라그랑주 승수의 조건에 의해 정리된 것이기 때문에, 우리의 관심 모수인 와 는
아래의 식을 통해 추정이 가능할 것입니다.
,
여기서 문제가 발생합니다. RBF의 경우, 는 각 값을 무한의 차원으로 보내는 형태의
function이라고 언급했었습니다. 실제 최적화 식에서는 두 가 내적의 형태로 표현되어 로
대체하여 쉽게 계산했는데,
에 보면 가 그대로 남아있습니다. 이는 경계면인
자체의 추정치를
구하기 위해서는 무한의 영역으로 데이터를 mapping 해야 한다는 뜻입니다.
이 비현실성은 반은 맞고, 반은 부적절한 이야기입니다. 우선, 우리가 비선형 경계면을
탐색했다고 가정하겠습니다. 그렇다면 새로운 데이터에 대해서 prediction을 할 때, 이 비선형 경계면을
기준으로 위에 있는가, 아래에 있는가를 확인해야 합니다. 그리고 그 값의 부호에 따라서 label 중
하나에 할당하는 방식으로 진행됩니다.
새로 관측한 데이터 에 대해, 모델의 부호를 탐색하는 식을 정리하면 아래와 같습니다.
그렇다면, 위에서 추정한
를 대입하여 식을 정리해보겠습니다.
여기서 j는 경계면 위의 support-vector에 해당하는 데이터의 index를 의미합니다.
24. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 24 -
이 수식을 통해 우리가 유도한 사실은, 의 정확한 값을 계산하지 않고도, 새로운 데이터를
예측하는 것에 있어서 전혀 문제가 없다는 사실입니다. 물론 모든 를 구할 수 없다는 뜻은 아닙니다.
간단한 형태의 polynomial kernel은 충분히 계산 가능할 것입니다. 그러나 방금 소개한 RBF와 같은
무한의 차원으로 근사하는 함수는 우리가 더 이상 구할 수 없게 되었습니다.
kernel trick을 활용한 non-linear 경계면을 사용함으로서, 우리는 크게 다음과 같은 두 변화를
얻은 것으로 요약할 수 있습니다.
- 기존의 선형 분류 경계보다 분류의 정확도를 크게 높였다.
- 더 이상 경계면의 기울기의 추정치인
은 그 값을 구할 수 없을 수도 있다.
물론, exact한 형태의 kernel을 구할 수 없다는 뜻이고, 임의로 가상의 데이터의 점을 찍어서 그
kernel의 형태를 유추하는 것은 가능합니다.
비선형 경계면을 사용함에 따라, 우리가 데이터에 대해 해석할 수 있는 여지는 많이
줄어들었습니다. 선형 경계면의 경우, 대략적으로나마 어느 위치에서 분류가 진행되는지 가늠을 할 수
있었고 그것을 해석으로 연결할 수 있었습니다. 그러나 비선형 식이 활용되면서, 일부 경우에서는 그
경계면 자체를 유추할 수 없고, 유추가 가능한 일부의 case에서도 경계면을 해석하는 것이 몹시
난해해졌기 때문입니다.
이 철학은 많은 모델이 겪는 딜레마를 관통합니다. 심플한 모형은 해석이 쉽지만 설명력이나
성능은 다소 부족할 수 있습니다. 복잡한 모형은 높은 설명력과 성능은 보유해도 사람이 쉽게 모델의
작동 매커니즘을 이해할 수 없습니다.
이어서 kernel trick을 활용한 non-linear 모델이 기존에 linear한 분류 경계면보다 분류에
있어서 정말 강점을 갖는지 확인해보도록 하겠습니다.
25. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 25 -
6.3. Implementation of kernel trick
4.3장에서 분류에 실패했던 도넛 모양의 데이터를 다시 가져와, 앞서 설명한 non-linear
kernel을 활용하여 분류를 진행해보겠습니다.
그림 15. 비선형 kernel을 통해 분류가 가능하다.
앞선 예제에서 선형식으로는 분류가 불가능했던 이 case도, RBF를 활용한 비선형 분류
경계면을 통해서 분류가 가능해지는 것을 확인할 수 있습니다.
그림 16. 비선형 kernel을 통해 분류가 가능하다.
마찬가지로 앞선 예제에서 slack variable을 통해 불완전하게 분류했던 예제도 비선형 식을
사용하면 해결 가능하다는 것을 확인할 수 있습니다.
물론 kernel-trick과 slack variable이 함께 사용되는 경우도 있습니다. 그러나 본 보고서에서는
그 case는 따로 다루지 않도록 하겠습니다. 4.3장에서 언급한 링크에서 본 구현의 코드를 확인하실 수
있습니다.
26. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 26 -
7. Conclusion
Chapter 6를 끝으로 kernel-trick을 활용한 support vector machine까지 다루어 보았습니다. 본
보고서의 전체적인 흐름을 복기하면 다음과 같습니다.
- 선형 분류가 가능한 데이터에 대해서 선형 경계를 적용한 SVM
- 선형 분류가 불가능한 데이터에 대해서 slack variable을 적용한 SVM
- Dual problem으로 objective function 재정의
- 선형 분류가 불가능한 데이터에 대해서 kernel-trick을 적용한 SVM
본 보고서를 통해 SVM의 작동 원리와 선형/비선형 분류 경계면을 파악해 보았습니다. SVM의
철학은 간단합니다. 데이터를 분류할 수 있는 경계를 찾는 것이고, 그 경계가 어떤 특성을 갖느냐에
따라 모델의 복잡도가 달라졌습니다.
선형 경계면을 갖는 경우 분류의 성능은 비교적 약했지만 parameter 에 대한 추정치를
명확히 구할 수 있었고, 그것을 활용하여 경계면에 대한 직관적 이해를 가능하게 해주었습니다. 반면
kernel-trick을 활용하여 비선형 경계면을 갖게 되면 분류 성능은 매우 좋았지만 parameter 에 대한
추정치를 직접적으로 구할 수 없는 경우가 발생하였고, 그만큼 우리가 분류 경계에 대해 이해할 수
있는 정도는 줄어들었습니다.
마지막으로 이론을 통해 확인했던 내용을, python을 사용하여 실제 데이터에 대해 어떻게
SVM이 작동하는지 확인해 보았습니다. 간단한 데이터에 적용한 선형 SVM부터, 분류가 어려운
데이터에 대해서 slack variable과 non-linear boundary를 사용하면 어떤 결과가 도출되는지 살펴
보았습니다.
교수님께서 강의에서 강조하셨듯이, 많은 통계의 과정과 결과는 직관적입니다. 뿐만 아니라
기계학습의 많은 알고리즘도 우리의 직관적인 생각을 중심으로 모형이 설계됩니다. 강의에서 다루었던
logistic regression, 본 보고서에서 다룬 support vector machine 등, 다양한 통계적 분류 알고리즘은
현대 AI가 갖고 있는 복잡성 문제를 완화할 수 있는 중요한 도구로서 작용할 수 있을 것입니다.
학부 강의에서 잘 다루어지지 않은 support vector machine을 체계적으로 공부할 기회를 주신
교수님께 감사드리며 보고서를 마무리 하겠습니다.
27. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 27 -
Appendix
내용 전개에 직접적으로는 필요가 없는 부분을 다루는 부록입니다. 본 보고서는 최적화와
관련한 자세한 내용을 다루지 않고, SVM의 알고리즘은 구성하는 최적화 식의 대략적인 흐름을
설명하는 데 초점을 맞추었습니다.
A. Quadratic Programming
아래와 같은 조건을 만족하는 최적화 문제를 푸는 경우를 quadratic programming(QP)이라고
합니다.
일반적으로 우리가 최적화를 통해 구하고자 하는 x값은 제곱의 형태로 존재합니다. 따라서
이는 non-linear programming의 한 범주로 생각할 수 있습니다. 두 번째로, objective function에 포함된
상수 r은 최적화 과정에서는 아무런 영향을 주지 않기 때문에 일반적으로 없는 term으로 생각해도
무방합니다. 세 번째로 제약조건인 와 ≦ 는 linear한 형태로 존재해야 합니다.
여기서 objective function의 convexity를 확인하기 위해서는 matrix가 positive-definite 한지
확인하면 됩니다. 일반적으로 고윳값을 통해 그 positive-definite을 확인하는 것이 가능합니다. 이것이
만족되면, 최적화를 통해 탐색한 값이 local solution이 아니라 global solution임이 보장됩니다. 대표적인
quadratic programming의 예제가 바로 회귀분석의 LSE입니다. 다만 일반적인 LSE는 위의 general 한
형태에서 constraint가 없는 모습이라고 생각할 수 있습니다.
Quadratic programming의 형태와 조건이 위와 같다면, 가장 중요한 해를 찾는 방법을 확인해
보아야 합니다. 앞서 언급한 것처럼 quadratic programming은 non-linear programming의 한
범주이므로 non-linear programming의 방법론들이 많이 활용될 수 있습니다.
제약식이 없는 상태라면, 일반적인 LSE처럼 단순 미분을 통해 그 해를 찾을 수 있습니다.
그러나 SVM과 같이 제약식이 존재하는 보다 복잡한 형태라면 다른 방법을 채택해야 합니다. 대표적인
방법으로는 conjugate gradient method라는 방법과, 제약식에 부등식이 포함된 경우에 활용 가능한
interior point, 그리고 active set method 등이 있습니다. 보다 직관적인 방법으로는 미분적분학에서
많이 사용되는 라그랑주 승수를 통해 제약식을 해결하는 것 또한 가능합니다. 그러나 식을 자동화하기
위하여 numerical method를 주로 사용합니다.
해를 찾아가는 과정을 구체적으로 언급하는 것은 본 보고서의 기본 주제에서 다소 벗어나기
때문에, QP에 대한 설명은 여기까지 진행하도록 하겠습니다.
28. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 28 -
B. Lagrangian Primal & Dual Problem
SVM은 여기서 설명할 duality를 활용하여 kernel trick이 적용되기 좋은 형태로 objective
function을 치환합니다. 기존의 단순한 조건에서도 quadratic programming을 활용해 최적 값을 찾을 수
있었지만. 여기서는 Lagrangian Dual Problem으로 치환하여 전개합니다.
전체적인 절차와 증명은 아래와 같습니다. 제약조건 하에서 우리가 풀고자 하는 최적화 식을
Primal Problem이라고 정의합니다. 이 예제에서 아래와 같은 최적화 식을 가정해보겠습니다.
min
≦
이 경우 우리는 Lagrangian 최적화 식을 아래와 같이 정의합니다.
, where ≧
여기서, 우리는 각 값의 범위에 따라서 아래의 부등식이 항상 성립함을 알 수 있습니다.
.... (a)
다시, 우리는 새로운 최적화 식을 정의합니다. 아래의 function 를 우리는 dual
function이라고 정의하겠습니다.
min
여기서 C를 primal feasible set이라 하고, 를 primal problem에서의 최적값이라고
하겠습니다. (a)의 조건을 활용하면 최적값에 대한 아래의 부등식을 세울 수 있습니다.
≧ ∈ ≧ ... (b)
결국 이 부등식이 의미하는 바는 우리의 dual function은 primal function에 대한 lower
bound를 제공한다고 생각할 수 있습니다. 이는 MLE에서의 Rao-Cramer Lower Bound처럼, 어떤
우리의 관심 대상의 하한값을 파악하는 개념입니다.
여기서 아래와 같이 dual function()을 최대화하면 가장 좋은 lower bound를 얻는다고
해석할 수 있습니다. 물론 에서 우리가 최적화시키는 값은 lagrangian multiplier인 입니다.
max ≧
29. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 29 -
를 primal problem의 최적값이고, 가 dual problem의 최적값이라고 할 때, 이들은 식
(b)에 의해서 아래의 조건을 만족하게 됩니다. 이 조건을 weak duality라고 합니다.
≦
여기까지의 과정을 정리하면, 우리가 dual function 의 feasible set에서 최댓값을 구하면,
그것은 우리의 관심사인 의 좋은 Lower Bound가 될 것입니다. 큰 값의 최솟값과, 작은 값의
최댓값은 분명 같은 방향으로 가는 것이기 때문입니다. 그렇지만 가 아닐 수 있으므로, 를
이용한다고 우리가 원하는 exact한 solution을 얻지 못할 수도 있습니다. 최적화 값 사이에 차이가
존재할 수 있기 때문입니다.
위의 문제를 수식으로 표현하면 duality gap이라고 하고, 이는 와 의 차이로 표현합니다.
우리는 이 두 최적화 값이 같아지기를 원합니다. 그래야 둘 중 하나만 풀어도 같은 최적화
결론에 도달할 수 있기 때문입니다. 그런데, Karush-Kuhn-Tucker(KKT) 조건이 만족할 때 우리는
위의 duality gap이 0이 되고, dual function의 최적값이 곧 우리가 궁극적으로 찾고자 하는 primal
problem의 최적값과 같아진다는 것을 알 수 있습니다!
KKT 조건은 아래와 같습니다.
∇
≧
≦
얼핏 보기엔 조건이 더 많아져 최적화가 더욱 어려워진 것처럼 보이지만, 사실은 이 조건들을
활용하여 기존에 너무 많이 있었던 우리의 관심 대상을 많이 정리할 수 있습니다. (parameter인 와
lagrangian multiplier ). 모수들이 lagrangian multiplier인 로 정리된 형태가 바로 6.1에서 언급된
그 형태입니다.
지금까지 거쳐온 복잡한 과정의 직관적 필요성을 정리하면 아래와 같이 설명할 수 있습니다.
- 기존의 primal problem은 kernel-trick을 적용하기에 적합하지 않다.
- 이를 해결하기 위하여 dual problem으로 문제를 치환하고, 둘의 해를 동일하게 만들기 위해
우리의 관심 대상들이 KKT condition을 만족하게 설정한다.
- 이를 통해 기존의 primal problem의 최소화 문제를 duality problem의 최대화 문제로
치환하고, 그 형태에 quadratic programming을 적용하여 해를 구한다.
30. 이론통계학 프로젝트 : Support Vector Machine / 김선우
- 30 -
Reference
[1] 강승호. 학부 이론통계학. 연세대학교. 2021. *
[2] 김현중. 학부 데이터마이닝. 연세대학교. 2021. *
[3] 박상언. 학부 비모수통계학. 연세대학교. 2020. *
[4] 문일철. 인공지능 및 기계학습 개론. KAIST. 2016. *
[5] 김기범 외 6인. 모두를 위한 최적화. Wikidocs. 2021. **
[6] Alexy Natekin & Alios Knoll. Gradient boosting machines, a tutorial. 2013. **
[7] Christopher M. Bishop. Pattern Recognition and Machine Learning. Springer-Verlag. 2006. **
[8] Jerome H. Friedman, Robert Tibshirani, and Trevor Hastie. The Elements of Statistical Learning.
Springer-Verlag. 2001. **
[9] Arrieta et al. Explainable Artificial Intelligence (XAI): Concepts, Taxonomies, Opportunities and
Challenges toward Responsible AI ***
[10] Corinna Cortes & Vladmir Vapnik. Support-vector networks. 1995. ***
[11] Kaiming He et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on
ImageNet Classification. 2015. ***
[12] KKT : https://en.wikipedia.org/wiki/Karush%E2%80%93Kuhn%E2%80%93Tucker_conditions
[13] Log-loss : https://jhui.github.io/2017/01/15/Machine-learning-regression-and-logistic-regression/
[14] Logistic Regression : https://en.wikipedia.org/wiki/Logistic_regression
[15] Quadratic Programming : https://optimization.mccormick.northwestern.edu/index.php/Quadratic_programming
[16] Statistical Classification : https://en.wikipedia.org/wiki/Statistical_classification
[17] SVM : https://en.wikipedia.org/wiki/Support-vector_machine#cite_note-CorinnaCortes-1
[18] SVM Code 1 : https://scikit-learn.org/stable/modules/svm.html
[19] SVM Code 2 : https://jakevdp.github.io/PythonDataScienceHandbook/05.07-support-vector-machines.html
[20] SVM Kernel-Trick 1 : https://www.youtube.com/watch?v=efR1C6CvhmE&t=741s
[21] SVM Kernel-Trick 2 : https://www.youtube.com/watch?v=Qc5IyLW_hns
[22] SVM Kernel-Trick 3 : https://en.wikipedia.org/wiki/Kernel_method
[23] 과제 구현 코드 종합 : https://github.com/kswoo97/Theoretical-Statistics
* : Lecture ** : Textbook *** : Paper None : Web Site