Como definir o número de neurônios e camadas em redes neurais

26

Sou iniciante em redes neurais e tive problemas para entender dois conceitos:

  1. Como se decide o número de camadas intermediárias que uma determinada rede neural possui? 1 vs. 10 ou o que quer.
  2. Como se decide o número de neurônios em cada camada do meio? É recomendável ter um número igual de neurônios em cada camada do meio ou isso varia com a aplicação?
Snaggletooth
fonte

Respostas:

19

A consideração do número de neurônios para cada camada e do número de camadas em redes totalmente conectadas depende do espaço de recurso do problema. Para ilustrar o que acontece nos casos bidimensionais para representar, eu uso o espaço 2-d. Eu usei imagens dos trabalhos de um cientista . Para entender outras redes como CNNeu recomendo que você dê uma olhada aqui .

Suponha que você tenha apenas um único neurônio; nesse caso, depois de aprender os parâmetros da rede, você terá um limite de decisão linear que pode separar o espaço para duas classes individuais.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Suponha que você seja solicitado a separar os seguintes dados. Você precisará do d1que especifica o limite superior da decisão e, de alguma forma, está executando uma ANDoperação para determinar se os dados de entrada estão no lado esquerdo ou no lado direito. Line d2está realizando outra ANDoperação que investiga se os dados de entrada são superiores d2ou não. Nesse caso, d1está tentando entender se a entrada está no lado esquerdo da linha para classificar a entrada como círculo , também d2está tentando descobrir se a entrada está no lado direito da linha para classificar a entrada como círculo . Agora precisamos de outroANDoperação para agrupar os resultados das duas linhas que são construídas após o treinamento de seus parâmetros. Se a entrada estiver no lado esquerdod1e no lado direito d2, deve ser classificado como círculo .

insira a descrição da imagem aqui

Agora, suponha que você tenha o seguinte problema e seja solicitado a separar as classes. Nesse caso, a justificativa é exatamente igual à acima.

insira a descrição da imagem aqui

Para os seguintes dados:

insira a descrição da imagem aqui

o limite de decisão não é convexo e é mais complexo que os limites anteriores. Primeiro você precisa ter uma sub-rede que encontre os círculos internos. Então você tem que ter outra sub-rede que encontre o limite de decisão retangular interno que decide que as entradas que estão dentro do retângulo não são circulares e, se estão do lado de fora, são circulares. Depois disso, é necessário agrupar os resultados e dizer se os dados de entrada estão dentro do retângulo maior e fora do retângulo interno, devem ser classificados como círculo . Você precisa de outra ANDoperação para esse fim. A rede seria assim:

insira a descrição da imagem aqui


Suponha que você seja solicitado a encontrar o seguinte limite de decisão circulado .

insira a descrição da imagem aqui

Nesse caso, sua rede seria como a rede a seguir referida, mas com muito mais neurônios na primeira camada oculta.

insira a descrição da imagem aqui

meios de comunicação
fonte
11

Pergunta muito boa, pois ainda não existe uma resposta exata para essa pergunta. Este é um campo ativo de pesquisa.

Por fim, a arquitetura da sua rede está relacionada à dimensionalidade dos seus dados. Como as redes neurais são aproximadores universais, desde que sua rede seja grande o suficiente, ela poderá ajustar seus dados.

A única maneira de realmente saber qual arquitetura funciona melhor é tentar todas elas e escolher a melhor. Mas é claro que, com redes neurais, é bastante difícil, pois cada modelo leva algum tempo para ser treinado. O que algumas pessoas fazem é primeiro treinar um modelo "muito grande" de propósito e depois podá-lo removendo pesos que não contribuem muito para a rede.

E se minha rede for "muito grande"

Se sua rede for muito grande, ela poderá se super-ajustar ou se esforçar para convergir. Intuitivamente, o que acontece é que sua rede está tentando explicar seus dados de uma maneira mais complicada do que deveria. É como tentar responder a uma pergunta que poderia ser respondida com uma frase com um ensaio de 10 páginas. Pode ser difícil estruturar uma resposta tão longa e pode haver muitos fatos desnecessários. ( Consulte esta pergunta )

E se minha rede for "muito pequena"

Por outro lado, se sua rede for muito pequena, ela não será adequada para seus dados. Seria como responder com uma frase quando você deveria ter escrito um ensaio de 10 páginas. Tão boa quanto sua resposta, você estará perdendo alguns dos fatos relevantes.

Estimando o tamanho da rede

Se você conhece a dimensionalidade dos seus dados, pode saber se sua rede é grande o suficiente. Para estimar a dimensionalidade dos seus dados, você pode tentar calcular sua classificação. Essa é uma ideia central de como as pessoas estão tentando estimar o tamanho das redes.

