Problema de teste de rede neural pequeno e simples?

Oct 23 2020

Estou começando a aprender sobre redes neurais e como treiná-las. Tenho lido sobre o uso de descida gradiente para treinamento. A maioria dos livros vai direto para o algoritmo de retropropogação para computação$\nabla C$, Onde $C$ é a função de custo.

Eu queria tentar computação $\nabla C$ usando diferenças finitas: $$\frac{\partial C}{\partial w_i}=\frac{1}{h}\left[C({w_i+h})-C({w_i})\right]$$ Onde $w_i$é algum peso na rede. (Por favor, perdoe minha notação desleixada.)

Eu codifiquei esse algoritmo, mas quando tento treinar minha rede nos dados MNIST, o cálculo dos gradientes leva uma eternidade. Obviamente, é por isso que todo mundo recomenda a retropropogação.

No entanto, gostaria de ver se meu algoritmo de treinamento de descida de gradiente de diferença finita funciona. Eu gostaria de comparar com a solução do Scikit-Learns para um problema simples.

Alguém pode recomendar um pequeno problema passível de solução com uma rede neural simples? De preferência, eu seria capaz de treinar em uma pequena quantidade de dados com um espaço de recursos relativamente pequeno.

Respostas

1 Sycorax Oct 23 2020 at 05:17

O caminho mais fácil a seguir é apenas reduzir o tamanho dos dados MNIST em 99% ou mais, descartando a maioria dos exemplos. Você pode até fazer algo tão extremo quanto manter apenas 20 imagens, uma de cada classe como dados de treinamento e outra de cada classe como dados de teste. Este é o menor que você poderia criar os dados MNIST sem fazer algo sofisticado como a destilação.

Outra solução simples é treinar um modelo no problema XOR. O Tensorflow Playground tem vários problemas de brinquedo no navegador para brincar.https://playground.tensorflow.org/