exponenta event banner

gruLayer

Уровень стробированной рекуррентной установки (ГРУ)

Описание

Уровень GRU распознает зависимости между временными шагами во временных рядах и данными последовательности.

Создание

Описание

пример

layer = gruLayer(numHiddenUnits) создает слой GRU и задает NumHiddenUnits собственность.

layer = gruLayer(numHiddenUnits,Name,Value) устанавливает дополнительные OutputMode, активации, состояние, параметры и инициализация, скорость обучения и регуляризация, и Name с использованием одного или нескольких аргументов пары имя-значение. Можно указать несколько аргументов пары имя-значение. Заключите каждое имя свойства в кавычки.

Свойства

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

ГРУ

Число скрытых единиц (также называемое скрытым размером), указанное как положительное целое число.

Количество скрытых единиц соответствует количеству информации, запомненной между временными шагами (скрытым состоянием). Скрытое состояние может содержать информацию обо всех предыдущих шагах времени, независимо от длины последовательности. Если количество скрытых единиц слишком велико, то уровень может переупорядочиться с учебными данными. Это значение может варьироваться от нескольких десятков до нескольких тысяч.

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

Пример: 200

Формат вывода, указанный как один из следующих:

  • 'sequence' - Вывод полной последовательности.

  • 'last' - вывод последнего временного шага последовательности.

Сбросить режим затвора, указанный как одно из следующих:

  • 'after-multiplication' - Применить вентиль сброса после умножения матрицы. Этот параметр совместим с cuDNN.

  • 'before-multiplication' - Перед умножением матрицы примените вентиль сброса.

  • 'recurrent-bias-after-multiplication' - после умножения матрицы примените вентиль сброса и используйте дополнительный набор членов смещения для повторяющихся весов.

Дополнительные сведения о расчетах литника сброса см. в разделе Стробированный слой повторяющихся единиц измерения.

Размер ввода, указанный как положительное целое число или 'auto'. Если InputSize является 'auto', то программное обеспечение автоматически назначает размер ввода во время обучения.

Пример: 100

Активации

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

  • 'tanh' - используйте гиперболическую касательную функцию (tanh).

  • 'softsign' - Используйте функцию softsign softsign (x) = x1 + | x |.

Для обновления скрытого состояния слой использует эту опцию в качестве функции

