Letztes Jahr auf der NIPS 2017 gewannen Ali Rahimi und Ben Recht den Test of Time Award für ihre Arbeit "Random Features for Large-Scale Kernel Machines", in der sie Random Features einführten, die später als Random-Kitchen-Sink-Algorithmus kodifiziert wurden. Im Rahmen der Veröffentlichung ihrer Arbeit zeigten sie, dass ihr Modell in 5 Zeilen Matlab implementiert werden kann.
% Approximates Gaussian Process regression
% with Gaussian kernel of variance gamma^2
% lambda: regularization parameter
% dataset: X is dxN, y is 1xN
% test: xtest is dx1
% D: dimensionality of random feature
% training
w = randn(D,d);
b = 2 * pi * rand(D, 1);
Z = cos(gamma * w * X + b * ones(1,N));
alpha = (lambda * eye(D) +Z * Z') \ (Z * y);
% testing
ztest = alpha' * cos(gamma * w * xtest + b);
Wie der obige Algorithmus irgendetwas lernt, ist mir unklar. Wie funktioniert eine zufällige Küchenspüle? Wie werden Gaußsche Prozesse angenähert und Vektormaschinen unterstützt?
Bearbeiten
In Rahimis Vortrag wird der Begriff "Random Features for Large-Scale Kernel Machines" nicht in der Zeitung erwähnt, für die sie den Preis gewonnen haben, sondern am Ende der Trilogie der Arbeiten, die mit "Random Features for Large-Scale Kernel Machines" beginnt. Die anderen Papiere sind:
Ich denke, das oben eingeführte Code-Snippet ist eine Spezialisierung von Algorithmus 1 in der letzten Veröffentlichung.