Partilhar via


Normalização do lote

BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
                   normalizationTimeConstant = 0,
                   blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)

Parâmetros

  • input é a entrada do nó de normalização do lote
  • scale é um ParâmetroTensor{} que detém os fatores de escalação componentes aprendidas (gamma termo na equação abaixo).
  • bias é um ParâmetroTensor{} que detém o viés aprendido (beta termo). scale e bias devem ter as mesmas dimensões que devem ser iguais às input dimensões em caso de spatial = false ou número de mapas de características de produção convolution em caso de spatial = true.
  • runMean é a média de funcionamento que é utilizada durante a fase de avaliação e pode ser utilizada durante o treino também. Deve passar um ParâmetroTensor{} com as mesmas dimensões que scale e bias, valor inicial 0, e learningRateMultiplier=0 definido.
  • runVariance é a variação de execução. É representado da mesma forma que runMean. .
  • spatial é uma bandeira que especifica se deve calcular a média/var para cada recurso numa minibatch de forma independente ou, no caso de camadas convolucionais, por mapa de características.
  • normalizationTimeConstant (predefinição 0): constante de tempo para calcular a média de execução da média e da variação como uma versão filtrada de baixo passe das estatísticas do lote. Nota: O padrão não é normalmente o que se deseja.
  • blendTimeConstant (predefinição 0): permite suavizar as estimativas dos lotes com as estatísticas de funcionamento
  • epsilon é uma constante de condicionador adicionada à variação ao calcular o desvio padrão inverso.
  • useCntkEngine (padrão: verdadeiro): definir isto para false selecionar a implementação cuDNN apenas da GPU

Valor devolvido

O lote normalizado input.

Description

BatchNormalization implementa a técnica descrita na normalização do lote de papel: Acelerando a Formação em Rede Profunda reduzindo a mudança de covaria interna (Sergey Ioffe, Christian Szegedy). Em suma, normaliza as saídas de camadas para cada minibatch para cada saída (característica) de forma independente e aplica uma transformação afina para preservar a representação da camada. Isto é, para a camada input:

m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta

onde gamma e beta são parâmetros treináveis.

mean e variance são estimados a partir de dados de treino. No caso mais simples, são a média e a variação da atual minibatch durante o treino. Em inferência, uma estimativa a longo prazo é usada em vez disso.

As estimativas a longo prazo são uma versão filtrada de baixo passe das estatísticas de minibatch, com o tempo constante (em amostras) dado pelo normalizationTimeConstant parâmetro. Um valor de 0 meios não haverá suavidade exponencial e a média/variação de funcionamento será sempre igual à da última minibatch vista. Isto é muitas vezes indesejável. Em vez disso, recomenda-se usar um valor de alguns milhares aqui. O BatchNormalizationLayer{} invólucro tem um padrão de 5000.

Para mais informações sobre as constantes de tempo e suavizamento exponencial: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant

Como as estatísticas de minibatch podem ser ruidosas, CNTK também permite usar uma estimativa MAP (maximum-a-posteriori) durante o treino, onde a estimativa de longo prazo em execução é tomada como anterior. O peso do anterior é controlado pelo blendTimeConstant parâmetro. No entanto, até ao momento, isso não foi considerado útil nas nossas experiências.

Note que durante a inferência, CNTK definirá automaticamente ambas as constantes de tempo de modo a utilizar apenas a média de funcionamento existente e que não é atualizada. Não é necessária nenhuma ação explícita por parte do utilizador.

implementação cuDNN

Por predefinição, esta função utiliza uma implementação CNTK que funciona com GPUs e CPUs. Pode optar por utilizar a implementação do cuDNN, que é mais performante. Note-se, no entanto, que a implementação do cuDNN não suporta todas as opções, e a formação requer uma GPU (CNTK fornece, no entanto, uma emulação cpU para inferência, mesmo que selecione a implementação do cuDNN).