Por que precisamos normalizar a entrada para uma rede neural artificial?

151

É uma questão principal, em relação à teoria das redes neurais:

Por que precisamos normalizar a entrada para uma rede neural?

Entendo que, às vezes, quando, por exemplo, os valores de entrada não são numéricos, uma certa transformação deve ser realizada, mas quando temos uma entrada numérica? Por que os números devem estar em um determinado intervalo?

O que acontecerá se os dados não forem normalizados?

Carla
fonte
1
Estou votando para encerrar esta questão como fora de tópico, porque ela pertence ao Stats SE ou AI SE.
nbro 7/01

Respostas:

101

Está bem explicado aqui .

Se as variáveis ​​de entrada são combinadas linearmente, como em um MLP [perceptron multicamada], raramente é estritamente necessário padronizar as entradas, pelo menos em teoria. O motivo é que qualquer redimensionamento de um vetor de entrada pode ser efetivamente desfeito, alterando os pesos e desvios correspondentes, deixando as mesmas saídas exatas que você tinha antes. No entanto, existem várias razões práticas pelas quais a padronização das entradas pode tornar o treinamento mais rápido e reduzir as chances de ficar preso nas ótimas localidades. Além disso, a redução de peso e a estimativa bayesiana podem ser feitas de maneira mais conveniente com entradas padronizadas.

finnw
fonte
2
Olá, Nos MLPs, não é possível padronizar os recursos ao usar uma taxa de aprendizado constante, causar excesso / subcompensação nas correções de retropropagação para diferentes dimensões? Gostaria de saber no seguinte post se isso é exclusivo para CNNs, ou se MLPs podem compartilhar esse problema: stats.stackexchange.com/questions/185853/…
Austin
Problema: descida de gradiente opt. processo pode demorar muito mais. Por quê? Quando os recursos têm escala diferente (x1 = 0-1 e x2 = 0..1000), a superfície da função de erro pode ficar alongada. Significado: escalas diferentes para diferentes dims (w1, w2). Mas a taxa de aprendizado é a mesma para todas as dims -> as etapas na dim alongada (w2) são muito pequenas até atingir o mínimo local. Problema: Não é possível aumentar o LR, pois ele pulará o min local na outra dim (w1). Veja a demonstração em youtube.com/watch?reload=9&v=UIp2CMI0748
Dekel
Aqui está um exemplo linear, onde as coisas estão muito ruins sem redimensionar: stackoverflow.com/q/59319643 . Alguma idéia do porquê?
AlwaysLearning 15/12/19
62

Nas redes neurais, é uma boa ideia não apenas normalizar os dados, mas também escalá-los. Isso se destina a uma aproximação mais rápida aos mínimos globais na superfície do erro. Veja as seguintes imagens: superfície de erro antes e depois da normalização

superfície de erro antes e depois da escala

As fotos são tiradas do curso coursera sobre redes neurais. O autor do curso é Geoffrey Hinton.

Yuriy Zaletskyy
fonte
14
Seria legal da sua parte creditar o autor da imagem que você postou. O gráfico foi claramente tirado do curso coursera de Geoffrey Hinton .
Ricardo Cruz
5
Achei este vídeo muito útil para explicar o diagrama acima, que por si só não era óbvio para mim.
chris838
21

Algumas entradas para NN podem não ter um intervalo de valores "naturalmente definido". Por exemplo, o valor médio pode ser lento, mas aumentando continuamente ao longo do tempo (por exemplo, vários registros no banco de dados).

Nesse caso, alimentar esse valor bruto em sua rede não funcionará muito bem. Você ensinará sua rede sobre valores da parte inferior do intervalo, enquanto as entradas reais serão da parte superior desse intervalo (e possivelmente acima do intervalo, com o qual a rede aprendeu a trabalhar).

Você deve normalizar esse valor. Você poderia, por exemplo, informar à rede quanto o valor foi alterado desde a entrada anterior. Esse incremento geralmente pode ser definido com alta probabilidade em um intervalo específico, o que o torna uma boa entrada para a rede.

Mchl
fonte
Boa dica sobre como normalizar o conjunto anterior de entradas. Isso dispensa o usuário de definir um fator de normalização arbitrário. No entanto, suspeito que a rede irá treinar com mais precisão se o fator de normalização for uma constante global aplicada a cada vetor de entrada.
Davide
11

Olhando a rede neural de fora, é apenas uma função que recebe alguns argumentos e produz um resultado. Como em todas as funções, ele possui um domínio (isto é, um conjunto de argumentos legais). Você precisa normalizar os valores que deseja passar para a rede neural para garantir que esteja no domínio. Como em todas as funções, se os argumentos não estiverem no domínio, não é garantido que o resultado seja apropriado.

O comportamento exato da rede neural em argumentos fora do domínio depende da implementação da rede neural. Mas, em geral, o resultado é inútil se os argumentos não estiverem dentro do domínio.

Oswald
fonte
16
Se você usar uma função de ativação usual (ReLu ou Sigmoid), o domínio será sempre todo o espaço R ^ n. Portanto, esse não pode ser o motivo para normalizar os dados.
Joker123
1
Isso também não explica por que as imagens são normalizadas, uma vez que eles já têm um domínio 0-255
DollarAkshay
4

