L'année dernière, au NIPS 2017, Ali Rahimi et Ben Recht ont remporté le prix du test du temps pour leur article "Random Features for Large-Scale Kernel Machines" où ils ont introduit des fonctionnalités aléatoires, codifiées plus tard comme l'algorithme des éviers de cuisine aléatoires. Dans le cadre de la publicité de leur article, ils ont montré que leur modèle pouvait être implémenté en 5 lignes de 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);
Comment l'algorithme ci-dessus apprend quelque chose n'est pas clair pour moi. Comment fonctionne un évier de cuisine aléatoire? Comment rapproche-t-il les processus gaussiens et prend-il en charge les machines vectorielles?
Éditer
En revoyant l'exposé de Rahimi, le terme éviers de cuisine aléatoires n'est pas introduit dans l'article pour lequel ils ont remporté le prix, mais plutôt à la fin de la trilogie d'articles commençant par "Fonctions aléatoires pour les machines à noyau à grande échelle". Les autres articles sont:
Je pense que l'extrait de code présenté ci-dessus est une spécialisation de l'algorithme 1 dans le dernier article.