Por que precisamos normalizar as imagens antes de colocá-las na CNN?

Respostas:

34

Primeira observação: você também deve dividir pelo desvio padrão do valor de cada recurso (pixel). Subtrair a média centraliza a entrada para 0 e dividir pelo desvio padrão faz com que qualquer valor de recurso dimensionado seja o número de desvios padrão distantes da média.

Para responder à sua pergunta: Considere como uma rede neural aprende seus pesos. C (NN) s aprendem adicionando continuamente vetores de erro de gradiente (multiplicados por uma taxa de aprendizado) calculados desde a retropropagação a várias matrizes de peso em toda a rede, à medida que exemplos de treinamento são transmitidos.

O que se deve notar aqui é o "multiplicado por uma taxa de aprendizado".

Se não escalássemos nossos vetores de treinamento de entrada, os intervalos de nossas distribuições de valores de recursos provavelmente seriam diferentes para cada recurso e, portanto, a taxa de aprendizado causaria correções em cada dimensão que difeririam (proporcionalmente) umas das outras. Podemos compensar demais uma correção em uma dimensão de peso e subcompensar em outra.

Isso não é o ideal, pois poderíamos nos encontrar em um estado oscilante (incapaz de centrar-se em um estado máximo de máximo de custo (pesos) de espaço) ou em um estado lento (viajando muito devagar para obter um máximo máximo).

É claro que é possível ter uma taxa de aprendizado por peso, mas ainda há mais parâmetros para introduzir em uma rede já complicada que também precisaríamos otimizar para encontrar. Geralmente, as taxas de aprendizado são escalares.

Assim, tentamos normalizar as imagens antes de usá-las como entrada no algoritmo NN (ou qualquer gradiente).

lollercoaster
fonte
1
e imagens coloridas? eu faço isso para cada canal de cor? isso não atrapalharia a distribuição de cores?
user10024395
2
Acredite que você deveria sim. Você pode apenas fazer algo como:(image - image.mean()) / (image.std() + 1e-8)
JohnAllen
Isso é realmente útil para o treinamento? Estou treinando detector objeto, e usar este fitlers, a imagem (s) são realmente confuso, é difícil de ver objetos que estou detectando
darlyn
É bastante útil para o treinamento em termos de aprendizado e precisão - não é para você, é para o modelo :) Você pode exibir a imagem não normalizada quando estiver depurando, para que pareça normal aos olhos humanos.
Lollercoaster