2025. 3. 15. 19:59ㆍ머신러닝, 딥러닝 개념/지도 학습
이 포스팅에서는 Support Vector Machine에서 쓰이는 수학 개념 위주로 다룬다. 서포트 머신 벡터에 대한 기본 개념은 다음 포스팅을 참고하기 바람.
https://one-plus-one-is-two.tistory.com/17
지도 학습(6) : 서포트 벡터 머신
① 서포트 벡터 머신(Support Vector Machine, SVM) 개요두 개의 클래스가 존재하는 데이터셋이 다음과 같이 분포되어 있다고 하자. 위 그림에서 두 클래스를 구분짓는 직선을 하나 그어보라고 하면 그
one-plus-one-is-two.tistory.com
이번 포스팅은 다음 교재의 내용을 참고하여 작성하였다.
https://see.stanford.edu/materials/aimlcs229/cs229-notes3.pdf
포스팅 내용이 상당히 어려우므로 svm의 수학적 원리까지 안 궁금한 사람은 뒤로가기를 눌러도 된다. (사실 나도 완벽히 이해하진 못했다.)
① Lagrange Duality
라그랑주 함수(Lagragian)
다음과 같은 최적화 문제가 있다고 하자.
$h_i(w)=0$ ($i=1,\cdots,l$)이라는 제약 조건이 있을 때 $f(w)$의 최솟값을 구하라는 문제다. s.t.는 subject to의 약어로, '~의 조건 하에'라는 뜻으로 이해하면 될 것 같다.
위 제약 조건이 있는 최적화 문제를 다음과 같이 하나의 라그랑주 함수(Lagrangian)로 바꿔쓸 수 있다.
이때, 제약조건 $h_i(w)$에 곱해진 $\beta_i$를 라그랑주 승수(Lagrange Multiplier)라고 한다. 이 라그랑주 함수 $\mathcal L$에 대해 다음 두 방정식을 연립해서 푼다.
$\frac{\partial \mathcal L}{\partial \beta_i} = 0$이 되어야 하는 이유는 제약 조건 $h_i(w)=0$을 만족시키기 위해서이다. $\mathcal L$을 $\beta_i$에 대해 편미분하면 $h_i(w)$가 됨을 주목하자.
이렇게 제약조건을 만족시킨 상태에서 $w$에 의한 $\mathcal L$의 최솟값을 찾아야 한다. 고등학교에서 미분가능한 함수 $f(x)$가 $x=\alpha$에서 극소 또는 극대, 즉 $f'(\alpha)=0$이면 $f(\alpha)$는 최솟값 또는 최댓값의 후보가 된다는 사실을 알고 있을 것이다. 여기서도 같은 논리로 $\frac{\partial \mathcal L}{\partial w} = 0$이 되도록 하는 $w$와 $\beta$에 대해 $\mathcal L(w, \beta)$가 $\mathcal L$의 최솟값 후보가 된다.
일반화된 라그랑주 함수(Generalized Lagrangian)
다음과 같은 최적화 문제를 보자.
이번에는 부등식 제약 조건이 포함돼 있다. 부등식 제약 조건이 포함돼 있어도 다음과 같이 하나의 Lagrangian으로 쓸 수 있다.
단, KKT 조건에 의해 $\alpha_i ≥ 0$이어야 한다. KKT 조건에 대해서는 나중에 알아보기로 하자.
라그랑주 승수 $\alpha$, $\beta$와 라그랑주 함수 $\mathcal L(w, \alpha, \beta)$에 대해 $\theta_{\mathcal P}$를 다음과 같이 정의하자(이때, $\mathcal P$는 Primal(원래의, 원시의)의 P이다).
이 primal은 $g_i(w)$와 $h_i(w)$가 제약 조건을 잘 지키면 $f(w)$가 되지만, 제약 조건을 위반하면 무한대로 발산해버린다.
만약에 $g_i(w)$가 $g_i(w)≤0$이라는 제약 조건을 무시하고 양수가 된다면, $\alpha_i$를 매우 크게 조정함으로써 Lagrangian $\mathcal L$을 한없이 크게 만들어버릴 수 있다. $h_i(w)$도 마찬가지로 $h_i(w)=0$라는 제약 조건을 무시하고 0이 아닌 값을 가지면 $\mathcal L$을 무한대로 발산시킬 수 있는 $\beta_i$의 값이 얼마든지 존재한다. 하지만 $g_i(w)$와 $h_i(w)$가 제약 조건을 잘 지킨다면 $\alpha_i g_i(w)$의 최댓값은 모두 0이고 $\beta_i h_i(w)$의 최댓값도 모두 0이므로 $\mathcal L$의 최댓값은 $f(w)$가 된다. 따라서 $\theta_{\mathcal P}$를 case에 따라 분류하면 다음과 같다.
따라서 주어진 최적화 문제는 이 $\theta_{\mathcal P}$를 $w$에 대해 최소화시키는 문제와 같다.
$$p^*=\min_{w} \theta_{\mathcal P}(w) = \min_{w} \max_{\alpha, \beta : \alpha_i ≥ 0} \mathcal L (w, \alpha, \beta)$$
위 수식의 $p^*$이 원시 문제(Primal Problem)의 해가 된다.
이번엔 이 문제를 다른 관점에서 보자. 위 수식에서 min과 max의 순서를 바꿀 것이다. 먼저 $\theta_{\mathcal D}$를 다음과 같이 정의하자(이때, $\mathcal D$는 Dual(쌍대의)의 D이다.)
그런 다음 라그랑주 승수들에 대해 $\theta_\mathcal D$를 최대화 시킨다.
$$d^*=\max_{ \alpha, \beta : \alpha_i ≥ 0 } \theta_{\mathcal P}(w) = \max_{\alpha, \beta : \alpha_i ≥ 0} \min_{w} \mathcal L (w, \alpha, \beta)$$
위 수식의 $d^*$이 쌍대 문제(Dual Problem)의 해이다.
지금까지 $p^*$와 $d^*$를 정의했는데, 일반적으로 이 둘 사이에는 다음과 같은 등식이 성립한다고 한다.
$$d^* ≤ p^*$$
하지만 어떤 조건이 성립한다면 둘의 값이 반드시 같아진다.
$$d^* = p^*$$
그 '어떤 조건'을 KKT(Karush-Kuhn-Tucker) 조건이라고 한다. KKT 조건의 내용은 다음과 같다.
② SVM에서의 Lagrange Duality 활용
하드 마진 방식의 SVM에서 풀어야 하는 최적화 문제는 다음과 같다.
여기서 부등호 제약 조건은 $g(x)≤0$ 꼴이 되어야 하므로 제약 조건을 다음과 같이 변형한다.
이때, $y^{(i)}$와 $b$는 스칼라이고 $w$와 $x^{(i)}$는 벡터이다. 이를 기반으로 Lagrangian을 작성하면 다음과 같다.
물론 이 문제의 해는 다음과 같이 정의되는 $p^*$이다.
$$p^* = \min_{w,b} \max_{\alpha : \alpha_i ≥ 0} \mathcal L(w, b, \alpha)$$
하지만 우리는 $p^*$ 대신 쌍대 문제의 해 $d^*$를 구할 것이다.
$$d^* = \max_{\alpha : \alpha_i ≥ 0} \min_{w,b} \mathcal L(w, b, \alpha)$$
그런데 앞서 $d^* = p^*$를 만족시키려면 KKT 조건을 만족시켜야 한다고 했다.
우선 KKT 조건 중 $\nabla_w \mathcal L(w, b, \alpha)=0$ 조건을 만족시키도록 하는 $w$를 구해보자. $ \nabla_w \mathcal L(w, b, \alpha)$는 $\mathcal L$의 $w$에 대한 편도함수를 의미한다. 여기서는 $w$가 벡터이므로 표현을 바꿨다.
$$\mathcal L(w, b, \alpha) = \frac{1}{2} \| w \|^{2} - \sum_{i=1}^{m} \alpha_i \left[y^{(i)}(w^{\it T}x^{(i)}+b)-1 \right]$$
을 전개하면
$$\mathcal L(w, b, \alpha) = \frac{1}{2} \| w \|^{2} - \sum_{i=1}^{m} (\alpha_i y^{(i)}w^{\it T}x^{(i)}+ \alpha_i y^{(i)} b- \alpha_i )$$
인데, 이를 $w$에 대해 편미분하면 $\nabla_w \ \ \frac{1}{2}\| w \|^{2} = \nabla_w \frac{w^{\it T}w}{2} = w$이고, 시그마 식에서 $\nabla_w \ \ \alpha_i y^{(i)}w^{\it T}x^{(i)} = \alpha_i y^{(i)}x^{(i)} $이다. 나머지 항은 $w$가 없기 때문에 $w$에 대해 편미분하면 모두 0이 된다. 따라서 최종 편미분 결과는 다음과 같다.
따라서 $$w=\sum_{i=1}^m \alpha_i y^{(i)}x^{(i)}$$를 얻는다.
다음으로 KKT 조건 중 $\frac{\partial \mathcal L}{\partial b} =0$을 만족시키도록 만들어보자.
$$\frac{\partial \mathcal L}{\partial b} = -\sum_{i=1}^{m} \alpha_i y^{(i)} = 0$$
따라서 다음을 얻는다.
$$\sum_{i=1}^{m} \alpha_i y^{(i)} = 0$$
그래서 구한 것들을 다음과 같이 $\mathcal L$에 대입해준다.
이를 위와 같이 대입해준다. 근데 대입해주는 것 마저도 쉽지가 않다... (하여튼 인생에 쉬운게 없어) 그래도 하나하나 해보자. 먼저 $\frac{1}{2} \| w \|^{2}$을 정리하는 과정부터 보이겠다.
\begin{aligned}
\frac{1}{2}\|w\|^{2}
&= \frac{1}{2}w^{\it T}w \\[8pt]
&= \frac{1}{2}\left[\sum_{i=1}^{m}\alpha_i y^{(i)}x^{(i)}\right]^{\it T} \left[\sum_{j=1}^{m}\alpha_j y^{(j)}x^{(j)}\right] \\[8pt]
&= \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_j y^{(i)}y^{(j)} \{x^{(i)}\}^{\it T} x^{(j)} \\[8pt]
&= \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_j y^{(i)}y^{(j)}\langle x^{(i)}, x^{(j)}\rangle
\end{aligned}
이때, $ \langle x^{(i)}, x^{(j)}\rangle $은 $x^{(i)}$와 $x^{(j)}$의 내적을 의미한다. 이는 $x^{(i)} \cdot x^{(j)}$ 또는 $\{x^{(i)}\}^{\it T} x^{(j)}$와 같은 의미이다.
그 다음으로 $\alpha_i y^{(i)} w^{\it T} x^{(i)}$를 정리해보자.
\begin{aligned}
\alpha_i y^{(i)} w^{\it T} x^{(i)}
&= \alpha_i y^{(i)} \left[ \sum_{j=1}^{m} \alpha_j y^{(j)} \{x^{(j)}\}^{\it T} \right] x^{(i)} \\[8pt]
&= \alpha_i y^{(i)} \sum_{j=1}^{m} \alpha_j y^{(j)} \{x^{(j)}\}^{\it T} x^{(i)} \\[8pt]
&= \sum_{j=1}^{m} \alpha_i \alpha_j y^{(i)} y^{(j)} \langle x^{(i)}, x^{(j)} \rangle
\end{aligned}
따라서
\begin{aligned}
\mathcal L(w, b, \alpha)
&= \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_j y^{(i)}y^{(j)}\langle x^{(i)}, x^{(j)}\rangle - \sum_{i=1}^{m} \left( \sum_{j=1}^{m}\alpha_i \alpha_j y^{(i)}y^{(j)}\langle x^{(i)}, x^{(j)}\rangle - \alpha_i \right) \\[8pt]
&= \sum_{i=1}^{m} \alpha_i -\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_j y^{(i)}y^{(j)}\langle x^{(i)}, x^{(j)}\rangle
\end{aligned}
따라서 다음과 같은 Dual Problem을 얻을 수 있다.
즉, 원래 세 가지 파라미터 $w$, $b$, $\alpha$가 존재했던 목적 함수 $\mathcal L(w, b, \alpha)$는 파라미터가 하나인 $W(\alpha)$로 변환됐다. 그리고 이 목적 함수를 $\alpha$로 최대화시키는 것으로 문제가 바뀌었다. 이 문제 같은 경우에는 사람이 직접 풀기 어려우므로 컴퓨터를 이용하면 빠르게 계산할 수 있다. CVX, Quadprog, LIBSVM과 같은 최적화 소프트웨어를 사용하거나 Sequential Minimal Optimization(SMO) 알고리즘을 이용하여 계산할 수 있다고 한다.
주어진 최적화 문제의 해가 $w=w^{*}$, $b=b^{*}$, $\alpha = \alpha^{*}$라고 하자. $w^{*}$는 앞에서 $ w^{*}=\sum_{i=1}^m \alpha_i y^{(i)}x^{(i)}$라고 언급한 바 있고, $\alpha^{*}$는 사람이 손으로 구하기엔 너무 복잡하므로 소프트웨어를 이용한다고 했다. 그런데 $b^{*}$를 아직 구하지 않았다. 이제 슬슬 내용 쓰기가 너무 귀찮아져서 그냥 ChatGPT에게 받은 답변만 그대로 캡쳐해왔다.
잘 알아들으셨기를 바람 솔직히 내가 직접 쓴 것도 이해하는 사람 거의 없을 듯 한데
③ Kernel SVM
내가 지난 포스팅에서 '커널 svm은 비선형으로 분포된 데이터에 대해 차원을 늘려서 분리하는 방식이고~ 이러이러한 커널들이 있고~ 이 커널은 이런 특징이 있고 이런 장단점이 있고...' 같이 뭉뚱그려서 얘기했었다. 사실 윗 내용을 모르면 kernel svm도 수식을 이용해서 설명할 수 없다. 근데 이제 내용을 다 알려줬으니(이해한 사람이 거의 없을듯 해도) kernel svm을 수식으로 이해해보도록 하자.
svm의 초평면은 다음과 같다.
$$f(x)=wx+b$$
그런데 최적화 되었을 때 $w= \sum_{i=1}^m \alpha_i y^{(i)}x^{(i)}$가 된다고 세 번째 말하는 것 같고, $b$는 최적화 결과를 ChatGPT 캡쳐본으로 가져왔지만 저거 쓰기 굉장히 귀찮으니 그냥 $b$라고 쓰자. 따라서 최적화된 파라미터를 사용한 초평면은 다음과 같다.
\begin{aligned}
f(x)
&= \sum_{i=1}^m \alpha_i y^{(i)}x^{(i)} \cdot x+b \\[8pt]
&= \sum_{i=1}^m \alpha_i y^{(i)} \langle x^{(i)}, x \rangle + b
\end{aligned}
커널이 적용된 부분은 두 벡터가 내적 연산되는 부분 $ \langle x^{(i)}, x \rangle $이다. 여기서는 선형 커널(linear kernel)이 적용된 것이다. 선형 커널을 수식으로 쓰면 다음과 같다.
$$k(x^{(i)},\ x)= \langle x^{(i)}, \ x \rangle$$
Kernel SVM의 일반화
커널 $k(x^{(i)}, \ x)$가 적용된 결정함수 $f(x)$는 다음과 같이 나타낼 수 있다.
$$f(x) = \sum_{i=1}^m \alpha_i y^{(i)} k(x^{(i)},\ x)+b $$
커널이 선형 커널이면 $k(x^{(i)},\ x)= \langle x^{(i)}, \ x \rangle$임도 앞에서 언급했었다.
그러면 이제 다항 커널, RBF 커널, 시그모이드 커널은 어떤 수식을 취하는지 간단히 언급하고 마치려고 한다.
- 다항 커널(Polynomial Kernel) : $ k(x^{(i)},\ x) = (\gamma \langle x^{(i)}, \ x \rangle + c)^{d} $
- 가우시안 RBF 커널(Gaussian Radial Basis Function Kernel) : $ k(x^{(i)},\ x) = \exp ( - \gamma \| (x^{(i)}, x)\|^{2}) $
- 시그모이드 커널(Sigmoid Kernel) : $ k(x^{(i)},\ x) = \tanh ( \gamma \langle x^{(i)}, \ x \rangle +c) $
그 외 다른 커널들이 있을 수 있지만 대표적으로 많이 쓰이는 커널은 이 네 가지이고, 이들 중에서도 가장 많이 쓰이는 커널이 가우시안 RBF 커널인 것 같다. 사이킷런의 SVC(분류), SVR(회귀) 클래스에서도 kernel 파라미터의 디폴트값은 'rbf'이다.
텍스트로만 보면 와닿지 않을 수 있으니, 가우시안 RBF 커널과 시그모이드 커널이 적용된 그림을 제시하고 포스팅을 마치겠다.
<가우시안 RBF 커널>
<시그모이드 커널>
커널이 적용되면서 2차원 평면이 3차원 공간으로 확장되었으니, 데이터를 분리할 때는 2차원 초평면을 이용하여 분리하면 된다.
다음 포스팅은 더 쉬운 내용으로 찾아오는걸로... (수식이 너무 많아서 나도 힘듦)
'머신러닝, 딥러닝 개념 > 지도 학습' 카테고리의 다른 글
지도 학습(7) : 나이브 베이즈 (1) | 2025.03.18 |
---|---|
지도 학습(6) : 서포트 벡터 머신 (1) | 2025.03.14 |
지도 학습(5) : k-최근접 이웃 (3) | 2025.03.10 |
지도 학습(4) : 로지스틱 회귀 (3) | 2025.03.10 |
지도 학습(3) : 다항 회귀, 릿지 회귀, 라쏘 회귀, 엘라스틱 넷 (1) | 2025.03.05 |