Depurando redes neurais

10

Eu construí uma rede neural artificial em python usando a função de otimização scipy.optimize.minimize (Conjugate gradient).

Eu implementei a verificação de gradiente, verifiquei tudo, etc, e tenho certeza de que está funcionando corretamente.

Eu o executei algumas vezes e ele alcança 'Otimização finalizada com êxito', no entanto, quando eu aumento o número de camadas ocultas, o custo da hipótese aumenta (todo o resto é mantido o mesmo) após a finalização com êxito.

Intuitivamente, parece que o custo deve diminuir quando o número de camadas ocultas é aumentado, pois é capaz de gerar uma hipótese mais complexa que pode ajustar melhor os dados, mas isso parece não ser o caso.

Eu estaria interessado em entender o que está acontecendo aqui, ou se eu implementei a rede neural incorretamente?

user3726050
fonte

Respostas:

9

Existem tantas maneiras de dar errado com uma rede neural que será difícil depurar. Além disso, para abordar sua intuição, cada camada oculta adicional torna o aprendizado muito mais difícil. Com isso dito, aqui estão algumas possibilidades:

  1. Você adicionou queda de peso. Adicionar mais camadas adiciona mais pesos, o que aumenta seu custo de regularização.
  2. O problema é simples o suficiente para que um modelo com uma única camada oculta seja suficiente. A adição de mais camadas ocultas dificulta a aprendizagem da rede (problema de otimização mais difícil).
  3. O método de otimização não está fazendo um ótimo trabalho (prefiro climin a scipy.optimize).
  4. Você está usando a função de ativação sigmoide / tanh. A função sigmóide causa o problema do gradiente de fuga, o que dificulta o aprendizado com mais camadas. Tente usar a função ReLu.

O treinamento de redes neurais requer muita prática, sorte e paciência. Boa sorte.

user1133029
fonte
11
Boa resposta. Perceba que 2, 3, 4 podem interagir de maneiras complexas. A depuração pode ser feita verificando os valores de ativação da RNA, a magnitude dos pesos da RNA, mantendo um olho no erro dentro e fora da amostra e na convergência do otimizador, etc.
Def_Os
3

Aumentar o número de camadas ocultas para uma rede neural padrão, na verdade, não melhora os resultados na maioria dos casos. Alterar o tamanho da camada oculta será.

Esse fato (que o número de camadas ocultas faz muito pouco) foi observado historicamente e é a motivação por trás do campo da aprendizagem profunda. O aprendizado profundo é formas efetivamente inteligentes de treinar redes neurais multicamadas, por exemplo, isolando subconjuntos de recursos ao treinar diferentes camadas.

Bom vídeo introdutório sobre este tópico no YouTube

Eric Chiang
fonte
2
O aprendizado profundo consiste em aumentar o número de camadas ocultas. Caso contrário, seria chamado de aprendizagem gordura :)
Emre
@ Emre definitivamente significava isso. Amaldiçoe minha pontuação!
precisa