No ano passado, no NIPS 2017, Ali Rahimi e Ben Recht ganharam o prêmio do teste do tempo por seu artigo "Recursos Aleatórios para Máquinas de Kernel em Grande Escala", onde introduziram recursos aleatórios, posteriormente codificados como o algoritmo de pias de cozinha aleatórias. Como parte da divulgação de seu trabalho, eles mostraram que seu modelo poderia ser implementado em 5 linhas do 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);
Como o algoritmo acima aprende algo não está claro para mim. Como funciona uma pia de cozinha aleatória? Como ele aproxima os processos gaussianos e suporta máquinas vetoriais?
Editar
Relembrando a palestra de Rahimi, o termo pias de cozinha aleatórias não é introduzido no artigo pelo qual eles ganharam o prêmio, mas no final da trilogia de artigos que começam com "Recursos aleatórios para máquinas de kernel em grande escala". Os outros trabalhos são:
Eu acho que o trecho de código introduzido acima é uma especialização do Algoritmo 1 no último artigo.