Zum Hauptinhalt springen

7.3 Der Kernel-Trick

Zentrale Beobachtung​

📄 10_kern.pdf, Folie 15

In der dualen Form (siehe 7.2) kommen Trainings- und Testdatenpunkte nur in Form von Skalarprodukten vor:

⟨xi⋅x⟩bzw.⟨Φ(xi)⋅Φ(x)⟩.\langle\mathbf{x}_i\cdot\mathbf{x}\rangle \qquad\text{bzw.}\qquad \langle\Phi(\mathbf{x}_i)\cdot\Phi(\mathbf{x})\rangle .

Man kann beweisen, dass das nicht nur für Kleinste-Quadrate-Regression und Perzeptron gilt, sondern für eine große Klasse von Optimierungsproblemen (Repräsentertheorem, siehe Schölkopf & Smola, 2002).

In all diesen Problemen kann man das Skalarprodukt ⟨Φ(x)⋅Φ(z)⟩\langle\Phi(\mathbf{x})\cdot\Phi(\mathbf{z})\rangle durch eine Kernfunktion (kernel function, kurz Kern) ersetzen:

k:Rd×Rd→RmitkΦ(x,y)=⟨Φ(x)⋅Φ(y)⟩.k : \mathbb{R}^d\times\mathbb{R}^d\to\mathbb{R} \qquad\text{mit}\qquad k_\Phi(\mathbf{x},\mathbf{y}) = \langle\Phi(\mathbf{x})\cdot\Phi(\mathbf{y})\rangle .

Das heißt: Merkmalsbildung und Skalarprodukt werden durch eine einzige Funktionsberechnung ersetzt. Man berechnet Φ\Phi nie explizit, sondern nur kk. Das ist der Kernel-Trick (kernel trick).

Die duale Entscheidungsfunktion lautet damit

f(x)=∑i=1ℓαiyi k(xi,x)+b.f(\mathbf{x}) = \sum_{i=1}^{\ell}\alpha_i y_i\, k(\mathbf{x}_i,\mathbf{x}) + b .
Der Kernel-Trick in drei Schritten
  1. Schreibe den Algorithmus so um, dass die Daten nur in Skalarprodukten vorkommen (duale Form).
  2. Ersetze jedes Skalarprodukt ⟨xi⋅xj⟩\langle\mathbf{x}_i\cdot\mathbf{x}_j\rangle durch k(xi,xj)k(\mathbf{x}_i,\mathbf{x}_j).
  3. Fertig: Der Algorithmus arbeitet jetzt implizit linear im Merkmalsraum von kk, also nichtlinear im Eingaberaum, ohne dass Φ\Phi je ausgerechnet wird.

Konstruktion einer Kernfunktion aus der Einbettung​

📄 10_kern.pdf, Folie 16

Kennt man die Einbettung Φ\Phi, kann man den zugehörigen Kern direkt nach der Definition

kΦ(x,y)=⟨Φ(x)⋅Φ(y)⟩k_\Phi(\mathbf{x},\mathbf{y}) = \langle\Phi(\mathbf{x})\cdot\Phi(\mathbf{y})\rangle

konstruieren. Interessant wird es, wenn sich das Ergebnis viel einfacher ausdrücken lässt als über Φ\Phi.

Beispiel: Monome 2. Grades in 2D, Schritt für Schritt​

Mit Φ(x)=(x12, 2 x1x2, x22)⊤\Phi(\mathbf{x}) = (x_1^2,\ \sqrt2\,x_1x_2,\ x_2^2)^\top aus 7.1 und z=(z1,z2)⊤\mathbf{z} = (z_1, z_2)^\top:

⟨Φ(x)⋅Φ(z)⟩=(x12, 2 x1x2, x22) (z12, 2 z1z2, z22)⊤=x12z12+2⋅2  x1x2z1z2+x22z22=x12z12+2 x1z1 x2z2+x22z22=(x1z1+x2z2)2(binomische Formel a2+2ab+b2=(a+b)2)=⟨x⋅z⟩2.\begin{aligned} \langle\Phi(\mathbf{x})\cdot\Phi(\mathbf{z})\rangle &= (x_1^2,\ \sqrt2\,x_1x_2,\ x_2^2)\,(z_1^2,\ \sqrt2\,z_1z_2,\ z_2^2)^\top \\ &= x_1^2z_1^2 + \sqrt2\cdot\sqrt2\; x_1x_2z_1z_2 + x_2^2z_2^2 \\ &= x_1^2z_1^2 + 2\,x_1z_1\,x_2z_2 + x_2^2z_2^2 \\ &= (x_1z_1 + x_2z_2)^2 \qquad\text{(binomische Formel } a^2+2ab+b^2 = (a+b)^2\text{)} \\ &= \langle\mathbf{x}\cdot\mathbf{z}\rangle^2 . \end{aligned}