Функция активации, применяемая к затворам, определяемая одним из следующих параметров:

  • 'sigmoid' - Использовать сигмоидную функцию λ (x) = (1 + e − x) − 1.

  • 'hard-sigmoid' - Использовать жесткую сигмоидальную функцию

    λ (x) = {00 .2x + 0 .51if  x<−2.5if−2.5≤x≤2.5if x > 2,5.

Слой использует эту опцию в качестве функции startg в вычислениях для литников слоя.

Государство

Начальное значение скрытого состояния, указанное как NumHiddenUnits-по-1 числовой вектор. Это значение соответствует скрытому состоянию на временном шаге 0.

После установки этого свойства вызывает resetState установите это значение в скрытое состояние.

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

Функция инициализации входных весов, указанных как одно из следующих:

  • 'glorot' - Инициализируйте входные веса инициализатором Glorot [2] (также известным как инициализатор Xavier). Инициализатор Glorot независимо отсчитывает из однородного распределения с нулевым средним и дисперсией 2/(InputSize + numOut), где numOut = 3*NumHiddenUnits.

  • 'he' - Инициализируйте входные веса с помощью инициализатора He [3]. Выборка инициализатора He из нормального распределения с нулевым средним и дисперсией 2/InputSize.

  • 'orthogonal' - Инициализировать входные веса с Q, ортогональной матрицей, заданной QR разложением Z = QR для случайной матрицы Z, дискретизированной из единичного нормального распределения. [4]

  • 'narrow-normal' - Инициализация входных весов путем независимой выборки из нормального распределения с нулевым средним значением и стандартным отклонением 0,01.

  • 'zeros' - Инициализируйте входные веса нулями.

  • 'ones' - Инициализируйте входные веса единицами.

  • Дескриптор функции - инициализация входных весов с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид weights = func(sz), где sz - размер входных весов.

Слой инициализирует входные веса только в том случае, если InputWeights пустое свойство.

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

Функция для инициализации повторяющихся весов, указанных как одно из следующих:

  • 'orthogonal' - Инициализировать повторяющиеся веса с Q, ортогональной матрицей, заданной QR разложением Z = QR для случайной матрицы Z, дискретизированной из единичного нормального распределения. [4]

  • 'glorot' - Инициализируйте повторяющиеся веса инициализатором Glorot [2] (также известным как инициализатор Xavier). Инициализатор Glorot независимо отсчитывает из однородного распределения с нулевым средним и дисперсией 2/(numIn + numOut), где numIn = NumHiddenUnits и numOut = 3*NumHiddenUnits.

  • 'he' - Инициализируйте повторяющиеся веса с помощью инициализатора He [3]. Выборка инициализатора He из нормального распределения с нулевым средним и дисперсией 2/NumHiddenUnits.

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

  • 'zeros' - Инициализируйте повторяющиеся веса нулями.

  • 'ones' - Инициализируйте повторяющиеся веса единицами.

  • Дескриптор функции - инициализация повторяющихся весов с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид weights = func(sz), где sz - размер повторяющихся весов.

Слой инициализирует повторяющиеся веса только в том случае, если RecurrentWeights пустое свойство.

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

Функция инициализации смещения, указанная как одно из следующих:

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

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

  • 'ones' - Инициализировать смещение с помощью таковых.

  • Дескриптор функции - инициализация смещения с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид bias = func(sz), где sz - размер смещения.

Уровень инициализирует смещение только в том случае, если Bias пустое свойство.

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

Входные веса, заданные как матрица.

Матрица входных весов представляет собой конкатенацию трех матриц входных весов для компонентов на уровне ГРУ. Три матрицы соединены вертикально в следующем порядке:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

Входные веса являются обучаемыми параметрами. При обучении сети, если InputWeights является непустым, то trainNetwork использует InputWeights свойство в качестве начального значения. Если InputWeights пуст, затем trainNetwork использует инициализатор, указанный InputWeightsInitializer.

Во время обучения, InputWeights является 3*NumHiddenUnitsоколо-InputSize матрица.

Повторяющиеся веса, указанные как матрица.

Матрица рекуррентного веса представляет собой конкатенацию трех матриц рекуррентного веса для компонентов на уровне ГРУ. Три матрицы объединяются по вертикали в следующем порядке:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

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

Во время обучения RecurrentWeights является 3*NumHiddenUnitsоколо-NumHiddenUnits матрица.

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

Если ResetGateMode является 'after-multiplication' или 'before-multiplication', то вектор смещения представляет собой конкатенацию трех векторов смещения для компонентов в слое GRU. Три вектора соединены вертикально в следующем порядке:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

В этом случае во время обучения Bias является 3*NumHiddenUnits-по-1 числовой вектор.

Если ResetGateMode является recurrent-bias-after-multiplication', то вектор смещения представляет собой конкатенацию шести векторов смещения для компонентов в слое GRU. Шесть векторов соединены вертикально в следующем порядке:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

  4. Затвор сброса (повторяющееся смещение)

  5. Затвор обновления (повторяющееся смещение)

  6. Состояние кандидата (повторяющееся смещение)

В этом случае во время обучения Bias является 6*NumHiddenUnits-по-1 числовой вектор.

Смещения слоя - это обучаемые параметры. При обучении сети, если Bias является непустым, то trainNetwork использует Bias свойство в качестве начального значения. Если Bias пуст, затем trainNetwork использует инициализатор, указанный BiasInitializer.

Дополнительные сведения о расчетах литника сброса см. в разделе Стробированный слой повторяющихся единиц измерения.

Скорость обучения и регуляризация

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

Программное обеспечение умножает этот коэффициент на глобальную скорость обучения для определения коэффициента скорости обучения для входных весов слоя. Например, если InputWeightsLearnRateFactor 2, тогда коэффициент скорости обучения для входных весов слоя в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.

Управление значением коэффициента скорости обучения для трех отдельных матриц в InputWeightsзадайте вектор 1 на 3. Записи InputWeightsLearnRateFactor соответствуют коэффициенту скорости обучения:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

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

Пример: 2

Пример: [1 2 1]

Коэффициент скорости обучения для повторяющихся весов, определяемый как числовой скаляр или числовой вектор 1 на 3.

Программное обеспечение умножает этот коэффициент на глобальную скорость обучения для определения скорости обучения для повторяющихся весов слоя. Например, если RecurrentWeightsLearnRateFactor 2, то скорость обучения для повторяющихся весов слоя вдвое превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.

Управление значением коэффициента скорости обучения для трех отдельных матриц в RecurrentWeightsзадайте вектор 1 на 3. Записи RecurrentWeightsLearnRateFactor соответствуют коэффициенту скорости обучения:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

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

Пример: 2

Пример: [1 2 1]

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

Программное обеспечение умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для отклонений на этом уровне. Например, если BiasLearnRateFactor 2, тогда скорость обучения для отклонений в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.

Управление значением коэффициента скорости обучения для трех отдельных векторов в Biasзадайте вектор 1 на 3. Записи BiasLearnRateFactor соответствуют коэффициенту скорости обучения:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

Если ResetGateMode является 'recurrent-bias-after-multiplication', то программное обеспечение использует тот же вектор для рекуррентных векторов смещения.

Чтобы задать одинаковое значение для всех векторов, укажите неотрицательный скаляр.

Пример: 2

Пример: [1 2 1]

L2 коэффициент регуляризации для входных весов, определяемый как числовой скаляр или числовой вектор 1 на 3.

Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляции L2 для определения коэффициента регуляции L2 для входных весов слоя. Например, если InputWeightsL2Factor 2, тогда коэффициент регуляризации L2 для входных весов слоя в два раза превышает текущий коэффициент глобальной регуляризации L2. Программное обеспечение определяет коэффициент регуляции L2 на основе настроек, указанных в trainingOptions функция.

Управление значением коэффициента регуляризации L2 для трех отдельных матриц в InputWeightsзадайте вектор 1 на 3. Записи InputWeightsL2Factor соответствуют коэффициенту регуляризации L2:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

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

Пример: 2

Пример: [1 2 1]

L2 коэффициент регуляризации для повторяющихся весов, определяемый как числовой скаляр или числовой вектор 1 на 3.

Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляции L2 для определения коэффициента регуляции L2 для повторяющихся весов слоя. Например, если RecurrentWeightsL2Factor 2, тогда коэффициент регуляризации L2 для повторяющихся весов слоя в два раза превышает текущий коэффициент глобальной регуляризации L2. Программное обеспечение определяет коэффициент регуляции L2 на основе настроек, указанных в trainingOptions функция.

Управление значением коэффициента регуляризации L2 для трех отдельных матриц в RecurrentWeightsзадайте вектор 1 на 3. Записи RecurrentWeightsL2Factor соответствуют коэффициенту регуляризации L2:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

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

Пример: 2

Пример: [1 2 1]

L2 коэффициент регуляризации для смещений, определяемый как неотрицательный скаляр или числовой вектор 1 на 3.

Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для смещений на этом уровне. Например, если BiasL2Factor 2, то L2 регуляризация для смещений в этом слое вдвое превышает глобальный коэффициент регуляризации L2. Можно указать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.

Управление значением коэффициента регуляризации L2 для отдельных векторов в Biasзадайте вектор 1 на 3. Записи BiasL2Factor соответствуют коэффициенту регуляризации L2:

  1. Сбросить затвор

  2. Обновить шейку питателя

  3. Состояние кандидата

Если ResetGateMode является 'recurrent-bias-after-multiplication', то программное обеспечение использует тот же вектор для рекуррентных векторов смещения.

Чтобы задать одинаковое значение для всех векторов, укажите неотрицательный скаляр.

Пример: 2

Пример: [1 2 1]

Слой

Имя слоя, указанное как символьный вектор или строковый скаляр. Если Name имеет значение ''затем программа автоматически присваивает имя во время обучения.

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

Количество входов слоя. Этот слой принимает только один вход.

Типы данных: double

Входные имена слоя. Этот слой принимает только один вход.

Типы данных: cell

Количество выходов уровня. Этот уровень имеет только один выход.

Типы данных: double

Выходные имена слоя. Этот уровень имеет только один выход.

Типы данных: cell

Примеры

свернуть все

Создание слоя GRU с именем 'gru1' и 100 скрытых единиц.

layer = gruLayer(100,'Name','gru1')
layer = 
  GRULayer with properties:

                       Name: 'gru1'

   Hyperparameters
                  InputSize: 'auto'
             NumHiddenUnits: 100
                 OutputMode: 'sequence'
    StateActivationFunction: 'tanh'
     GateActivationFunction: 'sigmoid'
              ResetGateMode: 'after-multiplication'

   Learnable Parameters
               InputWeights: []
           RecurrentWeights: []
                       Bias: []

   State Parameters
                HiddenState: []

  Show all properties

Включение уровня GRU в Layer массив.

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    gruLayer(numHiddenUnits)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   GRU                     GRU with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

Подробнее

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

Ссылки

[1] Чо, Кюнгхюн, Барт Ван Мерриэнбоер, Каглар Гульчехре, Дзмитри Бахданау, Фетхи Бугарес, Хольгер Швенк и Йошуа Бенгио. «Изучение представления фразы с использованием кодера-декодера RNN для статистического машинного перевода» arXiv preprint arXiv:1406.1078 (2014).

[2] Глорот, Ксавье и Йошуа Бенгио. «Понимание сложности обучения глубоким нейронным сетям». Материалы тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.

[3] Хэ, Каймин, Сянъу Чжан, Шаоцин Жэнь и Цзянь Сунь. «Углубляясь в выпрямители: превосходя показатели на уровне человека по классификации ImageNet». В трудах Международной конференции IEEE 2015 по компьютерному зрению, 1026-1034. Вашингтон, округ Колумбия: Общество компьютерного зрения IEEE, 2015.

[4] Саксен, Эндрю М., Джеймс Л. Макклелланд и Сурья Гангули. «Точные решения нелинейной динамики обучения в глубоких линейных нейронных сетях». arXiv препринт arXiv:1312.6120 (2013).

Расширенные возможности

..
Представлен в R2020a