Como decidir a arquitetura de rede neural?

19

Fiquei me perguntando como é que vamos decidir quantos nós nas camadas ocultas e quantas camadas ocultas colocar quando construirmos uma arquitetura de rede neural.

Entendo que a camada de entrada e saída depende do conjunto de treinamento que temos, mas como decidimos a camada oculta e a arquitetura geral em geral?

user7677413
fonte
Normalmente, experimentamos, usando nossa intuição; considere um hiperparâmetro . Existem maneiras de aprender a arquitetura, mas eu não sei como eles são práticos: blog.acolyer.org/2017/05/10/...
Emre
2
Procurei uma duplicata para isso, porque tenho certeza de que ela já apareceu várias vezes neste site. No entanto, não foi possível encontrar uma versão pura que não estava anexada a algum conjunto de dados ou problema. Talvez essa possa ser a pergunta genérica para a qual apontamos outros? Infelizmente, não existe um ótimo "como responder" em geral, mas é uma pergunta comum diante de tantas opções.
Neil Slater
Esta é uma pergunta muito interessante a ser respondida (o pesquisador começou a trabalhar na sua pergunta). Qual seria a arquitetura ideal para o conjunto de dados A e o conjunto de dados B. Leia abaixo o artigo que tentou responder à sua pergunta. Bem-vindo ao mundo do NAS (Neural Architecture Search). arxiv.org/abs/1611.01578
iDeepVision

Respostas:

16

Infelizmente, não existe uma maneira genérica de determinar a priori o melhor número de neurônios e o número de camadas para uma rede neural, dada apenas uma descrição do problema. Não há muitas orientações para determinar bons valores para tentar como ponto de partida.

A abordagem mais comum parece ser começar com um palpite aproximado, com base na experiência anterior sobre redes usadas em problemas semelhantes. Pode ser sua própria experiência ou experiência em segunda / terceira mão que você adquiriu em um curso de treinamento, blog ou artigo de pesquisa. Em seguida, tente algumas variações e verifique cuidadosamente o desempenho antes de escolher o melhor.

O tamanho e a profundidade das redes neurais também interagem com outros hiperparmadores , de modo que mudar uma coisa em outro lugar pode afetar onde estão os melhores valores. Portanto, não é possível isolar um "melhor" tamanho e profundidade para uma rede e continuar ajustando outros parâmetros isoladamente. Por exemplo, se você tem uma rede muito profunda, ela pode funcionar eficientemente com a função de ativação ReLU, mas não tão bem com o sigmoide - se você encontrou o melhor tamanho / formato da rede e tentou um experimento com várias funções de ativação, pode vir à conclusão errada sobre o que funciona melhor.

Às vezes, você pode ler sobre as "regras práticas" que os pesquisadores usam ao iniciar um projeto de rede neural do zero. Essas coisas podem funcionar para os seus problemas ou não, mas pelo menos têm a vantagem de começar o problema. As variações que eu vi são:

  • Crie uma rede com camadas ocultas de tamanho semelhante à entrada e com o mesmo tamanho, alegando que não há motivo específico para variar o tamanho (a menos que você esteja criando um codificador automático, talvez).

  • Comece simples e aumente a complexidade para ver o que melhora uma rede simples.

  • Tente variar a profundidade da rede se você espera que a saída seja explicada bem pelos dados de entrada, mas com um relacionamento complexo (em oposição a apenas inerentemente barulhento).

  • Tente adicionar um pouco de abandono, é a coisa mais próxima das redes neurais do pó mágico de fadas que melhora tudo (ressalva: adicionar abandono pode melhorar a generalização, mas também pode aumentar o tamanho da camada e o tempo de treinamento).

Se você ler esses textos ou algo parecido em algum texto, leve-os com uma pitada de sal. No entanto, na pior das hipóteses, eles ajudam a superar o efeito da página em branco, a escrever algum tipo de rede e a iniciar o processo de teste e aprimoramento.


Como um aparte, tente não se perder demais no ajuste de uma rede neural quando alguma outra abordagem puder ser melhor e poupar muito tempo. Considere e use outras abordagens de aprendizado de máquina e ciência de dados. Explore os dados, talvez faça alguns gráficos. Tente algumas abordagens lineares simples primeiro para obter parâmetros de referência, regressão linear, regressão logística ou regressão softmax, dependendo do seu problema. Considere usar um algoritmo de ML diferente para NNs - abordagens baseadas em árvore de decisão, como o XGBoost, podem ser mais rápidas e eficazes do que o aprendizado profundo em muitos problemas.

Neil Slater
fonte
É uma ótima explicação. Obrigado. Também me pergunto se existe uma boa maneira de decidir qual abordagem de ML usar. Você mencionou que pode haver uma maneira melhor do que uma rede neural, mas como podemos determinar isso facilmente?
user7677413
@ user7677413: O mesmo se aplica. Você precisa tentar ver, embora a experiência possa lhe dar um guia sobre problemas familiares.
Neil Slater
1
quando é necessária a rede neural?
user7677413
1
Redes neurais raramente são necessárias . No entanto, eles são melhores em alguns problemas. Eles se destacam nas tarefas de processamento de sinal, como reconhecimento de áudio e imagem, e também têm capacidade de aprender diferenças sutis em grandes quantidades de dados, onde algoritmos mais simples podem atingir um limite. No entanto, se um NN é a ferramenta certa para você e qualquer que seja o problema que você enfrenta em um dia específico, ninguém pode prever.
Neil Slater
1
@ user7677413 Acho que você está assumindo que não há 40 anos de pesquisa profunda e perspicaz sobre aprendizado de máquina. Parece que você está apenas arranhando a superfície. Eu recomendo encontrar um livro e ver como tudo se liga, o que ajudaria a criar sua intuição para os muitos algoritmos de aprendizado de máquina.
Alex L