exponenta event banner

batchNormalizationLayer

Уровень нормализации пакета

Описание

Уровень пакетной нормализации нормализует мини-пакет данных по всем наблюдениям для каждого канала независимо. Чтобы ускорить обучение сверточной нейронной сети и снизить чувствительность к инициализации сети, используйте уровни пакетной нормализации между сверточными слоями и нелинейностями, такими как уровни ReLU.

После нормализации уровень масштабирует входные данные с помощью обучаемого масштабного коэффициента γ и сдвигается на обучаемое смещение β.

Создание

Описание

layer = batchNormalizationLayer создает слой нормализации пакета.

пример

layer = batchNormalizationLayer(Name,Value) создает слой нормализации пакета и задает необязательный TrainedMean, TrainedVariance, Epsilon, Параметры и инициализация, Скорость обучения и регуляризация, и Name с использованием одной или нескольких пар имя-значение. Например, batchNormalizationLayer('Name','batchnorm') создает слой нормализации пакета с именем 'batchnorm'.

Свойства

развернуть все

Нормализация пакета

Средняя статистика, используемая для прогнозирования, указана как одно из следующих значений:

  • Для 2-D ввода изображения числовой массив размером 1 на 1 по-NumChannels

  • Для 3D входа изображения, числового множества размера 1 на 1 на 1NumChannels

  • Для ввода элемента или последовательности числовой массив размера NumChannels-по-1

Если 'BatchNormalizationStatistics' вариант обучения - 'moving', то программное обеспечение аппроксимирует статистику нормализации пакета во время обучения с использованием текущей оценки и после обучения устанавливает TrainedMean и TrainedVariance свойства к последним значениям скользящих оценок среднего значения и дисперсии соответственно.

Если 'BatchNormalizationStatistics' вариант обучения - 'population', то после завершения обучения сети программное обеспечение проходит через данные еще раз и устанавливает TrainedMean и TrainedVariance свойства для среднего значения и дисперсии, вычисленные из всего набора обучающих данных, соответственно.

Слой использует TrainedMean и TrainedVariance нормализовать входные данные во время прогнозирования.

Статистика дисперсии, используемая для прогнозирования, указана как одно из следующих значений:

  • Для 2-D ввода изображения числовой массив размером 1 на 1 по-NumChannels

  • Для 3D входа изображения, числового множества размера 1 на 1 на 1NumChannels

  • Для ввода элемента или последовательности числовой массив размера NumChannels-по-1

Если 'BatchNormalizationStatistics' вариант обучения - 'moving', то программное обеспечение аппроксимирует статистику нормализации пакета во время обучения с использованием текущей оценки и после обучения устанавливает TrainedMean и TrainedVariance свойства к последним значениям скользящих оценок среднего значения и дисперсии соответственно.

Если 'BatchNormalizationStatistics' вариант обучения - 'population', то после завершения обучения сети программное обеспечение проходит через данные еще раз и устанавливает TrainedMean и TrainedVariance свойства для среднего значения и дисперсии, вычисленные из всего набора обучающих данных, соответственно.

Слой использует TrainedMean и TrainedVariance нормализовать входные данные во время прогнозирования.

Константа для добавления к отклонениям мини-пакета, заданная как числовой скаляр, равный или больший, чем 1e-5.

Слой добавляет эту постоянную к отклонениям мини-партии перед нормализацией, чтобы обеспечить числовую стабильность и избежать деления на ноль.

Количество входных каналов, указанных как 'auto' или положительное целое число.

Это свойство всегда равно количеству каналов входа в слой. Если NumChannels равняется 'auto', то программное обеспечение автоматически определяет правильное значение количества каналов во время обучения.

Параметры и инициализация

Функция инициализации масштабных коэффициентов канала, определяемых одним из следующих параметров:

  • 'ones' - Инициализируйте масштабные коэффициенты канала единицами.

  • 'zeros' - Инициализируйте масштабные коэффициенты канала нулями.

  • 'narrow-normal' - Инициализировать масштабные коэффициенты канала путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.

  • Дескриптор функции - инициализация масштабных коэффициентов канала с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид scale = func(sz), где sz - размер шкалы. Пример см. в разделе Определение пользовательской функции инициализации веса.

Уровень инициализирует масштабные коэффициенты канала только в том случае, если Scale пустое свойство.

