5 · 커널 방법론
지금까지 다룬 선형 매개변수 모델은 입력에서 출력까지의 사상이 매개변수에 종속적이었고, 훈련 데이터는 매개변수의 점 추정치나 사후 분포를 구한 뒤 버려졌다. 이와 달리 훈련 데이터의 전부 혹은 일부를 예측 단계에서도 사용하는 패턴 인식 방법론이 있다.

5.1 듀얼 표현
- 많은 선형 매개변수 모델은 듀얼 표현dual representation으로 재구성할 수 있으며, 이 형태에서는 훈련 데이터에서 계산한 커널 함수kernel function들의 선형 결합으로 표적값을 예측한다. 고정된 비선형 특징 공간feature space 사상
에 대해 커널은
로 정의되며, 인자에 대해 대칭이다(
- 정규화된 제곱합 오류
를 에 대해 풀면, 해가 들의 선형 결합임을 알 수 있다.
를 대입하면 오류 함수는 그램 행렬Gram matrix ( )만으로 표현된다.
에 대해 풀면 이고, 새 입력에 대한 예측은 커널만으로 표현된다.
이렇게 해를 커널만으로 표현하는 것을 듀얼 공식화dual formulation라 한다. 특징 벡터






그림 5.1 · 기저 함수 집합으로부터 커널을 구성하는 도식. 각 열의 위쪽은 기저 함수, 아래쪽은 커널
실습 · 커널 릿지 회귀 (듀얼 표현)
가우시안 커널의 그램 행렬
import numpy as np
rng = np.random.default_rng(0)
N = 20; x = np.linspace(0, 1, N); t = np.sin(2*np.pi*x) + 0.1*rng.standard_normal(N)
def gk(a, b, s=0.1): # 가우시안 커널
return np.exp(-(a[:,None]-b[None,:])**2/(2*s**2))
lam = 1e-2
K = gk(x, x)
a = np.linalg.solve(K + lam*np.eye(N), t) # a = (K+λI)⁻¹ t
xt = np.linspace(0, 1, 6); yp = gk(xt, x) @ a # y(x) = k(x)ᵀ a
for xi, yi in zip(xt, yp):
print(f"x={xi:.2f}: y_pred={yi:+.3f} sin(2πx)={np.sin(2*np.pi*xi):+.3f}")5.2 커널의 구성
- 유효한 커널을 만드는 한 방법은 특징 사상
을 정하고 대응하는 커널 을 찾는 것이다. 다른 방법은 커널을 직접 정의하되, 특징 공간의 내적으로 표현될 수 있음을 보장하는 규칙을 따르는 것이다.
커널 규칙
유효한 커널
- 널리 쓰이는 가우시안 커널
은 위 규칙으로 유효성을 확인할 수 있다. 생성 모델로 정의하는 피셔 커널Fisher kernel은 피셔 점수 와 피셔 정보 행렬 로 이다.
5.3 가우시안 과정
5.3.1 선형 회귀 재검토
개의 기저 함수 선형 결합 에 가우시안 사전 분포 를 두자. 훈련 포인트에서의 함숫값 벡터 는 가우시안의 선형 결합이므로 가우시안이며, 평균과 공분산은
- 이 모델이 가우시안 과정Gaussian process의 한 예다. 가우시안 과정은 임의의 유한 포인트 집합에서 함숫값들이 결합 가우시안이 되도록 하는
에 대한 분포이며, 평균과 공분산(커널)만으로 완전히 정의된다. 보통 평균은 으로 두고 커널로 공분산을 정한다.
5.3.2 가우시안 과정을 통한 회귀
- 표적값에 노이즈
, 을 두면, 주변 분포 와 결합해
를 얻는다. 널리 쓰이는 공분산 함수는 지수 이차항에 상수·선형항을 더한

그림 5.2 · 가우시안 과정에서 추출한 표본. 청색은 함수에 대한 사전 분포, 적색 원은
- 새 입력
에 대한 예측은 결합 분포 의 공분산을 분할해 얻는 조건부 가우시안이다.
예측 분포의 평균과 분산 모두 시험 입력


그림 5.3 · (왼쪽) 훈련·시험 포인트 하나씩에 대한 결합 분포
실습 · 가우시안 과정 회귀 (예측 평균·분산)
공분산
import numpy as np
rng = np.random.default_rng(1)
Xtr = np.sort(rng.uniform(-1, 1, 8)); ttr = np.sin(3*Xtr) + 0.05*rng.standard_normal(8)
th = (1.0, 10.0, 0.0, 0.0) # θ0 exp(-θ1/2‖·‖²)+θ2+θ3 x x'
def kern(A, B):
d = (A[:,None]-B[None,:])**2
return th[0]*np.exp(-th[1]/2*d) + th[2] + th[3]*(A[:,None]*B[None,:])
beta = 100.0
C = kern(Xtr, Xtr) + np.eye(len(Xtr))/beta # C = K + β⁻¹ I
Cinv = np.linalg.inv(C)
for xs in [-0.5, 0.0, 0.9, 1.8]:
xs = np.array([xs]); k = kern(xs, Xtr)[0]; c = kern(xs, xs)[0,0] + 1/beta
m = k @ Cinv @ ttr # (6.66) 평균
v = c - k @ Cinv @ k # (6.67) 분산
print(f"x*={xs[0]:+.2f}: 평균={m:+.3f} 표준편차={np.sqrt(max(v,0)):.3f}")5.3.3 초매개변수 학습
- 공분산 함수의 매개변수
(상관 길이 척도, 노이즈 정밀도 등)는 로그 가능도를 최대화해 추정한다.
기울기는
5.3.4 가우시안 과정을 통한 분류
- 가우시안 과정은 실수축 전체의 값을 내므로, 출력에 로지스틱 시그모이드를 씌워
확률로 만든다. 2클래스 문제에서 함수 에 가우시안 과정을 두고 로 변환하면, 표적값 분포는 베르누이 이다.


그림 5.4 · (왼쪽)
- 예측 분포
은 해석적으로 풀 수 없어, 변분 추론·기대 전파·라플라스 근사 중 하나로 근사한다. 분류에서는 모든 훈련값이 정확하다고 보므로 노이즈항 대신 수치 안정용 을 더한 을 쓴다.
5.3.5 라플라스 근사법
- 사후 분포
의 로그 의 기울기와 헤시안은
- 최빈값
에서 헤시안 으로 가우시안 근사 을 얻고, 시험 입력에 대한 잠재값의 평균·분산은


그림 5.5 · 가우시안 과정 분류. (왼쪽) 데이터와 최적 결정 경계(녹색), 가우시안 과정 결정 경계(흑색). (오른쪽) 예측 사후 확률.
실습 · 가우시안 과정 분류 (라플라스/뉴턴)
잠재 함수의 사후 최빈값을 뉴턴 갱신
import numpy as np
def sig(z): return 1/(1+np.exp(-z))
def rbf(A, B, s=1.0): return np.exp(-(A[:,None]-B[None,:])**2/(2*s**2))
rng = np.random.default_rng(2)
Xtr = np.sort(rng.uniform(-3, 3, 20))
ttr = (rng.uniform(size=20) < sig(1.5*Xtr)).astype(float)
nu = 1e-2; CN = rbf(Xtr, Xtr) + nu*np.eye(len(Xtr)); a = np.zeros(len(Xtr))
for it in range(20): # 뉴턴–라프슨 최빈값 탐색
s = sig(a); W = s*(1-s)
a_new = CN @ np.linalg.solve(np.eye(len(a)) + CN*W[None,:], ttr - s + W*a)
step = np.linalg.norm(a_new - a); a = a_new
if step < 1e-8: break
print(f"Newton 수렴: {it+1}회, |Δa|={step:.1e}")
s = sig(a); W = s*(1-s)
for xs in [-2.0, 0.0, 2.0]:
xs = np.array([xs]); k = rbf(xs, Xtr)[0]; c = 1.0 + nu
Ea = k @ (ttr - s) # E[a_*] = kᵀ(t-σ)
va = c - k @ np.linalg.solve(np.diag(1/W) + CN, k) # var[a_*]
p = sig(Ea/np.sqrt(1 + np.pi*va/8)) # 시그모이드-가우시안 근사
print(f"x*={xs[0]:+.1f}: E[a]={Ea:+.3f} var={va:.3f} p(t=1)={p:.3f}")5.4 최대 마진 분류기
커널 기법의 한계는 모든 데이터 쌍에 대해 커널을 계산해야 한다는 점이다. 희박한sparse 해를 갖는 방법은 데이터의 부분 집합에만 의존한다. 대표적인 서포트 벡터 머신support vector machine; SVM은 볼록 최적화convex optimization 문제를 풀어 지역 최적해가 곧 전역 최적해가 되며, 사후 확률이 아니라 결정을 출력한다.
로 정확히 분리되는 해가 여럿일 때, SVM은 마진margin(결정 경계와 가장 가까운 점 사이의 거리)을 최대화하는 경계를 고른다.


그림 5.6 · 마진은 결정 경계와 가장 가까운 데이터 포인트 사이의 거리다. 마진을 최대화하면 오른쪽 경계를 얻으며, 경계를 결정하는 부분 집합이 서포트 벡터(원 표시)다.
- 가장 가까운 점에 대해
로 정규화(정준 표현)하면 모든 점이 을 만족하고, 마진 최대화는 최소화가 된다.
- 라그랑주 승수
을 도입하고 , 를 소거하면 커널만 등장하는 듀얼 표현을 얻는다.
예측은
5.4.1 클래스 분포 간의 중첩
- 클래스가 겹칠 때는 오분류를 허용하되 벌점을 주기 위해 느슨한 변수slack variable
을 도입한다. 올바른 마진 안쪽이면 , 아니면 이며 제약은 이 된다. 을 금지하면 강한 마진hard margin, 허용하면 약한 마진soft margin이다.

그림 5.7 · 느슨한 변수를 적용한 SVM. 원으로 강조된 점이 서포트 벡터다.
- 목표 함수는
이며( 은 벌점과 마진의 트레이드오프), 듀얼은 강한 마진과 동일하되 제약이 로 바뀐다.
5.4.2 로지스틱 회귀와의 관계
- 목표 함수를
( ) 형태로 쓰면 는 힌지hinge 오류 이다. 정규화된 로지스틱 회귀의 오류는 로, 둘 다 오분류 오류의 연속 근사이며 형태가 유사하다.

그림 5.8 · 힌지 오류(청색),
실습 · 힌지 · 로지스틱 · 0–1 오류 비교
import numpy as np
z = np.array([-2, -1, 0, 0.5, 1, 2], dtype=float) # z = y·t
hinge = np.maximum(0, 1-z)
logistic = np.log(1+np.exp(-z))/np.log(2) # 1/ln2 재척도
zero_one = (z < 0).astype(float)
print(" z(=y·t) hinge logistic 0-1")
for i in range(len(z)):
print(f" {z[i]:+5.1f} {hinge[i]:6.3f} {logistic[i]:7.3f} {zero_one[i]:3.0f}")5.4.3 서포트 벡터 머신을 이용한 회귀
- 회귀에서 희박성을 얻기 위해
-둔감 오류 함수ε-insensitive error를 쓴다. 이면 , 아니면 이다. 두 느슨한 변수 , 을 도입해
제약하에

그림 5.9 · 서포트 벡터 회귀.
연습문제
문제 5.1
최소 제곱 선형 회귀의 듀얼 공식화에서, 해
풀이
선형 결합 표현 — 정규화된 오류
이를
즉 계수
예측 일치 — 원래 표현의 예측은
문제 5.2
고정 집합
풀이
특징 사상
곱
크기가