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?
machine-learning
neural-network
user7677413
fonte
fonte
Respostas:
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.
fonte