Eu tenho aprendido sobre redes neurais e SVMs. Os tutoriais que li enfatizaram a importância da kernelização para os SVMs. Sem uma função do kernel, os SVMs são apenas um classificador linear. Com a kernelização, os SVMs também podem incorporar recursos não lineares, o que os torna um classificador mais poderoso.
Parece-me que também se pode aplicar o kernelization às redes neurais, mas nenhum dos tutoriais sobre redes neurais que eu vi mencionou isso. As pessoas geralmente usam o truque do kernel com redes neurais? Presumo que alguém deve ter experimentado isso para ver se faz uma grande diferença. A kernelização ajuda as redes neurais tanto quanto as SVMs? Por que ou por que não?
(Posso imaginar várias maneiras de incorporar o truque do kernel nas redes neurais. Uma maneira seria usar uma função do kernel adequada para pré-processar a entrada, um vetor em , em uma entrada de maior dimensão, um vetor em R m para . Para redes neurais de várias camadas, outra alternativa seria aplicar uma função de kernel em cada nível da rede neural.)
Respostas:
Eu acho que você pode estar confundindo a terminologia de uma maneira que está tornando o problema confuso. Os SVMs funcionam definindo um limite de decisão linear, ou seja, um hiperplano. Podemos definir esse hiperplano em termos de produtos internos entre os pontos. Portanto, se definirmos que esse produto interno está em algum espaço dimensional de alta dimensão ou mesmo infinito, o que parece um hiperplano nesse novo espaço não é um linear necessário no espaço de recursos original. Portanto, tudo ainda é linear, a única coisa que fizemos foi incorporar implicitamente (por meio do novo produto interno) os pontos em algum espaço dimensional superior. Talvez você já saiba tudo isso.
Há duas questões a serem consideradas em relação às redes neurais. O primeiro foi apresentado pelo @Yuval Filmus, por causa da camada oculta as redes neurais dependem de mais do que apenas os produtos internos entre os pontos. Se você remover a camada oculta, terá algo como regressão logística, da qual existem versões kernelizadas . Talvez haja uma maneira de contornar isso, mas eu não vejo isso.
Em segundo lugar, você menciona o pré-processamento da entrada projetando-se em um espaço dimensional superior, mas não infinito. As redes neurais definem uma superfície de decisão e essa superfície não é restrita a ser linear. Isso significa que o ganho de projetar os pontos em um espaço dimensional mais alto será diferente, ou seja, pode ser mais fácil encontrar um bom conjunto de pesos, mas não necessariamente tornamos nosso modelo mais poderoso. Isso se segue do teorema da aproximação Universal, que nos diz que, dado um número suficientemente grande de unidades ocultas, podemos aproximar qualquer função (sob algumas restrições). Esta última afirmação é bastante vazia e eu meio que odeio mencionar. Por não dizer nada sobre como encontrar os pesos certos, isso não traz muito para a tabela da perspectiva do aplicativo.
fonte
O truque do kernel é possível para SVMs devido a uma propriedade especial do processo de aprendizado para SVMs. As redes neurais não parecem ter essa propriedade (até onde eu sei).
Seja os pontos no conjunto de treinamento. Normalmente, você esperaria que um algoritmo de aprendizado de máquina analisasse os valores dos 's. No entanto, o processo de aprendizado do SVM tem uma propriedade bastante notável. Não precisa conhecer os valores dos 's. É suficiente poder calcular para qualquer par de pontos de entrada desejado (ou seja, calcular o produto escalar para qualquer par de vetores de entrada de sua escolha); é tudo o que o processo de aprendizado SVM precisa.x1,…,xn∈Rd xi xi xi⋅xj
Essa propriedade especial do processo de aprendizado do SVM nos permite usar o truque do kernel. Podemos definir uma função do kernel para que seja o produto escalar de alguma transformação não linear das entradas. Se estivermos transformando os vetores de entrada por meio de uma transformação não linear (para alguns ), definiremos . A próxima propriedade interessante é que, para algumas transformações não lineares , é possível calcular mais eficiência do que computar explicitamente e depois computar seu produto escalar; você pode calcularK K(xi,xj) ϕ:Rd→Rm m>d K(xi,xj)=ϕ(xi)⋅ϕ(xj) ϕ K(xi,xj) ϕ(xi),ϕ(xj) K(xi,xj) em tempo (digamos) em vez de tempo.O(d) O(m)
Infelizmente, as redes neurais parecem não ter como tirar vantagem desse truque legal, porque o processo de aprendizado das redes neurais parece depender mais do que apenas os valoresxi⋅xj K(xi,xj) xi
fonte
Eu gostaria de compartilhar algumas observações que fiz. Dimensão da entrada: 144. Treinei uma rede neural e, durante o treinamento, a saída das camadas ocultas foi dada como entrada para a regressão logística, e o valor médio da função de perda após a montagem do modelo foi plotado.
Podemos ver que, com o aumento do tamanho da camada, os recursos ou a saída das camadas ocultas se tornam linearmente separáveis. Embora esse seja o objetivo de aprender o vetor de recurso kernelizado , a rede neural parece estar fazendo isso internamente.
fonte