SVM (Support Vector Machine) 은 지도 학습 알고리즘 중 하나로, 분류 및 회귀 문제를 해결하는 데 사용됩니다. 특히, 선형 분리가 가능한 데이터셋에서 가장 널리 사용되며, 커널 트릭을 사용하여 선형적으로 분리되지 않는 데이터도 처리할 수 있습니다.
기본 개념
SVM은 두 클래스를 분리 하는 최적의 초평면(optimal hyperplane) 을 찾는 알고리즘입니다. 이 초평면은 클래스 간의 마진(margin) 을 최대화하는 방향으로 설정됩니다.
마진 : 초평면과 가장 가까운 데이터 포인트(서포트 벡터) 사이의 거리.
서포트 벡터 : 마진 경계에 위치한 데이터 포인트들.
수식
주어진 데이터셋 ( x i , y i ) (\mathbf{x}_i, y_i) ( x i , y i ) , i = 1 , … , N i = 1, \dots, N i = 1 , … , N 에서:
x i ∈ R d \mathbf{x}_i \in \mathbb{R}^d x i ∈ R d : i i i -번째 샘플의 특징 벡터
y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} y i ∈ { − 1 , + 1 } : i i i -번째 샘플의 클래스 레이블
초평면 은 다음과 같은 식으로 표현됩니다:
w ⋅ x + b = 0 \mathbf{w} \cdot \mathbf{x} + b = 0 w ⋅ x + b = 0
여기서:
w \mathbf{w} w : 초평면의 법선 벡터 (normal vector)
b b b : 초평면의 절편
초평면으로부터 데이터 포인트까지의 거리 :
distance = ∣ w ⋅ x + b ∣ ∥ w ∥ \text{distance} = \frac{|\mathbf{w} \cdot \mathbf{x} + b|}{\|\mathbf{w}\|} distance = ∥ w ∥ ∣ w ⋅ x + b ∣
마진의 크기 :
margin = 2 ∥ w ∥ \text{margin} = \frac{2}{\|\mathbf{w}\|} margin = ∥ w ∥ 2
두 서포트 벡터들 사이의 전체 마진은 2 ∥ w ∥ \frac{2}{\|\mathbf{w}\|} ∥ w ∥ 2 가 됩니다.
마진을 최대화 하기 위해, 다음 최적화 문제를 풉니다 :
min w , b 1 2 ∥ w ∥ 2 \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 min w , b 2 1 ∥ w ∥ 2
제약 조건:
y i ( w ⋅ x i + b ) ≥ 1 , ∀ i y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1, \quad \forall i y i ( w ⋅ x i + b ) ≥ 1 , ∀ i
이 조건은 데이터 포인트가 초평면의 올바른 한쪽에 위치하도록 보장합니다.
예제
마진을 최대화 하기 위한 최적화 문제
두 개의 클래스가 주어지고, 각 클래스에 대해 데이터 포인트가 다음과 같이 분포한다고 가정합니다:
클래스 + 1 +1 + 1 의 데이터 포인트: ( 1 , 2 ) (1, 2) ( 1 , 2 ) , ( 2 , 3 ) (2, 3) ( 2 , 3 )
클래스 − 1 -1 − 1 의 데이터 포인트: ( 4 , 6 ) (4, 6) ( 4 , 6 ) , ( 5 , 7 ) (5, 7) ( 5 , 7 )
이 데이터를 분리하는 초평면을 찾는 것이 목표입니다.
1. 최적화 문제 설정
먼저, 초평면 을 정의합니다:
w ⋅ x + b = 0 \mathbf{w} \cdot \mathbf{x} + b = 0 w ⋅ x + b = 0
여기서:
w \mathbf{w} w 는 초평면의 법선 벡터.
b b b 는 절편입니다.
각 데이터 포인트 x i \mathbf{x}_i x i 에 대해, 마진 은 다음과 같이 정의됩니다:
y i ( w ⋅ x i + b ) ≥ 1 ∀ i y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1 \quad \forall i y i ( w ⋅ x i + b ) ≥ 1 ∀ i
2. 기호
1. ∀ \forall ∀
의미 : "모든" 또는 "임의의"를 뜻합니다. 수학적 정의에서 이 기호는 주어진 조건이 모든 i i i 에 대해 성립함을 나타낼 때 사용됩니다.
예시 :
∀ x ∈ R , x 2 ≥ 0 \forall x \in \mathbb{R}, \, x^2 \geq 0 ∀ x ∈ R , x 2 ≥ 0
위 수식은 "모든 실수 x x x 에 대해 x 2 x^2 x 2 는 0보다 크거나 같다"는 의미입니다.
2. ∥ w ∥ \|\mathbf{w}\| ∥ w ∥
의미 : 벡터 w \mathbf{w} w 의 유클리드 노름 (Euclidean norm) 또는 길이 를 나타냅니다. 벡터 w = ( w 1 , w 2 , … , w n ) \mathbf{w} = (w_1, w_2, \dots, w_n) w = ( w 1 , w 2 , … , w n ) 에 대해 노름은 다음과 같이 계산됩니다:
∥ w ∥ = w 1 2 + w 2 2 + ⋯ + w n 2 \|\mathbf{w}\| = \sqrt{w_1^2 + w_2^2 + \dots + w_n^2} ∥ w ∥ = w 1 2 + w 2 2 + ⋯ + w n 2
예시 :
w = ( 3 , 4 ) \mathbf{w} = (3, 4) w = ( 3 , 4 ) 일 때, ∥ w ∥ = 3 2 + 4 2 = 5 \|\mathbf{w}\| = \sqrt{3^2 + 4^2} = 5 ∥ w ∥ = 3 2 + 4 2 = 5
3. 데이터 포인트
데이터 포인트가 다음과 같다고 가정합시다:
클래스 + 1 +1 + 1 의 데이터 포인트 ( 1 , 2 ) (1, 2) ( 1 , 2 ) 와 ( 2 , 3 ) (2, 3) ( 2 , 3 )
클래스 − 1 -1 − 1 의 데이터 포인트 ( 4 , 6 ) (4, 6) ( 4 , 6 ) 와 ( 5 , 7 ) (5, 7) ( 5 , 7 )
따라서, 데이터셋은 다음과 같습니다:
x 1 = ( 1 , 2 ) , y 1 = + 1 \mathbf{x}_1 = (1, 2), y_1 = +1 x 1 = ( 1 , 2 ) , y 1 = + 1
x 2 = ( 2 , 3 ) , y 2 = + 1 \mathbf{x}_2 = (2, 3), y_2 = +1 x 2 = ( 2 , 3 ) , y 2 = + 1
x 3 = ( 4 , 6 ) , y 3 = − 1 \mathbf{x}_3 = (4, 6), y_3 = -1 x 3 = ( 4 , 6 ) , y 3 = − 1
x 4 = ( 5 , 7 ) , y 4 = − 1 \mathbf{x}_4 = (5, 7), y_4 = -1 x 4 = ( 5 , 7 ) , y 4 = − 1
이때, 최적화 문제는 다음과 같이 설정됩니다:
min w , b 1 2 ∥ w ∥ 2 \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 min w , b 2 1 ∥ w ∥ 2
제약 조건:
+ 1 ⋅ ( w ⋅ ( 1 , 2 ) + b ) ≥ 1 +1 \cdot (\mathbf{w} \cdot (1, 2) + b) \geq 1 + 1 ⋅ ( w ⋅ ( 1 , 2 ) + b ) ≥ 1
+ 1 ⋅ ( w ⋅ ( 2 , 3 ) + b ) ≥ 1 +1 \cdot (\mathbf{w} \cdot (2, 3) + b) \geq 1 + 1 ⋅ ( w ⋅ ( 2 , 3 ) + b ) ≥ 1
− 1 ⋅ ( w ⋅ ( 4 , 6 ) + b ) ≥ 1 -1 \cdot (\mathbf{w} \cdot (4, 6) + b) \geq 1 − 1 ⋅ ( w ⋅ ( 4 , 6 ) + b ) ≥ 1
− 1 ⋅ ( w ⋅ ( 5 , 7 ) + b ) ≥ 1 -1 \cdot (\mathbf{w} \cdot (5, 7) + b) \geq 1 − 1 ⋅ ( w ⋅ ( 5 , 7 ) + b ) ≥ 1
데이터 포인트 x i \mathbf{x}_i x i 와 클래스 y i y_i y i 를 곱하는 이유는 양성 및 음성 클래스 모두 에 대해 단일한 제약 조건 을 적용하기 위함입니다.
이 문제를 풀면 최적의 w \mathbf{w} w 와 b b b 를 얻을 수 있습니다.
4. 라그랑주 승수법
라그랑주
위에서 만든 최적화 문제 풀기
각 제약 조건에 대해 라그랑주 승수 α i \alpha_i α i 를 도입합니다.
라그랑주 함수는 다음과 같이 정의됩니다:
L ( w , b , α 1 , α 2 , α 3 , α 4 ) = 1 2 ∥ w ∥ 2 − α 1 ( y 1 ( w ⋅ x 1 + b ) − 1 ) − α 2 ( y 2 ( w ⋅ x 2 + b ) − 1 ) − α 3 ( y 3 ( w ⋅ x 3 + b ) − 1 ) − α 4 ( y 4 ( w ⋅ x 4 + b ) − 1 ) L(\mathbf{w}, b, \alpha_1, \alpha_2, \alpha_3, \alpha_4) = \frac{1}{2} \|\mathbf{w}\|^2 - \alpha_1 (y_1 (\mathbf{w} \cdot \mathbf{x}_1 + b) - 1) - \alpha_2 (y_2 (\mathbf{w} \cdot \mathbf{x}_2 + b) - 1) - \alpha_3 (y_3 (\mathbf{w} \cdot \mathbf{x}_3 + b) - 1) - \alpha_4 (y_4 (\mathbf{w} \cdot \mathbf{x}_4 + b) - 1) L ( w , b , α 1 , α 2 , α 3 , α 4 ) = 2 1 ∥ w ∥ 2 − α 1 ( y 1 ( w ⋅ x 1 + b ) − 1 ) − α 2 ( y 2 ( w ⋅ x 2 + b ) − 1 ) − α 3 ( y 3 ( w ⋅ x 3 + b ) − 1 ) − α 4 ( y 4 ( w ⋅ x 4 + b ) − 1 )
여기서:
α i \alpha_i α i 는 제약 조건입니다.
α i ≥ 0 \alpha_i \geq 0 α i ≥ 0 입니다.
4-1. 라그랑주 함수의 일반적인 형태: 제약 조건을 "만족하도록"
제약 조건 g i ( w , b ) ≤ 0 g_i(\mathbf{w}, b) \leq 0 g i ( w , b ) ≤ 0 가 있을 때, 이를 라그랑주 승수로 목적 함수와 연결하면 다음과 같이 표현됩니다:
L ( w , b , α ) = f ( w , b ) + ∑ i α i g i ( w , b ) L(\mathbf{w}, b, \boldsymbol{\alpha}) = f(\mathbf{w}, b) + \sum_{i} \alpha_i g_i(\mathbf{w}, b) L ( w , b , α ) = f ( w , b ) + ∑ i α i g i ( w , b )
이 형태에서는 제약 조건 이 g i ( w , b ) ≤ 0 g_i(\mathbf{w}, b) \leq 0 g i ( w , b ) ≤ 0 일 때 α i g i \alpha_i g_i α i g i 가 양수가 되면서 적절히 페널티를 가합니다.
KKT 조건 중 Dual feasibility 에 따라 α ≥ 0 \alpha \geq 0 α ≥ 0 입니다.
4-2. 문제에 주어진 형태: 제약 조건을 "만족시키지 않을 때 벌점"
지금 주어진 식에서는 제약 조건 이 다음과 같은 형태로 표현됩니다:
y i ( w ⋅ x i + b ) − 1 ≥ 0 y_i (\mathbf{w} \cdot \mathbf{x}_i + b) - 1 \geq 0 y i ( w ⋅ x i + b ) − 1 ≥ 0
이때, 제약 조건이 위반되었을 때 벌점 을 주기 위해 − α i -\alpha_i − α i 가 사용됩니다. 따라서 라그랑주 함수는 다음과 같이 구성됩니다:
L ( w , b , α ) = f ( w , b ) − ∑ i α i ( y i ( w ⋅ x i + b ) − 1 ) L(\mathbf{w}, b, \boldsymbol{\alpha}) = f(\mathbf{w}, b) - \sum_{i} \alpha_i (y_i (\mathbf{w} \cdot \mathbf{x}_i + b) - 1) L ( w , b , α ) = f ( w , b ) − ∑ i α i ( y i ( w ⋅ x i + b ) − 1 )
KKT 조건 중 Dual feasibility 에 따라 α ≥ 0 \alpha \geq 0 α ≥ 0 입니다.
y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} y i ∈ { − 1 , + 1 } : 클래스
5.라그랑주 함수의 편미분
라그랑주 함수에 대해 w \mathbf{w} w , b b b , α 1 \alpha_1 α 1 , α 2 \alpha_2 α 2 , α 3 \alpha_3 α 3 , α 4 \alpha_4 α 4 에 대해 편미분하여 최적화 문제를 풉니다.
w \mathbf{w} w 에 대한 편미분:
∂ L ∂ w = w − ∑ i = 1 4 α i y i x i = 0 \frac{\partial L}{\partial \mathbf{w}} = \mathbf{w} - \sum_{i=1}^{4} \alpha_i y_i \mathbf{x}_i = 0 ∂ w ∂ L = w − ∑ i = 1 4 α i y i x i = 0
b b b 에 대한 편미분:
∂ L ∂ b = − ∑ i = 1 4 α i y i = 0 \frac{\partial L}{\partial b} = - \sum_{i=1}^{4} \alpha_i y_i = 0 ∂ b ∂ L = − ∑ i = 1 4 α i y i = 0
α i \alpha_i α i 에 대한 편미분:
각 α i \alpha_i α i 에 대해 다음 조건을 만족해야 합니다:
α i ≥ 0 , α i ( y i ( w ⋅ x i + b ) − 1 ) = 0 \alpha_i \geq 0, \quad \alpha_i (y_i (\mathbf{w} \cdot \mathbf{x}_i + b) - 1) = 0 α i ≥ 0 , α i ( y i ( w ⋅ x i + b ) − 1 ) = 0
이 조건은 KKT 조건 을 만족하는 것으로, 각 α i \alpha_i α i 는 대응하는 제약 조건이 활성화된 경우에만 0이 아니게 됩니다.
6. 쌍대 문제로 변환
최적화 문제를 쌍대 문제로 변환하기 위해, w \mathbf{w} w 와 b b b 를 라그랑주 함수에서 제거하고 α i \alpha_i α i 만을 포함하는 식을 얻습니다.
w , b \mathbf{w}, b w , b 에 대한 편미분 결과
w = ∑ i = 1 4 α i y i x i \mathbf{w} = \sum_{i=1}^{4} \alpha_i y_i \mathbf{x}_i w = ∑ i = 1 4 α i y i x i 를 대입하면, 쌍대 문제는 다음과 같습니다:
q ( α ) = max α ( ∑ i = 1 4 α i − 1 2 ∑ i , j = 1 4 α i α j y i y j x i ⋅ x j ) q(\alpha) = \max_{\alpha} \left( \sum_{i=1}^{4} \alpha_i - \frac{1}{2} \sum_{i,j=1}^{4} \alpha_i \alpha_j y_i y_j \mathbf{x}_i \cdot \mathbf{x}_j \right) q ( α ) = max α ( ∑ i = 1 4 α i − 2 1 ∑ i , j = 1 4 α i α j y i y j x i ⋅ x j )
제약 조건:
α i ≥ 0 , ∑ i = 1 4 α i y i = 0 \alpha_i \geq 0, \quad \sum_{i=1}^{4} \alpha_i y_i = 0 α i ≥ 0 , ∑ i = 1 4 α i y i = 0
쌍대 문제를 풀면 최적의 α i \alpha_i α i 값을 찾을 수 있고, 이를 통해 최적의 w \mathbf{w} w 와 b b b 를 계산할 수 있습니다.
7. SMO 알고리즘
이어서
SMO (Sequential Minimal Optimization) 알고리즘은 서포트 벡터 머신(SVM)의 최적화 문제를 해결하는데 사용됩니다. SVM에서의 최적화 문제는 일반적으로 쌍대 문제를 풀어야 하며, SMO는 이를 해결하기 위해 두 개의 변수 α i \alpha_i α i 와 α j \alpha_j α j 를 순차적으로 최적화합니다. 각 α i \alpha_i α i 는 라그랑주 승수이고, SMO는 이를 최소화하는 방법으로 최적의 w \mathbf{w} w 와 b b b 를 찾습니다.
소프트 마진 SVM
실제 데이터에서는 선형적으로 완벽하게 구분되지 않는 경우가 많습니다.
이를 해결하기 위해 소프트 마진이 도입됩니다.
min w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i \min_{\mathbf{w}, b, \boldsymbol{\xi}} \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^N \xi_i min w , b , ξ 2 1 ∥ w ∥ 2 + C ∑ i = 1 N ξ i
제약 조건:
y i ( w ⋅ x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 , ∀ i y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad \forall i y i ( w ⋅ x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 , ∀ i
여기서:
ξ i \xi_i ξ i : 슬랙 변수(slack variable), 허용 오차를 나타냄.
C C C : 마진과 분류 오차 간의 트레이드오프를 조정하는 하이퍼파라미터.
커널 SVM
선형 분리가 불가능한 데이터를 처리하기 위해 커널 트릭 을 사용하여, 입력 데이터를 고차원 공간으로 매핑합니다:
ϕ : x → ϕ ( x ) \phi: \mathbf{x} \to \phi(\mathbf{x}) ϕ : x → ϕ ( x )
초평면은 새로운 특징 공간에서 찾습니다:
w ⋅ ϕ ( x ) + b = 0 \mathbf{w} \cdot \phi(\mathbf{x}) + b = 0 w ⋅ ϕ ( x ) + b = 0
커널 함수 K ( x i , x j ) = ϕ ( x i ) ⋅ ϕ ( x j ) K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_j) K ( x i , x j ) = ϕ ( x i ) ⋅ ϕ ( x j ) 를 사용하여, 고차원 매핑을 명시적으로 계산하지 않아도 됩니다.
일반적인 커널 함수는 다음과 같습니다:
Linear kernel: K ( x i , x j ) = x i ⋅ x j K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i \cdot \mathbf{x}_j K ( x i , x j ) = x i ⋅ x j
Polynomial kernel: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i \cdot \mathbf{x}_j + c)^d K ( x i , x j ) = ( x i ⋅ x j + c ) d
RBF kernel: K ( x i , x j ) = exp ( − γ ∥ x i − x j ∥ 2 ) K(\mathbf{x}_i, \mathbf{x}_j) = \exp(-\gamma \|\mathbf{x}_i - \mathbf{x}_j\|^2) K ( x i , x j ) = exp ( − γ ∥ x i − x j ∥ 2 )
(Radial Basis Function, Gaussian)
Sigmoid kernel : K ( x i , x j ) = tanh ( α x i ⋅ x j + c ) K(\mathbf{x}_i, \mathbf{x}_j) = \tanh(\alpha \mathbf{x}_i \cdot \mathbf{x}_j + c) K ( x i , x j ) = tanh ( α x i ⋅ x j + c )
라그랑주 듀얼 형식과 커널
SVM의 최적화 문제는 라그랑주 듀얼 형식으로 변환되어 해결되며, 결정 함수는 다음과 같습니다:
f ( x ) = sgn ( ∑ i = 1 N α i y i K ( x i , x ) + b ) f(\mathbf{x}) = \text{sgn}\left(\sum_{i=1}^N \alpha_i y_i K(\mathbf{x}_i, \mathbf{x}) + b\right) f ( x ) = sgn ( ∑ i = 1 N α i y i K ( x i , x ) + b )
여기서:
α i \alpha_i α i : 라그랑주 승수.
K ( x i , x ) K(\mathbf{x}_i, \mathbf{x}) K ( x i , x ) : 커널 함수.
sgn \text{sgn} sgn 은 부호 함수 (sign function) 를 나타냅니다.
이 함수는 입력값이 양수인지 음수인지를 판별하고, 그에 따라 1 또는 -1을 반환하는 함수입니다.
sgn ( z ) = { 1 if z > 0 0 if z = 0 − 1 if z < 0 \text{sgn}(z) = \begin{cases} 1 & \text{if } z > 0 \\ 0 & \text{if } z = 0 \\ -1 & \text{if } z < 0 \end{cases} sgn ( z ) = ⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ 1 0 − 1 if z > 0 if z = 0 if z < 0