Wie kann man ein einfaches Perzeptron kernelisieren?

10

Klassifizierungsprobleme mit nichtlinearen Grenzen können nicht mit einem einfachen Perzeptron gelöst werden . Der folgende R-Code dient nur zur Veranschaulichung und basiert auf diesem Beispiel in Python.

nonlin <- function(x, deriv = F) {
  if (deriv) x*(1-x)
  else 1/(1+exp(-x))
}

X <- matrix(c(-3,1,
              -2,1,
              -1,1,
               0,1,
               1,1,
               2,1,
               3,1), ncol=2, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(2,-1,1)

for (iter in 1:100000) {
  l1 <- nonlin(X %*% syn0)
  l1_error <- y - l1
  l1_delta <- l1_error * nonlin(l1,T)
  syn0 <- syn0 + t(X) %*% l1_delta
}

print("Output After Training:")
## [1] "Output After Training:"
round(l1,3)
##       [,1]
## [1,] 0.488
## [2,] 0.468
## [3,] 0.449
## [4,] 0.429
## [5,] 0.410
## [6,] 0.391
## [7,] 0.373

Die Idee eines Kernels und des sogenannten Kernel-Tricks besteht nun darin, den Eingaberaum wie folgt in einen höherdimensionalen Raum zu projizieren ( Bildquellen ):

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Meine Frage
Wie verwende ich den Kernel-Trick (z. B. mit einem einfachen quadratischen Kernel), um ein Kernel-Perzeptron zu erhalten , das das gegebene Klassifizierungsproblem lösen kann? Bitte beachten Sie: Dies ist hauptsächlich eine konzeptionelle Frage, aber wenn Sie auch die erforderliche Code-Änderung vornehmen könnten, wäre dies großartig

Was ich bisher versucht habe, habe
ich das Folgende versucht, was in Ordnung funktioniert, aber ich denke, dass dies nicht das eigentliche Geschäft ist, da es für komplexere Probleme rechenintensiv wird (der "Trick" hinter dem "Kernel-Trick" ist nicht nur die Idee eines Kernel selbst, aber dass Sie die Projektion nicht für alle Instanzen berechnen müssen):

X <- matrix(c(-3,9,1,
              -2,4,1,
              -1,1,1,
               0,0,1,
               1,1,1,
               2,4,1,
               3,9,1), ncol=3, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(3,-1,1)

Vollständige Offenlegung
Ich habe diese Frage vor einer Woche auf SO gepostet, aber sie hat nicht viel Aufmerksamkeit erhalten. Ich vermute, dass hier ein besserer Ort ist, weil es eher eine konzeptionelle Frage als eine Programmierfrage ist.

vonjd
quelle

Antworten:

2

XX=X,X<,>:Rp×RpRk:Rp×RpR

K(xi,xj)=exp(||xixj||22σ2)

Wie auf der Wikipedia-Seite des Kernel-Perzeptrons erwähnt , wählen wir eine Teilmenge der Größe der Eingaben aus und verwenden eine lineare Kombination davon, um unsere Ausgabe zu erzeugen. M

f(x)=iMαiyiK(x,xi)

Wenn Sie die Support Vector Machine ( SVM ) gesehen haben, werden Sie das identische Dual bemerken. Um die zu verwendende Teilmenge der Größe auszuwählen , optimieren wir über , was darstellt, ob Probe ein Unterstützungs- / Basisvektor unserer Lösung ist. In die Optimierung des wir die Gewichte der ursprünglichen Perzeptronoptimierung ein.Mαiiαiωi

Ihre Frage, ob Sie die Projektion nicht berechnen müssen, ist richtig. Ihre Eingabedatenmatrix ist immer noch zweidimensional. Bei der Berechnung der Ausgabe haben wir ein Punktprodukt durch die Kernelfunktion ersetzt, und hier erfolgt die 'implizite' Berechnung im Merkmalsraum.X

Kellan Fluette
quelle
Gaußscher
Radialbasisfunktionskern
Vielen Dank - Könnten Sie Ihre Antwort vielleicht konkreter machen, indem Sie angeben, welche Zeilen im Code von oben auf welche Weise geändert werden müssen? Wenn Sie R nicht kennen, können die Änderungen natürlich im Pseudocode angegeben werden. Ich würde dann gerne Ihre Antwort annehmen :-)
vonjd
Der Beitrag, auf den Sie verlinkt haben und auf dem Sie Ihren Code basieren, ist meiner Meinung nach eine schlechte Darstellung von Perzeptronen und Rückausbreitung, obwohl er sicherlich knapp ist. Wissen Sie, wie die Rückausbreitung funktioniert und wie die allgemeine Perzeptrontheorie funktioniert?
Kellan Fluette
Nun, bis zu einem gewissen Punkt würde ich hoffen. Was genau willst du? Wie würden Sie den obigen Code ändern, um den Kernel-Trick mit einem quadratischen Kernel zu verwenden?
vonjd
Gibt es nicht ein $ \ vec {x} ^ \ intercal \ vec {x) $ im Lagrange-Dual des Wahrnehmungskriteriums? Hier ersetzen Sie das innere Produkt durch die Kernelfunktionsbewertung.
Kellan Fluette