Existem duas razões pelas quais precisamos normalizar os recursos de entrada antes de alimentá-los na rede neural:

Razão 1 : Se um Featurena Dataseté grande em escala em comparação com outros, esse recurso em grande escala se torna dominante e, como resultado, as previsões da Rede Neural não serão precisas.

Exemplo : No caso de Dados do funcionário, se considerarmos Idade e salário, a idade será um número de dois dígitos, enquanto o salário poderá ser de 7 ou 8 dígitos (1 milhão, etc.). Nesse caso, o salário dominará a previsão da rede neural. Porém, se Normalizarmos esses Recursos, os valores de ambos os Recursos estarão no intervalo de (0 a 1).

Razão 2 : A propagação frontal de redes neurais envolve o produto pontual de pesos com recursos de entrada. Portanto, se os valores forem muito altos (para dados de imagem e não imagem), o cálculo da saída leva muito tempo de computação e também memória. Mesmo é o caso durante a propagação traseira. Conseqüentemente, o modelo converge lentamente, se as entradas não forem normalizadas.

Exemplo : Se executarmos a Classificação de imagem, o Tamanho da imagem será muito grande, pois o Valor de cada pixel varia de 0 a 255. Nesse caso, a normalização é muito importante.

A seguir mencionadas são as instâncias em que a Normalização é muito importante:

  1. K-Means
  2. K-vizinhos mais próximos
  3. Análise de Componentes Principais (PCA)
  4. Gradiente descendente
Suporte ao Tensorflow
fonte
2

Acredito que a resposta depende do cenário.

Considere NN (rede neural) como um operador F, de modo que F (entrada) = saída . No caso em que essa relação é linear, de modo que F (A * entrada) = A * saída , você pode optar por deixar a entrada / saída não normalizada em suas formas brutas ou normalizar ambas para eliminar A. Obviamente, essa suposição de linearidade é violado em tarefas de classificação ou quase qualquer tarefa que produza uma probabilidade, em que F (A * entrada) = 1 * saída

Na prática, a normalização permite que redes não ajustáveis ​​sejam ajustáveis, o que é crucial para os experimentadores / programadores. No entanto, o impacto preciso da normalização dependerá não apenas da arquitetura / algoritmo da rede, mas também das estatísticas anteriores para a entrada e saída.

Além disso, o NN é frequentemente implementado para resolver problemas muito difíceis de maneira caixa preta, o que significa que o problema subjacente pode ter uma formulação estatística muito ruim, dificultando a avaliação do impacto da normalização, causando a vantagem técnica (tornando-se adaptável) dominar sobre seu impacto nas estatísticas.

No sentido estatístico, a normalização remove a variação que se acredita não causal na previsão do resultado, de modo a impedir que o NN aprenda essa variação como um preditor (o NN não vê essa variação e, portanto, não pode usá-la ).

deveria ver
fonte
2

Quando você usa recursos de entrada não normalizados, é provável que a função de perda tenha vales muito alongados. Ao otimizar com a descida do gradiente, isso se torna um problema, pois o gradiente será acentuado em relação a alguns dos parâmetros. Isso leva a grandes oscilações no espaço de pesquisa, enquanto você está saltando entre encostas íngremes. Para compensar, você precisa estabilizar a otimização com pequenas taxas de aprendizado.

Considere os recursos x1 e x2, onde variam de 0 a 1 e 0 a 1 milhão, respectivamente. Acontece que as razões para os parâmetros correspondentes (digamos, w1 e w2) também serão grandes.

A normalização tende a tornar a perda mais simétrica / esférica. É mais fácil otimizar porque os gradientes tendem a apontar para o mínimo global e você pode executar etapas maiores.

crypdick
fonte
1

A razão pela qual a normalização é necessária é porque, se você observar como uma etapa adaptativa prossegue em um local no domínio da função, e simplesmente transportar o problema para o equivalente à mesma etapa traduzida por algum valor grande em alguma direção na domínio, então você obtém resultados diferentes. Tudo se resume à questão de adaptar uma peça linear a um ponto de dados. Quanto a peça deve se mover sem girar e quanto deve girar em resposta a esse ponto de treinamento? Não faz sentido ter um procedimento de adaptação alterado em diferentes partes do domínio! Portanto, a normalização é necessária para reduzir a diferença no resultado do treinamento. Ainda não escrevi isso, mas você pode apenas olhar para a matemática para uma função linear simples e como ela é treinada por um ponto de treinamento em dois lugares diferentes. Esse problema pode ter sido corrigido em alguns lugares, mas não estou familiarizado com eles. Nos ALNs, o problema foi corrigido e posso enviar um artigo se você escrever para wwarmstrong AT shaw.ca

William W. Armstrong
fonte
-9

Camadas ocultas são usadas de acordo com a complexidade de nossos dados. Se temos dados de entrada que são separáveis ​​linearmente, não precisamos usar camada oculta, por exemplo, porta OR, mas se tivermos dados não linearmente separáveis, precisamos usar camada oculta, por exemplo, porta lógica ExOR. O número de nós obtidos em qualquer camada depende do grau de validação cruzada de nossa saída.

Basant Bhardwaj
fonte