groupNormalizationLayer

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

Описание

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

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

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

Создание

Описание

пример

layer = groupNormalizationLayer(numGroups) создает слой нормализации группы, который делит каналы на вход слоя в numGroups группы и нормируют через каждую группу.

пример

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

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

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

Количество групп, на которые можно разделить каналы входных данных в виде положительного целого числа, "all-channels" или "channel-wise".

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

Если вы задаете numGroups как "all-channels", группы слоев все входящие каналы в одну группу. Это также известно как нормализацию слоя.

Если вы задаете numGroups как "channel-wise", слой обрабатывает все входящие каналы как отдельные группы. Это также известно как нормализацию экземпляра.

Свойства

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

Нормализация

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

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

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

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

Канал возмещает β в виде числового массива.

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

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

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

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

  • Для функции или входа последовательности, числового массива размера NumChannels- 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 и отклонения σg2 по заданным группам каналов. Затем это вычисляет нормированные активации как

x^i=xiμgσg2+ε

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

yi=γx^i+β.

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

Ссылки

[1] Ву, Yuxin и Кэйминг Хэ. “Нормализация группы”. ArXiv:1803.08494 [Cs], 11 июня 2018. http://arxiv.org/abs/1803.08494.

Введенный в R2020b