Das Skalarprodukt im 3-dimensionalen Merkmalsraum ist also einfach das Quadrat des Skalarprodukts im Eingaberaum. Man muss Φ\Phi gar nicht ausrechnen.

Zahlenbeispiel: x=(1,2)⊤\mathbf{x} = (1, 2)^\top, z=(3,1)⊤\mathbf{z} = (3, 1)^\top.

  • Über den Merkmalsraum: Φ(x)=(1, 22, 4)\Phi(\mathbf{x}) = (1,\ 2\sqrt2,\ 4), Φ(z)=(9, 32, 1)\Phi(\mathbf{z}) = (9,\ 3\sqrt2,\ 1), also ⟨Φ(x)⋅Φ(z)⟩=1⋅9+22⋅32+4⋅1=9+12+4=25\langle\Phi(\mathbf{x})\cdot\Phi(\mathbf{z})\rangle = 1\cdot 9 + 2\sqrt2\cdot3\sqrt2 + 4\cdot1 = 9 + 12 + 4 = 25.
  • Über den Kern: ⟨x⋅z⟩=1⋅3+2⋅1=5\langle\mathbf{x}\cdot\mathbf{z}\rangle = 1\cdot3 + 2\cdot1 = 5, also k(x,z)=52=25k(\mathbf{x},\mathbf{z}) = 5^2 = 25. ✔

Gleiches Ergebnis, aber der zweite Weg braucht 2 Multiplikationen, 1 Addition und 1 Quadrierung, statt erst zweimal 3 Merkmale zu berechnen und dann deren Skalarprodukt.

Allgemein: Polynomkern vom Grad pp​

Nimmt man als Merkmale alle Produkte von pp Eingabekomponenten,

ϕj1…jp(x)=xj1xj2⋯xjpfu¨r alle j1,…,jp∈{1,…,d},\phi_{j_1\dots j_p}(\mathbf{x}) = x_{j_1}x_{j_2}\cdots x_{j_p}\qquad\text{für alle } j_1,\dots,j_p\in\lbrace 1,\dots,d\rbrace,

so ergibt sich

⟨Φ(x)⋅Φ(z)⟩=∑j1,…,jp=1dxj1⋯xjp zj1⋯zjp=∑j1,…,jp=1d(xj1zj1)⋯(xjpzjp)=(∑j=1dxjzj)p=⟨x⋅z⟩p.\langle\Phi(\mathbf{x})\cdot\Phi(\mathbf{z})\rangle = \sum_{j_1,\dots,j_p=1}^{d} x_{j_1}\cdots x_{j_p}\, z_{j_1}\cdots z_{j_p} = \sum_{j_1,\dots,j_p=1}^{d} (x_{j_1}z_{j_1})\cdots(x_{j_p}z_{j_p}) = \Big(\sum_{j=1}^{d}x_jz_j\Big)^{p} = \langle\mathbf{x}\cdot\mathbf{z}\rangle^{p} .

Der vorletzte Schritt ist einfach das Ausmultiplizieren rückwärts: (a1+⋯+ad)p(a_1+\dots+a_d)^p ausmultipliziert ergibt genau die Summe über alle Produkte aj1⋯ajpa_{j_1}\cdots a_{j_p} mit aj=xjzja_j = x_jz_j.

Ergänzung zum Zusammenhang mit dem 2D-Beispiel: Die Folie spricht von „allen Permutationen“, gemeint sind alle geordneten Index-Tupel (j1,…,jp)(j_1,\dots,j_p) (mit Wiederholung). Für d=p=2d = p = 2 sind das die vier Merkmale x1x1, x1x2, x2x1, x2x2x_1x_1,\ x_1x_2,\ x_2x_1,\ x_2x_2. Die beiden mittleren sind gleich. Fasst man sie zu einem Merkmal zusammen, muss es mit 2\sqrt2 gewichtet werden, damit das Skalarprodukt gleich bleibt: x1x2z1z2+x2x1z2z1=(2x1x2)(2z1z2)x_1x_2z_1z_2 + x_2x_1z_2z_1 = (\sqrt2 x_1x_2)(\sqrt2 z_1z_2). Genau daher kommt der Faktor 2\sqrt2 in 7.1.

