본문 바로가기

머신러닝/[단단한 머신러닝]

서포트 벡터 머신

 해당 개념 역시 관련한 좋은 글들이 이미 그득하니, 제가 인상깊었던 내용만을 쌓아두겠습니다. 서포트 벡터 머신(Support Vector Machine, SVM)은 어떤 그룹과 어떤 그룹을 잘 분류하는(좋은 마진을 갖는) 초평면을 찾겠다-라는 아이디어로 구성된 알고리즘입니다.

 분류-라 함은 이진분류의 개념에서 생각해볼때, 어떤 인풋으로부터 다듬어진 결과가 0이냐 1이냐를 구분하는 문제입니다. 이러한 상황에서의 가장 기본적인 손실함수는 다듬어진 결과 x가 있을 때, 이 결과가 어떤 임계값(=0로 가정)보다 작으면 0, 크면 1으로 생각해볼 수 있습니다. 보통 0/1 손실함수라고 지칭합니다. 다만 이 함수는 일종의 스텝 함수(Step function)입니다. 비연속적임과 동시에 논컨벡스(Non-convex)입니다. 그다지 좋을게 없는 형상이니 저희는 RMSE와 같이, 연속적이고 컨벡스(Convex)한 특성을 가진 다른 함수를 정의해봅시다-라는 생각에서 나온게 대리 손실함수(Surrogate loss function)입니다. 분류를 위한 특성과 연속, 컨벡스 특성을 동시에 살린 함수로 힌지, 지수, 로지스틱 손실함수 등이 존재합니다.

 로지스틱 손실함수를 사용하면, SVM의 결과는 로지스틱 회귀 모델과 유사한 결과를 내게되며, 보통 힌지 손실함수: max(0, 1-y*y')를 사용합니다. 다른 손실함수와 힌지함수와 차이는, 1이상의 정의역 범위에서 함수값이 0라는 점인데, 이를 해석하기위해 y*y'의 의미를 생각해보면, 이 놈이 1보다 작다는 것은, 해당 관측치가 마진(Margin) 안에 존재한다는 것이며, 1보다 크다는 말은 마진 밖에 존재한다는 말입니다. 다시, y*y'이 1보다 작으면 작을수록, 커지게되는 1-y*y'을 손실값으로 갖게하며, y*y'이 1보다 크다면, 0을 손실값으로 갖게끔, 즉 무시하게끔합니다. 마진 밖에 있을 경우는 그냥 날려버리겠다는 의미겠습니다. 때문에 로지스틱 손실함수 보다 계산량이 작다, 또는 보다 적은 훈련 샘플로도 학습이 가능하다는 장점이 있습니다.

 조금 더 현실적인 문제로 돌아와서, SVM을 학습시킬 때 중요한 변수는 결국 커널 선택이 핵심인데, 텍스트 데이터의 경우는 선형 커널을, 잘 모르겠다-싶으면 가우시안 커널(=RBF)를 사용할 것을 추천합니다.

 그리고 분류 모델로 시작된 SVM은 회귀(Support Vector Regression)의 목적으로도 가능한데, 이는 간단히, 그룹과 그룹을 분할하던 초평면과 그 마진의 개념을 반대로 생각해서, 해당 초평면의 마진 사이에 샘플이 들어가면 정확히 예측한 것으로 취급하는 방법입니다. 이상입니다.