No entanto, não é tão simples. De fato, se sua rede precisa ser de 64 dimensões, você cria uma única camada oculta de tamanho 64 ou duas camadas de tamanho 8? Aqui, vou lhe dar alguma intuição sobre o que aconteceria em ambos os casos.

Indo mais fundo

Ir fundo significa adicionar mais camadas ocultas. O que faz é permitir que a rede calcule recursos mais complexos. Em Redes Neurais Convolucionais, por exemplo, foi mostrado frequentemente que as primeiras camadas representam recursos de "baixo nível", como arestas, e as últimas camadas representam recursos de "alto nível", como faces, partes do corpo etc.

Normalmente, você precisa se aprofundar se seus dados estiverem muito desestruturados (como uma imagem) e precisar ser processado um pouco antes que informações úteis possam ser extraídas.

Indo mais longe

Ir mais fundo significa criar recursos mais complexos, e ir "mais amplo" significa simplesmente criar mais desses recursos. Pode ser que o seu problema possa ser explicado por recursos muito simples, mas é preciso que haja muitos deles. Geralmente, as camadas estão se tornando mais estreitas no final da rede pelo simples motivo de que recursos complexos carregam mais informações do que os simples e, portanto, você não precisa de tantas.

Valentin Calomme
fonte
Você pode usar o conceito de dimensão intrínseca para descobrir o número de dimensões relevantes para o seu problema. As dimensões intrínsecas tentam responder quantas variáveis ​​são necessárias para descrever completamente um sinal e isso está relacionado ao número de variáveis ​​na fonte aleatória desse sinal.
Pedro Henrique Monforte
8

Resposta curta: está muito relacionado às dimensões dos seus dados e ao tipo de aplicativo.

A escolha do número certo de camadas só pode ser alcançada com a prática. Ainda não há uma resposta geral para essa pergunta . Ao escolher uma arquitetura de rede, você restringe seu espaço de possibilidades (espaço de hipóteses) a uma série específica de operações do tensor, mapeando os dados de entrada para os dados de saída. Em um DeepNN, cada camada pode acessar apenas as informações presentes na saída da camada anterior. Se uma camada soltar algumas informações relevantes para o problema em questão, essas informações nunca poderão ser recuperadas por camadas posteriores. Isso geralmente é chamado de " Gargalo de informações ".

O gargalo de informações é uma faca de dois gumes:

1) Se você usar um número pequeno de camadas / neurônios, o modelo aprenderá apenas algumas representações / características úteis dos seus dados e perderá algumas importantes, porque a capacidade das camadas intermediárias é muito limitada (menos adequada ).

2) Se você usar um grande número de camadas / neurônios, o modelo aprenderá muitas representações / características específicas dos dados de treinamento e não serão generalizadas para dados no mundo real e fora do seu conjunto de treinamento (ajuste excessivo) )

Links úteis para exemplos e mais informações:

[1] https: //livebook.manning.com#! / Book / deep-learning-with-python / chapter-3 / point-1130-232-232-0

[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/

moh
fonte
4

Trabalhando com redes neurais desde dois anos atrás, esse é um problema que sempre tenho cada vez que não quero modelar um novo sistema. A melhor abordagem que encontrei é a seguinte:

  1. Procure problemas semelhantes que também foram modelados com redes feed-forward e estude suas arquiteturas.
  2. Comece com essa configuração, treine o conjunto de dados e avalie o conjunto de testes.
  3. Realizar poda em sua arquitetura e compare os resultados no conjunto de dados com os resultados anteriores. Se a precisão do seu modelo não for afetada, você poderá inferir que o modelo original está ajustando demais os dados.
  4. Caso contrário, tente adicionar mais graus de liberdade (ou seja, mais camadas).

A abordagem geral é tentar arquiteturas diferentes, comparar resultados e obter a melhor configuração. A experiência oferece mais intuição no primeiro palpite de arquitetura.

Federico Caccia
fonte
1

Além das respostas anteriores, existem abordagens em que a topologia da rede neural surge endogenamente, como parte do treinamento. O mais importante é que você tem a NEURO (Neuroevolução de Topologias Aumentadas), onde começa com uma rede básica sem camadas ocultas e, em seguida, usa um algoritmo genético para "complexificar" a estrutura da rede. O NEAT é implementado em muitas estruturas de ML. Aqui está um artigo bastante acessível sobre uma implementação para aprender Mario: CrAIg: Usando redes neurais para aprender Mario

Frederic Schneider
fonte