Merke

Ein und derselbe Kern kann zu verschiedenen Einbettungen gehören (R4\mathbb{R}^4 mit vier geordneten Produkten oder R3\mathbb{R}^3 mit 2\sqrt2-Gewichtung). Der Kern legt die Geometrie (Skalarprodukte, Abstände, Winkel) fest, nicht die konkrete Darstellung von Φ\Phi.

Warum ist das ein „Trick“? Rechenaufwand​

Ergänzung, nicht auf den Folien. Die Anzahl der verschiedenen Monome vom Grad genau pp in dd Variablen ist

(d+p−1p).\binom{d+p-1}{p}.

Beispiel: Bilder mit 16×16=25616\times16 = 256 Pixeln, Monome vom Grad p=5p=5 (Produkte von je 5 Pixeln):

(2605)=260⋅259⋅258⋅257⋅256120≈9,5⋅109\binom{260}{5} = \frac{260\cdot259\cdot258\cdot257\cdot256}{120} \approx 9{,}5\cdot 10^{9}

Merkmale. Ein einziger Merkmalsvektor wären rund 76 GB (als double). Der Kern ⟨x⋅z⟩5\langle\mathbf{x}\cdot\mathbf{z}\rangle^5 kostet dagegen nur ein Skalarprodukt mit 256 Multiplikationen und eine Potenz.

explizit über Φ\PhiKernel-Trick
Aufwand pro SkalarproduktO((d+p−1p))O\big(\binom{d+p-1}{p}\big), praktisch O(dp)O(d^p)O(d)O(d)
Speicher pro Punkt(d+p−1p)\binom{d+p-1}{p} Zahlendd Zahlen
unendlich viele Merkmaleunmöglichmöglich (z. B. Gaußkern)

Der Preis: Man braucht alle paarweisen Kernwerte k(xi,xj)k(\mathbf{x}_i,\mathbf{x}_j) der Trainingsdaten, die Gram-Matrix mit ℓ2\ell^2 Einträgen (siehe 7.5). Bei sehr vielen Trainingspunkten wird das teuer. Außerdem muss man zur Vorhersage k(xi,x)k(\mathbf{x}_i,\mathbf{x}) für alle Trainingspunkte mit αi≠0\alpha_i \ne 0 auswerten, bei der SVM also für alle Stützvektoren.

Der inhomogene Polynomkern als Beispiel​

Ergänzung, nicht auf den Folien (der Kern selbst steht auf 📄 10_kern.pdf, Folie 25 ). Für k(x,z)=(⟨x⋅z⟩+c)2k(\mathbf{x},\mathbf{z}) = (\langle\mathbf{x}\cdot\mathbf{z}\rangle + c)^2 mit c≥0c\ge 0 in 2D rechnet man aus:

(x1z1+x2z2+c)2=x12z12+x22z22+2x1x2z1z2+2c x1z1+2c x2z2+c2=⟨Φ(x)⋅Φ(z)⟩mitΦ(x)=(x12, x22, 2 x1x2, 2c x1, 2c x2, c)⊤.\begin{aligned} (x_1z_1 + x_2z_2 + c)^2 &= x_1^2z_1^2 + x_2^2z_2^2 + 2x_1x_2z_1z_2 + 2c\,x_1z_1 + 2c\,x_2z_2 + c^2 \\ &= \big\langle \Phi(\mathbf{x})\cdot\Phi(\mathbf{z})\big\rangle \quad\text{mit}\quad \Phi(\mathbf{x}) = \big(x_1^2,\ x_2^2,\ \sqrt2\,x_1x_2,\ \sqrt{2c}\,x_1,\ \sqrt{2c}\,x_2,\ c\big)^\top . \end{aligned}

Der Merkmalsraum enthält jetzt alle Monome bis Grad 2 (inklusive linearer Terme und Konstante). Damit lassen sich auch verschobene Ellipsen, Parabeln und Hyperbeln trennen. cc steuert, wie stark die niedrigen Grade gegenüber den hohen gewichtet werden.

Fallstrick

Der homogene Kern ⟨x⋅z⟩2\langle\mathbf{x}\cdot\mathbf{z}\rangle^2 kennt nur Monome vom Grad genau 2. Eine Ellipse, die nicht um den Ursprung zentriert ist, braucht aber auch lineare Terme x1,x2x_1, x_2. Dafür nimmt man den inhomogenen Kern mit c>0c \gt 0.