커널 트릭 (Kernel Trick): 왜 φ(x)를 직접 구축하지 않는가 — K(x,y)=φ(x)·φ(y)는 단 한 번의 함수 호출로 무한
요약
커널 트릭의 원리와 효율성을 설명하며, 고차원 특징 공간(feature space)을 명시적으로 구축하지 않고도 내적을 통해 비선형 문제를 해결하는 방법을 다룹니다. RBF 커널의 무한 차원 특성과 머서 조건(Mercer's condition)을 통해 유효한 커널의 수학적 조건을 제시합니다.
핵심 포인트
- 커널 트릭은 고차원 매핑 없이 내적 계산만으로 비선형 경계를 형성함
- RBF 커널은 무한 차원의 특징 맵을 단 한 번의 함수 호출로 처리 가능
- 유효한 커널이 되기 위해서는 머서 조건(대칭성 및 양의 준정부호)을 만족해야 함
- 명시적 특징 맵 구축 대비 계산 비용을 획기적으로 절감함
어떤 데이터는 그 자체의 좌표계 내에서 동심원이나 XOR 문제처럼 도저히 비선형적(non-linear)인 경우가 있으며, 어떤 직선으로도 이를 분리할 수 없습니다. 교과서적인 해결책은 각 점을 클래스들이 평평한 경계(flat boundary)로 분리될 수 있는 더 높은 차원의 특징 공간 (feature space) φ(x)로 _매핑 (map)_하는 것입니다. 하지만 φ는 매우 거대하거나 심지어 무한 차원 (infinite-dimensional)일 수 있기 때문에, 이를 명시적으로 구축하는 것은 불가능합니다. 커널 트릭 (kernel trick)은 이를 완전히 우회하는 마술 같은 기법이며, 일단 원리를 이해하고 나면 그 마법은 사라집니다. 저는 왜 그런지 정확히 보여주기 위해 처음부터 직접 커널 퍼셉트론 (kernel perceptron)을 구현했습니다. 실제 Gram 행렬 (Gram matrix)과 실제 결정 경계 (decision boundary)를 JS에서 실시간으로 계산하도록 만들었습니다. 여기 그 결과가 있습니다.
알고리즘은 오직 내적 (dot products)을 통해서만 데이터에 접근한다
이것이 핵심 통찰입니다. 퍼셉트론 (perceptron), SVM, PCA와 같은 방대한 선형 알고리즘 군은 원시 좌표 (raw coordinates)를 절대 직접 보지 않습니다. 이들은 오직 xᵢ · xⱼ만을 계산합니다. 따라서 모든 내적을 직접 평가할 수 있는 커널 (kernel) K(x,y) = φ(x)·φ(y)로 대체하면, φ로 차원을 높였을 때와 정확히 동일한 결과를 단 한 번의 저렴한 함수 호출 비용으로 얻을 수 있습니다. 당신은 φ를 결코 형성하지 않습니다.
def k_linear(x, y): # phi = (1, x1, x2, ...)
return 1.0 + x @ y
def k_poly(x, y, d=2): # phi = d차까지의 모든 단항식 (monomials)
...
믿지 말고 증명하라
2차원 입력의 경우, 2차 다항식 커널 (degree-2 polynomial kernel)은 명시적인 6차원 특징 맵 (feature map) φ(x) = (1, √2·x₁, √2·x₂, x₁², √2·x₁x₂, x₂²)에 대응합니다. φ를 직접 손으로 만들고 정직하게 내적을 구해보면, 한 줄짜리 커널 결과와 기계 정밀도(machine precision) 수준에서 일치함을 알 수 있습니다. 실제 상황에서는 왼쪽 항(explicit mapping)을 완전히 건너뛰는 것입니다.
def phi_poly2(x):
x1, x2 = x; r2 = np.sqrt(2.0)
return np.array([1.0, r2*x1, r2*x2, x1*x1, r2*x1*x2, x2*x2])
...
RBF (가우시안) 커널이 이 이론의 핵심입니다. 이 커널의 특징 맵은 _무한 차원 (infinite-dimensional)_입니다. 즉, 말 그대로 φ를 적어 내려갈 수조차 없습니다. 하지만 K(x,y)는 여전히 거리의 제곱에 대한 단 하나의 exp 연산일 뿐입니다. 무한한 특징 (features)을 단 한 번의 함수 호출로 처리합니다.
어떤 함수가 합법적인 커널인가? 머서 조건 (Mercer's condition)
모든 유사도 함수가 커널인 것은 아닙니다. 모든 점의 쌍에 대해 K를 수집하여 n×n 그람 행렬 (Gram matrix) Kᵢⱼ = K(xᵢ, xⱼ)를 만듭니다. K가 유효한 커널(즉, 어떤 특징 맵 (feature map)에 대해 φ(x)·φ(y)와 같음)이 되기 위한 필요충분조건은, 임의의 점들에 대해 해당 행렬이 대칭(symmetric)이고 양의 준정부호 (positive semi-definite, 모든 고유값 (eigenvalues) ≥ 0)인 것입니다. 이것이 바로 어떤 공간에서의 내적 (inner product)이 되기 위한 조건입니다.
데모에서는 9개의 고정된 점에 대해 순환 야코비 회전 솔버 (cyclic Jacobi rotation solver)를 사용하여 고유값을 처음부터 직접 계산합니다. 선형 (linear), 다항식 (polynomial), 그리고 RBF 커널은 모두 통과합니다. 유혹적으로 보이는 "거리 커널 (distance kernel)" ‖x−y‖는 음수 고유값을 생성하며 실패합니다. 따라서 아무리 유사도처럼 느껴지더라도, 어떤 특징 공간 (feature space)도 이를 구현할 수 없습니다.
커널 퍼셉트론 (Kernel perceptron)이 곡선을 그리는 방식
_듀얼 형태 (dual form)_의 퍼셉트론이 바로 핵심입니다. 학습 데이터 포인트당 하나의 계수 αᵢ를 유지하고, f(x) = Σᵢ αᵢ K(xᵢ, x)로 예측하며, 오류가 발생하면 해당 포인트의 레이블에 따라 α를 조정합니다. 가중치 벡터 (weight vector)는 전혀 존재하지 않으며, 모델은 오직 커널을 통해서만 데이터에 접촉합니다.
def train_kernel_perceptron(X, y, kernel, epochs=60):
n = len(X); G = gram(X, kernel); alpha = np.zeros(n)
for _ in range(epochs):
...
커널을 교체하면 _동일한 루프_가 곡선 경계 (curved boundary)를 학습합니다. 동심원 구조에서 선형 커널은 약 55% 근처에서 정체됩니다. 직선으로는 서로를 감싸고 있는 클래스들을 분리할 수 없기 때문입니다. 다항식 커널 (1+x·y)²나 RBF로 전환하면 정확도가 100%로 급등합니다. 경계는 특징 공간 (feature space)에서는 선형이지만, 입력 평면 (input plane)으로 돌아오면 원 형태로 휘어지기 때문입니다. 데모는 이를 문자 그대로 보여줍니다. 측면 패널에서 각 점을 (x₁², x₂²)에 다시 플로팅하는데, 여기서 단순한 선형 분리 함수 u+v=c는 원래 좌표계에서 정확히 원 x₁²+x₂²=c가 됩니다. 분리가 공짜로 이루어지는 셈입니다.
αᵢ ≠ 0인 점들이 서포트 벡터 (support vectors)이며, 이와 동일한 트릭이 SVM, 커널 PCA (kernel PCA), 그리고 가우시안 프로세스 (Gaussian processes)를 구동합니다.
커널 노브 (kernel knobs)를 드래그하며 경계 곡선 (boundary curve)이 실시간으로 변하는 것을 확인해 보세요:
https://dev48v.infy.uk/ml/day42-kernel-trick.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기