Типы данных: char | string | function_handle

Функция инициализации смещений канала, указанная как одно из следующих:

  • 'zeros' - Инициализируйте смещения канала нулями.

  • 'ones' - Инициализация смещений канала с помощью таковых.

  • 'narrow-normal' - Инициализация смещений канала путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.

  • Дескриптор функции - инициализация смещений канала с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид offset = func(sz), где sz - размер шкалы. Пример см. в разделе Определение пользовательской функции инициализации веса.

Уровень инициализирует смещения канала только в том случае, если Offset пустое свойство.

Типы данных: char | string | function_handle

Масштабные коэффициенты канала γ, заданные как числовой массив.

Масштабные коэффициенты канала являются обучаемыми параметрами. При обучении сети, если Scale является непустым, то trainNetwork использует Scale свойство в качестве начального значения. Если Scale пуст, затем trainNetwork использует инициализатор, указанный ScaleInitializer.

Во время обучения, Scale является одним из следующих:

  • Для 2-D ввода изображения числовой массив размером 1 на 1 по-NumChannels

  • Для 3D входа изображения, числового множества размера 1 на 1 на 1NumChannels

  • Для ввода элемента или последовательности числовой массив размера NumChannels-по-1

Смещение канала β, указанное как числовой массив.

Смещения каналов являются обучаемыми параметрами. При обучении сети, если Offset является непустым, то trainNetwork использует Offset свойство в качестве начального значения. Если Offset пуст, затем trainNetwork использует инициализатор, указанный OffsetInitializer.

Во время обучения, Offset является одним из следующих:

  • Для 2-D ввода изображения числовой массив размером 1 на 1 по-NumChannels

  • Для 3D входа изображения, числового множества размера 1 на 1 на 1NumChannels

  • Для ввода элемента или последовательности числовой массив размера NumChannels-по-1

Значение затухания для скользящего среднего вычисления, заданного как числовой скаляр между 0 и 1.

Когда 'BatchNormalizationStatistics' вариант обучения - 'moving', при каждой итерации слой обновляет среднее скользящее значение, используя

μ*=λμμ^+(1−λμ)μ,

где λ * обозначает обновленное среднее значение, λ λ обозначает среднее значение затухания, λ ^ обозначает среднее значение входного слоя и λ обозначает последнее значение скользящего среднего значения.

Если 'BatchNormalizationStatistics' вариант обучения - 'population', то этот вариант не имеет эффекта.

Типы данных: single | double

Значение затухания для вычисления скользящей дисперсии, указанное как числовой скаляр между 0 и 1.

Когда 'BatchNormalizationStatistics' вариант обучения - 'moving', при каждой итерации слой обновляет значение скользящей дисперсии, используя

σ2*=λσ2σ2^+(1−λσ2)σ2,

где λ 2 * обозначает обновлённую дисперсию, λ λ 2 обозначает величину спада дисперсии, λ 2 ^ обозначает дисперсию вводимого слоя, λ 2 обозначает самую последнюю величину величины скользящей дисперсии.

Если 'BatchNormalizationStatistics' вариант обучения - 'population', то этот вариант не имеет эффекта.

Типы данных: single | double

Скорость обучения и регуляризация

Коэффициент скорости обучения для масштабных коэффициентов, заданный как неотрицательный скаляр.

Программное обеспечение умножает этот коэффициент на глобальную скорость обучения для определения скорости обучения для масштабных коэффициентов в слое. Например, если ScaleLearnRateFactor является 2затем скорость обучения для масштабных коэффициентов в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.

Коэффициент скорости обучения для смещений, заданный как неотрицательный скаляр.

Программное обеспечение умножает этот коэффициент на глобальную скорость обучения для определения скорости обучения для смещений на уровне. Например, если OffsetLearnRateFactor равняется 2затем скорость обучения для смещений в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.

L2 коэффициент регуляризации для масштабных коэффициентов, определяемый как неотрицательный скаляр.

Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляции L2, чтобы определить скорость обучения для масштабных коэффициентов в слое. Например, если ScaleL2Factor 2, то L2 регуляризация для смещений в слое в два раза больше глобального коэффициента регуляризации L2. Можно указать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.

L2 коэффициент регуляризации для смещений, определяемый как неотрицательный скаляр.

Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляции L2, чтобы определить скорость обучения для смещений на уровне. Например, если OffsetL2Factor 2, то L2 регуляризация для смещений в слое в два раза больше глобального коэффициента регуляризации L2. Можно указать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.

