batchNormalizationLayer

Пакетный слой нормализации

Описание

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

Слой сначала нормирует активации каждого канала путем вычитания мини-пакетного среднего значения и деления на мини-пакетное стандартное отклонение. Затем слой переключает вход learnable смещением β и масштабирует его learnable масштабным коэффициентом γ.

Создание

Синтаксис

layer = batchNormalizationLayer
layer = batchNormalizationLayer('Name',Value)

Описание

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

пример

layer = batchNormalizationLayer('Name',Value) создает пакетный слой нормализации и устанавливает дополнительную Пакетную Нормализацию, Параметры и Инициализацию, Изучите Уровень и Регуляризацию и свойства Name с помощью пар "имя-значение". Например, batchNormalizationLayer('Name','batchnorm') создает пакетный слой нормализации с именем 'batchnorm'. Можно задать несколько пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.

Свойства

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

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

Введите среднее значение каждого канала, заданного как числовой массив размера 1 1 NumChannels для 2D входа или 1 1 1 NumChannels для 3-D входа.

После сетевых учебных концов программное обеспечение вычисляет входное среднее значение по целому обучающему набору данных. Слой использует TrainedMean (вместо мини-пакетного среднего значения), чтобы нормировать вход во время прогноза.

Введите отклонение каждого канала, заданного как числовой массив размера 1 1 NumChannels для 2D входа или 1 1 1 NumChannels для 3-D входа.

После сетевых учебных концов программное обеспечение вычисляет входное отклонение по целому обучающему набору данных. Слой использует TrainedVariance (вместо мини-пакетного отклонения), чтобы нормировать вход во время прогноза.

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

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

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

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

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

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

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

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

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

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

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

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

Функция, чтобы инициализировать смещения канала, заданные как одно из следующего:

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

  • единицы Инициализируйте смещения канала с единицами.

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

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

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

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

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

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

В учебное время:

  • Для 2D входа Scale является 1 1 NumChannels массивом положительных чисел.

  • Для 3-D входа Scale является 1 1 1 NumChannels массивом положительных чисел.

Канал смещает β, заданный как числовой массив.

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

В учебное время:

  • Для 2D входа Offset является 1 1 NumChannels массивом.

  • Для 3-D входа Offset является 1 1 1 NumChannels массивом.

Изучите уровень и регуляризацию

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

Программное обеспечение умножает этот фактор на глобальный темп обучения, чтобы определить темп обучения для масштабных коэффициентов в слое. Например, если 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
            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 первым вычислением среднего μB и отклонения σB2 по мини-пакету и по каждому входному каналу. Затем это вычисляет нормированные активации как

xi^=xiμBσB2+ϵ.

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

yi=γx^i+β.

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

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

Ссылки

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

Введенный в R2017b