groupNormalizationLayer

Слой нормализации группы

Описание

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

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

Создание

Описание

пример

layer = groupNormalizationLayer(numGroups) создает слой нормализации группы.

пример

layer = groupNormalizationLayer(numGroups,Name,Value) создает слой нормализации группы и устанавливает дополнительные 'Epsilon', Параметры и инициализация, Темп обучения и регуляризация, и Name свойства с использованием одного или нескольких аргументов пары "имя-значение". Можно задать несколько аргументы пары "имя-значение". Заключайте каждое имя свойства в кавычки.

Входные параметры

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

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

  • Положительное целое число - разделите входящие каналы на заданное количество групп. Указанное количество групп должно точно разделить количество каналов входных данных.

  • 'all-channels' - сгруппировать все входящие каналы в одну группу. Это также известно как нормализация слоя. Кроме того, используйте layerNormalizationLayer.

  • 'channel-wise' - Рассматривать все входящие каналы как отдельные группы. Это также известно как нормализация образца. Кроме того, используйте instanceNormalizationLayer.

Свойства

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

Нормализация группы

Константа для добавления к мини-пакетному отклонениям, заданная как числовой скаляр, равная или больше 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

Темп обучения и регуляризация

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

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

Примеры

свернуть все

Создайте слой нормализации группы, который нормализует входящие данные по трем группам каналов. Назовите слой 'groupnorm'.

layer = groupNormalizationLayer(3,'Name','groupnorm')
layer = 
  GroupNormalizationLayer with properties:

           Name: 'groupnorm'
    NumChannels: 'auto'

   Hyperparameters
      NumGroups: 3
        Epsilon: 1.0000e-05

   Learnable Parameters
         Offset: []
          Scale: []

  Show all properties

Включите слой нормализации группы в Layer массив. Нормализуйте входящие 20 каналов в четырех группах.

layers = [
    imageInputLayer([28 28 3])
    convolution2dLayer(5,20)
    groupNormalizationLayer(4)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer]
layers = 
  8x1 Layer array with layers:

     1   ''   Image Input             28x28x3 images with 'zerocenter' normalization
     2   ''   Convolution             20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   Group Normalization     Group normalization
     4   ''   ReLU                    ReLU
     5   ''   Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     6   ''   Fully Connected         10 fully connected layer
     7   ''   Softmax                 softmax
     8   ''   Classification Output   crossentropyex

Подробнее о

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

Алгоритмы

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

x^i=xiμGσG2+ε,

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

yi=γx^i+β,

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

Ссылки

[1] У, Юсинь и Кайминг Хэ. «Нормализация группы». ArXiv:1803.08494 [Cs], 11 июня 2018 года. http://arxiv.org/abs/1803.08494.

Введенный в R2020b