L'anno scorso al NIPS 2017 Ali Rahimi e Ben Recht hanno vinto il premio test of time per il loro articolo "Funzioni casuali per macchine kernel di grandi dimensioni", dove hanno introdotto funzionalità casuali, successivamente codificate come algoritmo di lavelli da cucina casuali. Durante la pubblicità del loro documento, hanno dimostrato che il loro modello poteva essere implementato in 5 righe di MATLAB.
% 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);
Come l'algoritmo sopra apprende qualcosa non mi è chiaro. Come funziona un lavello da cucina a caso? In che modo approssima i processi gaussiani e supporta le macchine vettoriali?
modificare
Guardando il discorso di Rahimi, il termine lavelli da cucina casuali non è stato introdotto nel documento per il quale hanno vinto il premio, ma piuttosto alla fine della trilogia di articoli che inizia con "Funzioni casuali per macchine kernel su larga scala". Gli altri documenti sono:
Penso che lo snippet di codice introdotto sopra sia una specializzazione di Algorithm 1 nell'ultimo documento.