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 lotescale
é 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
ebias
devem ter as mesmas dimensões que devem ser iguais àsinput
dimensões em caso despatial = false
ou número de mapas de características de produção convolution em caso despatial = 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 quescale
ebias
, valor inicial 0, elearningRateMultiplier=0
definido.runVariance
é a variação de execução. É representado da mesma forma querunMean
. .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 funcionamentoepsilon
é uma constante de condicionador adicionada à variação ao calcular o desvio padrão inverso.useCntkEngine
(padrão: verdadeiro): definir isto parafalse
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).