gruLayer

Слой Gated recurrent unit (GRU)

Описание

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

Создание

Описание

пример

layer = gruLayer(numHiddenUnits) создает слой ГРУ и устанавливает NumHiddenUnits свойство.

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

Свойства

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

ГРУ

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

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

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

Пример: 200

Режим вывода в виде одного из следующего:

  • 'sequence' – Выведите полную последовательность.

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

Отметьте для входных параметров состояния к слою в виде 1 (TRUE) или 0 ложь.

Если HasStateInputs свойством является 0 (FALSE), затем слой имеет вход того с именем 'in', который соответствует входным данным. В этом случае слой использует HiddenState свойство для операции слоя.

Если HasStateInputs свойством является 1 (TRUE), затем слой имеет два входных параметров с именами 'in' и 'hidden', которые соответствуют входным данным и скрытому состоянию, соответственно. В этом случае слой использует значения, переданные этим входным параметрам для операции слоя. Если HasStateInputs 1 (TRUE), затем HiddenState свойство должно быть пустым.

Отметьте для выходных параметров состояния от слоя в виде true или false.

Если HasStateOutputs свойством является 0 (FALSE), затем слой имеет тот выход с именем 'out', который соответствует выходным данным.

Если HasStateOutputs свойством является 1 (TRUE), затем слой имеет два выходных параметров с именами 'out' и 'hidden', которые соответствуют выходным данным и скрытому состоянию, соответственно. В этом случае слой также выводит значения состояния, вычисленные во время операции слоя.

Сбросьте режим логического элемента в виде одного из следующего:

  • 'after-multiplication' – Примените логический элемент сброса после умножения матриц. Эта опция cuDNN совместимый.

  • 'before-multiplication' – Примените логический элемент сброса перед умножением матриц.

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

Для получения дополнительной информации о вычислениях логического элемента сброса, смотрите Закрытый Текущий Модульный Слой.

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

Пример: 100

Активации

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

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

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

Слой использует эту опцию в качестве функции σs в вычислениях, чтобы обновить скрытое состояние.

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

  • 'sigmoid' – Используйте сигмоидальную функцию σ(x)=(1+ex)1.

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

    σ(x)={00.2x+0.51если x<2.5если2.5x2.5если x>2.5.

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

Состояние

Скрытое состояние, чтобы использовать в операции слоя в виде NumHiddenUnits- 1 числовой вектор. Это значение соответствует начальной букве скрытое состояние, когда данные передаются слою.

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

Если HasStateInputs true, затем HiddenState свойство должно быть пустым.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 'he' – Инициализируйте текущие веса Им инициализатор [3]. Он выборки инициализатора от нормального распределения с нулевым средним значением и отклонением 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 матрица.

Слой смещает для слоя ГРУ в виде числового вектора.

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

  1. Сбросьте логический элемент

  2. Обновите логический элемент

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

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

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

  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]

Слой

Имя слоя в виде вектора символов или строкового скаляра. Для Layer вход массивов, trainNetwork, assembleNetwork, layerGraph, и dlnetwork функции автоматически присваивают имена к слоям с Name установите на ''.

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

Количество входных параметров слоя.

Если HasStateInputs свойством является 0 (FALSE), затем слой имеет вход того с именем 'in', который соответствует входным данным. В этом случае слой использует HiddenState свойство для операции слоя.

Если HasStateInputs свойством является 1 (TRUE), затем слой имеет два входных параметров с именами 'in' и 'hidden', которые соответствуют входным данным и скрытому состоянию, соответственно. В этом случае слой использует значения, переданные этим входным параметрам для операции слоя. Если HasStateInputs 1 (TRUE), затем HiddenState свойство должно быть пустым.

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

Введите имена слоя.

Если HasStateInputs свойством является 0 (FALSE), затем слой имеет вход того с именем 'in', который соответствует входным данным. В этом случае слой использует HiddenState свойство для операции слоя.

Если HasStateInputs свойством является 1 (TRUE), затем слой имеет два входных параметров с именами 'in' и 'hidden', которые соответствуют входным данным и скрытому состоянию, соответственно. В этом случае слой использует значения, переданные этим входным параметрам для операции слоя. Если HasStateInputs 1 (TRUE), затем HiddenState свойство должно быть пустым.

Количество выходных параметров слоя.

Если HasStateOutputs свойством является 0 (FALSE), затем слой имеет тот выход с именем 'out', который соответствует выходным данным.

Если HasStateOutputs свойством является 1 (TRUE), затем слой имеет два выходных параметров с именами 'out' и 'hidden', которые соответствуют выходным данным и скрытому состоянию, соответственно. В этом случае слой также выводит значения состояния, вычисленные во время операции слоя.

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

Выведите имена слоя.

Если HasStateOutputs свойством является 0 (FALSE), затем слой имеет тот выход с именем 'out', который соответствует выходным данным.

Если HasStateOutputs свойством является 1 (TRUE), затем слой имеет два выходных параметров с именами 'out' и 'hidden', которые соответствуют выходным данным и скрытому состоянию, соответственно. В этом случае слой также выводит значения состояния, вычисленные во время операции слоя.

Примеры

свернуть все

Создайте слой ГРУ с именем 'gru1' и 100 скрытых модулей.

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

                       Name: 'gru1'
                 InputNames: {'in'}
                OutputNames: {'out'}
                  NumInputs: 1
                 NumOutputs: 1
             HasStateInputs: 0
            HasStateOutputs: 0

   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

Включайте слой ГРУ в 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] Чо, Kyunghyun, Барт Ван Мерриенбоер, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Хольгер Швенк и Иосуа Бенхио. "Изучая представления фразы с помощью декодера энкодера RNN для статистического машинного перевода". arXiv предварительно распечатывают arXiv:1406.1078 (2014).

[2] Glorot, Ксавьер и Иосуа Бенхио. "Изучая Трудность Учебных Глубоких Нейронных сетей Прямого распространения". В Продолжениях Тринадцатой Международной конференции по вопросам Искусственного интеллекта и Статистики, 249–356. Сардиния, Италия: AISTATS, 2010.

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

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

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

Введенный в R2020a