batchNormalizationLayer

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

Описание

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

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

Создание

Описание

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

пример

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

Свойства

расширить все

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

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

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

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

  • Для ввода функции или последовательности используйте числовой массив размера NumChannels-by-1

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

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

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

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

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

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

  • Для ввода функции или последовательности используйте числовой массив размера NumChannels-by-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 by- NumChannels

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

  • Для ввода функции или последовательности используйте числовой массив размера NumChannels-by-1

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

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

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

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

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

  • Для ввода функции или последовательности используйте числовой массив размера NumChannels-by-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 входа, сначала вычисляя среднее μB и отклонение2 по пространственным, временным и наблюдательным размерностям для каждого канала независимо. Затем он вычисляет нормированные активации как

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++ с помощью Coder™ MATLAB ®

.

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

.
Введенный в R2017b