Como combater a falta de ajuste em uma rede neural profunda


50

Quando comecei com redes neurais artificiais (NN), pensei que teria que combater o excesso de ajustes como o principal problema. Mas, na prática, nem consigo que meu NN ultrapasse a barreira da taxa de erro de 20%. Eu não posso nem bater minha pontuação na floresta aleatória!

Estou buscando conselhos muito gerais ou não tão gerais sobre o que fazer para que um NN comece a capturar tendências de dados.

Para implementar o NN, uso o Theano Stacked Auto Encoder com o código do tutorial que funciona muito bem (menos de 5% de taxa de erro) para classificar o conjunto de dados MNIST. É um perceptron multicamada, com a camada softmax na parte superior e cada uma delas oculta posteriormente sendo pré-treinada como autoencoder (descrito detalhadamente no tutorial , capítulo 8). Existem ~ 50 recursos de entrada e ~ 10 classes de saída. O NN possui neurônios sigmóides e todos os dados são normalizados para [0,1]. Tentei várias configurações diferentes: número de camadas ocultas e neurônios (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15, etc.), aprendizado diferente e pré-treinamento taxas etc.

E a melhor coisa que posso obter é uma taxa de erro de 20% no conjunto de validação e uma taxa de erro de 40% no conjunto de teste.

Por outro lado, quando tento usar a Floresta Aleatória (do scikit-learn), obtenho facilmente uma taxa de erro de 12% no conjunto de validação e 25% (!) No conjunto de teste.

Como é que meu NN profundo com pré-treinamento se comporta tão mal? O que devo tentar?

Respostas:


34

O problema com redes profundas é que elas possuem muitos hiperparâmetros para ajustar e um espaço de solução muito pequeno. Assim, encontrar bons é mais uma tarefa de arte do que de engenharia. Eu começaria com o exemplo de trabalho do tutorial e brincaria com seus parâmetros para ver como os resultados mudam - isso fornece uma boa intuição (embora não seja uma explicação formal) sobre as dependências entre parâmetros e resultados (finais e intermediários).

Também achei os seguintes documentos muito úteis:

Ambos descrevem RBMs, mas contêm algumas idéias sobre redes profundas em geral. Por exemplo, um dos pontos principais é que as redes precisam ser depuradas em camadas - se a camada anterior não fornecer uma boa representação dos recursos, outras camadas quase não terão chance de corrigi-las.


14

Embora a resposta do amigo dê algumas dicas excelentes para aprender mais sobre como as redes neurais podem ser (extremamente) difíceis de ajustar adequadamente, pensei que poderia ser útil listar algumas técnicas específicas que são usadas atualmente nas arquiteturas de classificação com melhor desempenho na rede neural literatura.

Ativações lineares retificadas

A primeira coisa que pode ajudar no seu caso é alternar a função de ativação do modelo do sigmóide logístico - - para um linear retificado (aka relu) - .f(z)=(1+ez)1f(z)=max(0,z)

A ativação do relu tem duas grandes vantagens:

  • sua saída é um zero verdadeiro (não apenas um valor pequeno próximo a zero) para ez0
  • sua derivada é constante, 0 para ou 1 para .z0z>0

Uma rede de unidades relu basicamente atua como um conjunto de redes lineares exponencialmente numerosas, porque as unidades que recebem a entrada estão essencialmente "desativadas" (sua saída é 0), enquanto as unidades que recebem a entrada entram em colapso em uma única linearidade. modelo para essa entrada. Também as derivadas constantes são importantes porque uma rede profunda com ativações relu tende a evitar o problema do gradiente de fuga e pode ser treinada sem pré-treinamento em camadas.z0z>0

Veja "Redes Neurais do Deep Sparse Rectifier" de Glorot, Bordes e Bengio ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf ) para um bom artigo sobre esses tópicos.

Cair fora

Muitos grupos de pesquisa nos últimos anos têm defendido o uso de "abandono" nas redes de classificação para evitar o excesso de treinamento. (Veja, por exemplo, "Dropout: uma maneira simples de impedir que as redes neurais se ajustem demais" por Srivastava, Hinton, Krizhevsky, Sutskever e Salakhutdinov http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf ) desistência, durante o treinamento, uma proporção constante das unidades em uma determinada camada é aleatoriamente definida como 0 para cada entrada que a rede processa. Isso força as unidades que não estão definidas como 0 a "compensar" as unidades "ausentes". O abandono parece ser um regularizador extremamente eficaz para modelos de redes neurais em tarefas de classificação. Veja um artigo do blog sobre isso em http: // fastml.


7
Mas a questão é sobre falta de adequação, não adequação excessiva.
Valentas

8

Você pode estar interessado em ler o seguinte artigo de pesquisadores da Microsoft Research:

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun: profundo aprendizado residual para reconhecimento de imagens em arxiv, 2015.

Eles tiveram problemas semelhantes aos seus:

Quando redes mais profundas são capazes de começar a convergir, um problema de degradação é exposto: com o aumento da profundidade da rede, a precisão fica saturada (o que pode ser surpreendente) e depois se degrada rapidamente. Inesperadamente, essa degradação não é causada por excesso de ajuste e a adição de mais camadas a um modelo adequadamente profundo leva a um maior erro de treinamento , conforme relatado em [11, 42] e completamente verificado por nossos experimentos.

Para resolver o problema, eles fizeram uso de uma arquitetura de ignorar. Com isso, eles treinaram redes muito profundas (1202 camadas) e alcançaram o melhor resultado no desafio ILSVRC 2015.


Obrigado por seu ans, você está falando sobre o problema de gradiente de fuga, se o acesso de validação for maior do que o treinamento, então o que deve fazer? Pode ocorrer um pequeno número de dados no conjunto de valores, mas às vezes não depende do conjunto de valores. Estou perguntando que existe alguma outra razão pela qual o valor acc é mais alto que o treinamento acc ??
Sudip Das
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.