Нормализация пакетной службы
BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
normalizationTimeConstant = 0,
blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)
Параметры
input
— входные данные узла нормализации пакетаscale
— параметр ParameterTensor{} , содержащий коэффициенты масштабирования по компоненту (gamma
термин в приведенном ниже уравнении).bias
— параметр ParameterTensor{} , содержащий обученное смещение (beta
термин).scale
иbias
должны иметь те же измерения, которые должны быть равныinput
измерениям в случаеspatial = false
или числа карт признаков свертки вывода в случаеspatial = true
.runMean
— это среднее значение, которое используется во время этапа оценки и может использоваться во время обучения. Необходимо передать ParameterTensor{} с теми же измерениями, чтоscale
иbias
, начальное значение 0, иlearningRateMultiplier=0
задать.runVariance
— это выполняющаяся дисперсия. Он представлен так же, какrunMean
и .spatial
— это флаг, указывающий, следует ли вычислять среднее/var для каждой функции в мини-пакете независимо или, в случае сверточных слоев, на карту признаков.normalizationTimeConstant
(по умолчанию 0): константа времени для вычислений среднего и дисперсии в качестве низкой отфильтрованной версии пакетной статистики. Примечание. Значение по умолчанию обычно не является нужным.blendTimeConstant
(по умолчанию 0): позволяет сглаживать пакетные оценки с помощью выполняющихся статистических данных.epsilon
является константой кондиционера, добавляемой к дисперсии при вычислении обратного стандартного отклонения.useCntkEngine
(по умолчанию: true): задайте для этого значение, чтобыfalse
выбрать реализацию cuDNN только для GPU.
Возвращаемое значение
Нормализованный пакет.input
Описание
BatchNormalization
реализует методику, описанную в документе Нормализация пакетной службы: ускорение глубокой сетевой подготовки путем сокращения внутренней ковариатной смены (Сергей Иоффе, Кристиан Szegedy)).
Короче говоря, он нормализует выходные данные слоя для каждого мини-пакета для каждого выходного (компонента) независимо и применяет аффинное преобразование для сохранения представления слоя. То есть для слоя input
:
m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta
где gamma
и beta
являются обучаемыми параметрами.
mean
и variance
оценивается на основе обучающих данных. В самом простом случае они являются средним и дисперсией текущего мини-бэтча во время обучения. Вместо этого используется долгосрочная оценка.
Долгосрочные оценки представляют собой версию статистики мини-batch с низкой фильтрацией с константой времени (в примерах), заданной параметром normalizationTimeConstant
.
Значение 0
означает, что не будет экспоненциального сглаживания и запущенного среднего или дисперсии всегда будет равно значению последнего замеченного мини-сглаживания.
Это часто нежелательно.
Вместо этого рекомендуется использовать здесь значение нескольких тысяч.
Оболочка BatchNormalizationLayer{}
имеет значение по умолчанию 5000.
Дополнительные сведения о константах времени и экспоненциальном сглаживаении: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant
Так как статистика минибатча может быть шумной, CNTK также позволяет использовать оценку MAP (максимум a-posteriori) во время обучения, где выполняющаяся долгосрочная оценка принимается в качестве предыдущего.
Вес предыдущего управляется параметром blendTimeConstant
.
Тем не менее, это не было найдено полезным до сих пор в наших экспериментах.
Обратите внимание, что во время вывода CNTK автоматически установит обе константы времени таким образом, чтобы использовалось только существующее среднее значение выполнения, и что он не обновляется. Пользователю не требуется явное действие.
Реализация cuDNN
По умолчанию эта функция использует реализацию CNTK, которая работает как с GPU, так и с процессорами. Вы можете использовать реализацию cuDNN, которая является более производительной. Однако обратите внимание, что реализация cuDNN не поддерживает все варианты, а для обучения требуется GPU (CNTK однако предоставляет эмуляцию ЦП для вывода, даже если выбрана реализация cuDNN).