한양과학기술고등학교

에듀테크 프로젝트 대시보드

서포트 벡터 머신 (SVM)

서포트 벡터 머신 (SVM)

최대 마진 분류기 · 서포트 벡터 · 소프트 마진과 C · 커널 트릭  |  두 그룹 사이 가장 넓은 도로를 찾는 알고리즘

두 그룹을 나누는 직선은 무수히 많습니다. 서포트 벡터 머신은 그중에서 양쪽 점들로부터 가장 멀리 떨어진 직선 하나를 고릅니다. 경계선을 중심으로 가장 넓은 도로(마진)를 놓고, 그 도로의 가장자리에 닿는 소수의 점들만이 경계를 결정합니다. 이 점들을 서포트 벡터라고 부릅니다. 1990년대 Vapnik 등이 정립했고, 딥러닝 이전까지 가장 강력한 분류기였습니다.

1. 여러 경계선 중 무엇이 최선인가?

아래 세 직선은 모두 파랑과 빨강을 완벽히 나눕니다. 하지만 (a)와 (c)는 한쪽 그룹에 아슬아슬하게 붙어 있어, 새 데이터가 조금만 흔들려도 틀리기 쉽습니다. (b)처럼 양쪽에서 똑같이 여유를 둔 직선이 가장 안전합니다. SVM은 "여유"를 수학적으로 정의된 마진(margin)으로 보고, 그 마진을 최대화합니다.

(a) 파랑에 딱 붙음  ·  (b) 가운데 — 마진 최대  ·  (c) 빨강에 딱 붙음

2. 마진과 서포트 벡터

경계선을 w·x + b = 0 이라 하면, 도로의 양쪽 가장자리는 w·x + b = +1 과 w·x + b = −1 입니다. 이 두 선 사이의 거리, 즉 마진 폭은 정확히

마진 폭 = 2 / ‖w‖

이므로 마진을 넓히는 것은 ‖w‖ 를 작게 만드는 것과 같습니다. 동시에 모든 점이 도로 밖(또는 가장자리)에 있어야 하므로 yᵢ (w·xᵢ + b) ≥ 1 조건을 지켜야 합니다 (y = ±1).

# 하드 마진 SVM — 제약이 있는 최적화 문제
minimize   (1/2) · ‖w‖²
subject to  y_i · (w·x_i + b) ≥ 1   for all i
서포트 벡터: 최적해에서 yᵢ(w·xᵢ + b) = 1 을 만족하는, 즉 도로 가장자리에 정확히 닿는 점들입니다. 나머지 점은 아무리 옮겨도(도로 밖인 한) 경계가 바뀌지 않습니다. 그래서 SVM 모델은 서포트 벡터 몇 개로 완전히 요약됩니다.

3. 소프트 마진과 C — 이상치를 허용하기

현실 데이터는 노이즈 때문에 직선 하나로 완벽히 나눌 수 없는 경우가 많습니다. 이때 각 점에 "규칙을 어긴 정도" ξᵢ ≥ 0(슬랙 변수)을 허용하고, 그 벌점의 합을 목적함수에 더합니다. 힌지 손실로 쓰면 이렇게 됩니다.

# 소프트 마진 SVM (힌지 손실 형태)
minimize  (λ/2)·‖w‖²  +  (1/n)·Σ max(0,  1 − y_i·(w·x_i + b))
#          └ 마진 넓히기 ┘      └──── 규칙 위반 벌점(힌지) ────┘
C 값 (= 위반에 대한 벌점 크기)마진성격
C 작음 (규제 강함)넓음이상치 무시, 부드러운 경계 — 과소적합 위험
C 큼 (벌점 강함)좁음모든 점을 맞추려 함 — 과적합 위험

C 는 "마진을 넓게 vs 실수를 적게" 사이의 손잡이입니다. 교차 검증으로 고릅니다.

4. 직접 학습시켜 보기

캔버스를 클릭하면 파랑(+1) 점, Shift+클릭(또는 오른쪽 클릭)은 빨강(−1) 점을 추가합니다. 이미 있는 점은 드래그로 옮길 수 있습니다. 학습을 누르면 경사하강법(Pegasos)이 경계선(흰 선)과 도로 가장자리(점선)를 움직입니다. 노란 테두리가 붙은 점이 서포트 벡터입니다.

클래스 +1 클래스 −1 서포트 벡터 경계선
2.5
12
w = (0.00, 0.00)   b = 0.00
‖w‖ = 0.00   마진 폭 2/‖w‖ = –
서포트 벡터 0   오분류 0 / 0   epoch 0
힌지 손실 합 –
0% 

경사하강법 한 스텝 (Pegasos)

for t in range(STEPS):
    (x, y) = 무작위 샘플
    margin = y * (w·x + b)
    if margin < 1:                 # 도로 안이거나 반대편 → 벌점 발생
        w = w - η * (λ*w - y*x)
        b = b + η * y
    else:                            # 도로 밖 → ‖w‖만 살짝 줄임
        w = w - η * (λ*w)
    # λ ≈ 1 / C,  η 는 스텝이 갈수록 작아짐

5. 커널 트릭 — 곡선 경계를 직선으로

아래 1차원 데이터는 가운데는 파랑, 바깥은 빨강이라 직선(임계값) 하나로 나눌 수 없습니다. 그런데 각 점 x 를 φ(x) = (x, x²) 로 한 차원 끌어올리면, 파랑은 아래쪽, 빨강은 위쪽에 모여 직선 하나로 깔끔히 갈립니다. 커널은 이 "끌어올리기"를 실제 좌표 계산 없이 K(a, b) = φ(a)·φ(b) 라는 내적 공식만으로 처리하는 기법입니다.

현재: 1차원 — 파랑(안쪽)과 빨강(바깥쪽)을 가르는 임계값이 존재하지 않습니다.

자주 쓰는 커널: 선형 a·b, 다항식 (a·b + 1)ᵈ, RBF(가우시안) exp(−γ‖a−b‖²). RBF는 사실상 무한 차원으로 올리는 것과 같아 아주 복잡한 경계도 만들 수 있습니다 (대신 γ 가 크면 과적합).

핵심 정리

  • SVM = 두 그룹 사이 가장 넓은 도로(마진)를 놓는 분류기, 마진 폭 = 2/‖w‖
  • 경계는 도로 가장자리에 닿는 서포트 벡터 몇 개로만 결정됨
  • 소프트 마진 + C: 이상치를 허용하며 "마진 넓게 ↔ 실수 적게" 조절
  • 커널 트릭: 내적만 바꿔 저차원의 곡선 경계를 고차원의 직선으로 해결
  • 퍼셉트론은 아무 경계나, SVM은 가장 여유 있는 경계를 찾음