W ubiegłym roku na targach NIPS 2017 Ali Rahimi i Ben Recht wygrali próbę czasową za swój artykuł „Random Features for Large Scale Kernel Machines”, w którym wprowadzili losowe funkcje, później skodyfikowane jako algorytm losowych zlewów kuchennych. W ramach publikacji artykułu wykazali, że ich model można zaimplementować w 5 liniach Matlaba.
% 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);
To, jak powyższy algorytm uczy się czegokolwiek, jest dla mnie niejasne. Jak działa przypadkowy zlew kuchenny? Jak przybliża procesy Gaussa i obsługuje maszyny wektorowe?
Edytować
Odnosząc się do przemówienia Rahimi, termin przypadkowe zlewozmywaki kuchenne nie został wprowadzony w artykule, za który zdobyli nagrodę, ale na końcu trylogii artykułów rozpoczynającej się od „Losowych funkcji dla dużych maszyn jądra”. Pozostałe dokumenty to:
Myślę, że fragment kodu wprowadzony powyżej jest specjalizacją algorytmu 1 w ostatnim artykule.