layerNormalizationLayer

Слой нормализации слоя

    Описание

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

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

    Создание

    Описание

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

    пример

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

    Свойства

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

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

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

    Примеры

    свернуть все

    Создайте слой нормализации слоя с именем 'layernorm'.

    layer = layerNormalizationLayer('Name','layernorm')
    layer = 
      LayerNormalizationLayer with properties:
    
               Name: 'layernorm'
        NumChannels: 'auto'
    
       Hyperparameters
            Epsilon: 1.0000e-05
    
       Learnable Parameters
             Offset: []
              Scale: []
    
      Show all properties
    
    

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

    layers = [
        imageInputLayer([32 32 3]) 
        convolution2dLayer(3,16,'Padding',1)
        layerNormalizationLayer
        reluLayer   
        maxPooling2dLayer(2,'Stride',2)
        convolution2dLayer(3,32,'Padding',1)
        layerNormalizationLayer
        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   ''   Layer Normalization     Layer 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   ''   Layer Normalization     Layer normalization
         8   ''   ReLU                    ReLU
         9   ''   Fully Connected         10 fully connected layer
        10   ''   Softmax                 softmax
        11   ''   Classification Output   crossentropyex
    

    Алгоритмы

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

    xi^=xiμLσL2+ϵ.

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

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

    yi=γx^i+β,

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

    Ссылки

    [1] Ба, Джимми Лэй, Джейми Райан Кирос и Джеффри Э. Хинтон. «Нормализация слоя». arXiv preprint arXiv:1607.06450 (2016).

    Введенный в R2021a