Слой

Имя слоя, указанное как символьный вектор или строковый скаляр. Чтобы включить слой в график слоев, необходимо указать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с уровнем и Name имеет значение ''затем программа автоматически присваивает имя слою во время обучения.

Типы данных: char | string

Количество входов слоя. Этот слой принимает только один вход.

Типы данных: double

Входные имена слоя. Этот слой принимает только один вход.

Типы данных: cell

Количество выходов уровня. Этот уровень имеет только один выход.

Типы данных: double

Выходные имена слоя. Этот уровень имеет только один выход.

Типы данных: cell

Примеры

свернуть все

Создание слоя нормализации пакета с именем 'BN1'.

layer = batchNormalizationLayer('Name','BN1')
layer = 
  BatchNormalizationLayer with properties:

               Name: 'BN1'
        NumChannels: 'auto'
        TrainedMean: []
    TrainedVariance: []

   Hyperparameters
          MeanDecay: 0.1000
      VarianceDecay: 0.1000
            Epsilon: 1.0000e-05

   Learnable Parameters
             Offset: []
              Scale: []

  Show all properties

Включение слоев пакетной нормализации в Layer массив.

layers = [
    imageInputLayer([32 32 3]) 
  
    convolution2dLayer(3,16,'Padding',1)
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding',1)
    batchNormalizationLayer
    reluLayer
          
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer
    ]
layers = 
  11x1 Layer array with layers:

     1   ''   Image Input             32x32x3 images with 'zerocenter' normalization
     2   ''   Convolution             16 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     3   ''   Batch Normalization     Batch normalization
     4   ''   ReLU                    ReLU
     5   ''   Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     6   ''   Convolution             32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     7   ''   Batch Normalization     Batch normalization
     8   ''   ReLU                    ReLU
     9   ''   Fully Connected         10 fully connected layer
    10   ''   Softmax                 softmax
    11   ''   Classification Output   crossentropyex

Подробнее

развернуть все

Алгоритмы

Операция пакетной нормализации нормализует элементы xi входного сигнала, сначала вычисляя среднее значение мкВ и σB2 дисперсии по пространственным, временным и наблюдательным измерениям для каждого канала независимо. Затем он вычисляет нормализованные активации как

xi^=xi−μBσB2+ϵ,

где ϵ - константа, которая улучшает числовую стабильность, когда дисперсия очень мала.

Для обеспечения возможности того, что входные данные с нулевым средним и единичной дисперсией не являются оптимальными для операций, которые следуют за пакетной нормализацией, операция пакетной нормализации дополнительно сдвигает и масштабирует активации с помощью преобразования.

yi = γ x ^ i + β,

где смещение β и масштабный коэффициент γ являются обучаемыми параметрами, которые обновляются во время обучения сети.

Чтобы делать прогнозы с сетью после обучения, для нормализации партии требуется фиксированное среднее значение и отклонение для нормализации данных. Это фиксированное среднее значение и дисперсия могут быть рассчитаны на основе данных обучения после обучения или аппроксимированы во время обучения с использованием текущих статистических вычислений.

Если 'BatchNormalizationStatistics' вариант обучения - 'moving', то программное обеспечение аппроксимирует статистику нормализации пакета во время обучения с использованием текущей оценки и после обучения устанавливает TrainedMean и TrainedVariance свойства к последним значениям скользящих оценок среднего значения и дисперсии соответственно.

Если 'BatchNormalizationStatistics' вариант обучения - 'population', то после завершения обучения сети программное обеспечение проходит через данные еще раз и устанавливает TrainedMean и TrainedVariance свойства для среднего значения и дисперсии, вычисленные из всего набора обучающих данных, соответственно.

Слой использует TrainedMean и TrainedVariance нормализовать входные данные во время прогнозирования.

Ссылки

[1] Иоффе, Сергей и Кристиан Сегеди. «Пакетная нормализация: ускорение глубокого обучения сети путем уменьшения внутреннего ковариатного сдвига». препринт, arXiv:1502.03167 (2015).

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

Создание кода графического процессора
Создание кода CUDA ® для графических процессоров NVIDIA ® с помощью Coder™ графических процессоров

.
Представлен в R2017b