Слой Gated recurrent unit (GRU)
Слой ГРУ изучает зависимости между временными шагами в данных о последовательности и временных рядах.
создает слой ГРУ и устанавливает layer
= gruLayer(numHiddenUnits
)NumHiddenUnits
свойство.
устанавливает дополнительный layer
= gruLayer(numHiddenUnits
,Name,Value
)OutputMode
, Активации, состояние, параметры и инициализация, изучают уровень и регуляризацию и Name
свойства с помощью одного или нескольких аргументов пары "имя-значение". Можно задать несколько аргументов пары "имя-значение". Заключите каждое имя свойства в кавычки.
NumHiddenUnits
— Количество скрытых модулейКоличество скрытых модулей (также известный как скрытый размер) в виде положительного целого числа.
Количество скрытых модулей соответствует объему информации, который помнят между временными шагами (скрытое состояние). Скрытое состояние может содержать информацию от всех предыдущих временных шагов, независимо от длины последовательности. Если количество скрытых модулей является слишком большим, то слой может сверхсоответствовать к обучающим данным. Это значение может варьироваться от нескольких дюжин до нескольких тысяч.
Скрытое состояние не ограничивает количество временных шагов, которые обрабатываются в итерации. Чтобы разделить ваши последовательности в меньшие последовательности для обучения, используйте 'SequenceLength'
опция в trainingOptions
.
Пример: 200
OutputMode
— Формат выхода'sequence'
(значение по умолчанию) | 'last'
Формат выхода в виде одного из следующего:
'sequence'
– Выведите полную последовательность.
'last'
– Выведите последний временной шаг последовательности.
ResetGateMode
— Сбросьте режим логического элемента'after-multiplication'
(значение по умолчанию) | 'before-multiplication'
| 'recurrent-bias-after-multiplication'
Сбросьте режим логического элемента в виде одного из следующего:
'after-multiplication'
– Примените логический элемент сброса после умножения матриц. Эта опция cuDNN совместимый.
'before-multiplication'
– Примените логический элемент сброса перед умножением матриц.
'recurrent-bias-after-multiplication'
– Примените логический элемент сброса после умножения матриц и используйте дополнительный набор условий смещения для текущих весов.
Для получения дополнительной информации о вычислениях логического элемента сброса, смотрите Закрытый Текущий Модульный Слой.
InputSize
— Введите размер'auto'
(значение по умолчанию) | положительное целое число Введите размер в виде положительного целого числа или 'auto'
. Если InputSize
'auto'
, затем программное обеспечение автоматически присваивает входной размер в учебное время.
Пример: 100
StateActivationFunction
— Функция активации, чтобы обновить скрытое состояние'tanh'
(значение по умолчанию) | 'softsign'
Функция активации, чтобы обновить скрытое состояние в виде одного из следующего:
'tanh'
– Используйте гиперболическую функцию тангенса (tanh).
'softsign'
– Используйте функцию softsign .
Слой использует эту опцию в качестве функции в вычислениях, чтобы обновить скрытое состояние.
GateActivationFunction
— Функция активации, чтобы примениться к логическим элементам'sigmoid'
(значение по умолчанию) | 'hard-sigmoid'
Функция активации, чтобы примениться к логическим элементам в виде одного из следующего:
'sigmoid'
– Используйте сигмоидальную функцию .
'hard-sigmoid'
– Используйте трудную сигмоидальную функцию
Слой использует эту опцию в качестве функции в вычислениях для логических элементов слоя.
HiddenState
— Начальное значение скрытого состоянияНачальное значение скрытого состояния в виде NumHiddenUnits
- 1 числовой вектор. Это значение соответствует скрытому состоянию на временном шаге 0.
После установки этого свойства, вызовов resetState
функционируйте устанавливает скрытое состояние на это значение.
InputWeightsInitializer
— Функция, чтобы инициализировать входные веса'glorot'
(значение по умолчанию) | 'he'
| 'orthogonal'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать входные веса в виде одного из следующего:
'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
RecurrentWeightsInitializer
— Функция, чтобы инициализировать текущие веса'orthogonal'
(значение по умолчанию) | 'glorot'
| 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать текущие веса в виде одного из следующего:
'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
BiasInitializer
— Функция, чтобы инициализировать смещение'zeros'
(значение по умолчанию) | 'narrow-normal'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать смещение в виде одного из следующего:
zeros'
– Инициализируйте смещение нулями.
'narrow-normal'
– Инициализируйте смещение путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.
'ones'
– Инициализируйте смещение единицами.
Указатель на функцию – Инициализирует смещение пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму bias = func(sz)
, где sz
размер смещения.
Слой только инициализирует смещение когда Bias
свойство пусто.
Типы данных: char |
string
| function_handle
InputWeights
— Введите веса[]
(значение по умолчанию) | матрицаВведите веса в виде матрицы.
Входная матрица веса является конкатенацией трех входных матриц веса для компонентов в слое ГРУ. Эти три матрицы конкатенированы вертикально в следующем порядке:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Входные веса являются настраиваемыми параметрами. При обучении сети, если InputWeights
непусто, затем trainNetwork
использует InputWeights
свойство как начальное значение. Если InputWeights
пусто, затем trainNetwork
использует инициализатор, заданный InputWeightsInitializer
.
В учебное время, InputWeights
3*NumHiddenUnits
- InputSize
матрица.
RecurrentWeights
— Текущие веса[]
(значение по умолчанию) | матрицаТекущие веса в виде матрицы.
Текущая матрица веса является конкатенацией трех текущих матриц веса для компонентов в слое ГРУ. Эти три матрицы вертикально конкатенированы в следующем порядке:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Текущие веса являются настраиваемыми параметрами. При обучении сети, если RecurrentWeights
непусто, затем trainNetwork
использует RecurrentWeights
свойство как начальное значение. Если RecurrentWeights
пусто, затем trainNetwork
использует инициализатор, заданный RecurrentWeightsInitializer
.
В учебное время RecurrentWeights
3*NumHiddenUnits
- NumHiddenUnits
матрица.
Bias
— Смещения слоя[]
(значение по умолчанию) | числовой векторСлой смещает для слоя ГРУ в виде числового вектора.
Если ResetGateMode
'after-multiplication'
или 'before-multiplication'
, затем вектор смещения является конкатенацией трех векторов смещения для компонентов в слое ГРУ. Эти три вектора конкатенированы вертикально в следующем порядке:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
В этом случае, в учебное время, Bias
3*NumHiddenUnits
- 1 числовой вектор.
Если ResetGateMode
recurrent-bias-after-multiplication'
, затем вектор смещения является конкатенацией шести векторов смещения для компонентов в слое ГРУ. Эти шесть векторов конкатенированы вертикально в следующем порядке:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Сбросьте логический элемент (текущее смещение)
Обновите логический элемент (текущее смещение)
Состояние кандидата (текущее смещение)
В этом случае, в учебное время, Bias
6*NumHiddenUnits
- 1 числовой вектор.
Смещения слоя являются настраиваемыми параметрами. При обучении сети, если Bias
непусто, затем trainNetwork
использует Bias
свойство как начальное значение. Если Bias
пусто, затем trainNetwork
использует инициализатор, заданный BiasInitializer
.
Для получения дополнительной информации о вычислениях логического элемента сброса, смотрите Закрытый Текущий Модульный Слой.
InputWeightsLearnRateFactor
— Фактор скорости обучения для входных весовФактор скорости обучения для входных весов в виде числового скаляра или 1 3 числового вектора.
Программное обеспечение умножает этот фактор на глобальную скорость обучения, чтобы определить фактор скорости обучения для входных весов слоя. Например, если InputWeightsLearnRateFactor
2, затем фактором скорости обучения для входных весов слоя является дважды текущая глобальная скорость обучения. Программное обеспечение определяет глобальную скорость обучения на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора скорости обучения для трех отдельных матриц в InputWeights
, задайте 1 3 вектор. Записи InputWeightsLearnRateFactor
соответствуйте фактору скорости обучения следующего:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1]
RecurrentWeightsLearnRateFactor
— Фактор скорости обучения для текущих весовФактор скорости обучения для текущих весов в виде числового скаляра или 1 3 числового вектора.
Программное обеспечение умножает этот фактор на глобальную скорость обучения, чтобы определить скорость обучения для текущих весов слоя. Например, если RecurrentWeightsLearnRateFactor
2, затем скорость обучения для текущих весов слоя является дважды текущей глобальной скоростью обучения. Программное обеспечение определяет глобальную скорость обучения на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора скорости обучения для трех отдельных матриц в RecurrentWeights
, задайте 1 3 вектор. Записи RecurrentWeightsLearnRateFactor
соответствуйте фактору скорости обучения следующего:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1]
BiasLearnRateFactor
— Фактор скорости обучения для смещенийФактор скорости обучения для смещений в виде неотрицательного скаляра или 1 3 числового вектора.
Программное обеспечение умножает этот фактор на глобальную скорость обучения, чтобы определить скорость обучения для смещений в этом слое. Например, если BiasLearnRateFactor
2, затем скорость обучения для смещений в слое является дважды текущей глобальной скоростью обучения. Программное обеспечение определяет глобальную скорость обучения на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора скорости обучения для трех отдельных векторов в Bias
, задайте 1 3 вектор. Записи BiasLearnRateFactor
соответствуйте фактору скорости обучения следующего:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Если ResetGateMode
'recurrent-bias-after-multiplication'
, затем программное обеспечение использует тот же вектор для текущих векторов смещения.
Чтобы задать то же значение для всех векторов, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1]
InputWeightsL2Factor
— Фактор регуляризации L2 для входных весовФактор регуляризации L2 для входных весов в виде числового скаляра или 1 3 числового вектора.
Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить фактор регуляризации L2 для входных весов слоя. Например, если InputWeightsL2Factor
2, затем фактором регуляризации L2 для входных весов слоя является дважды текущий глобальный фактор регуляризации L2. Программное обеспечение определяет фактор регуляризации L2 на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора регуляризации L2 для трех отдельных матриц в InputWeights
, задайте 1 3 вектор. Записи InputWeightsL2Factor
соответствуйте фактору регуляризации L2 следующего:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1]
RecurrentWeightsL2Factor
— Фактор регуляризации L2 для текущих весовФактор регуляризации L2 для текущих весов в виде числового скаляра или 1 3 числового вектора.
Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить фактор регуляризации L2 для текущих весов слоя. Например, если RecurrentWeightsL2Factor
2, затем фактором регуляризации L2 для текущих весов слоя является дважды текущий глобальный фактор регуляризации L2. Программное обеспечение определяет фактор регуляризации L2 на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора регуляризации L2 для трех отдельных матриц в RecurrentWeights
, задайте 1 3 вектор. Записи RecurrentWeightsL2Factor
соответствуйте фактору регуляризации L2 следующего:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1]
BiasL2Factor
— Фактор регуляризации L2 для смещенийФактор регуляризации L2 для смещений в виде неотрицательного скаляра или 1 3 числового вектора.
Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить регуляризацию L2 для смещений в этом слое. Например, если BiasL2Factor
2, затем регуляризация L2 для смещений в этом слое является дважды глобальным фактором регуляризации L2. Можно задать глобальный фактор регуляризации L2 использование trainingOptions
функция.
Управлять значением фактора регуляризации L2 для отдельных векторов в Bias
, задайте 1 3 вектор. Записи BiasL2Factor
соответствуйте фактору регуляризации L2 следующего:
Сбросьте логический элемент
Обновите логический элемент
Состояние кандидата
Если ResetGateMode
'recurrent-bias-after-multiplication'
, затем программное обеспечение использует тот же вектор для текущих векторов смещения.
Чтобы задать то же значение для всех векторов, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1]
Name
— Имя слоя''
(значение по умолчанию) | вектор символов | строковый скалярИмя слоя в виде вектора символов или строкового скаляра. Если Name
установлен в ''
, затем программное обеспечение автоматически присваивает имя в учебное время.
Типы данных: char |
string
NumInputs
— Количество входных параметровКоличество входных параметров слоя. Этот слой принимает один вход только.
Типы данных: double
InputNames
— Введите имена{'in'}
(значение по умолчанию)Введите имена слоя. Этот слой принимает один вход только.
Типы данных: cell
NumOutputs
— Количество выходных параметровКоличество выходных параметров слоя. Этот слой имеет один выход только.
Типы данных: double
OutputNames
— Выведите имена{'out'}
(значение по умолчанию)Выведите имена слоя. Этот слой имеет один выход только.
Типы данных: cell
Создайте слой ГРУ с именем '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
Включайте слой ГРУ в 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
Слой ГРУ изучает зависимости между временными шагами в данных о последовательности и временных рядах.
Скрытое состояние слоя на временном шаге t содержит выход слоя ГРУ для этого временного шага. На каждом временном шаге слой добавляет информацию в или удаляет информацию из состояния. Слой управляет этими обновлениями с помощью логических элементов.
Следующие компоненты управляют скрытым состоянием слоя.
Компонент | Цель |
---|---|
Сбросьте логический элемент (r) | Управляйте уровнем сброса состояния |
Обновите логический элемент (z) | Управляйте уровнем обновления состояния |
Состояние кандидата () | Управляйте уровнем обновления, добавленного к скрытому состоянию |
learnable веса слоя ГРУ являются входными весами W (InputWeights
), текущие веса R (RecurrentWeights
), и смещение b (Bias
). Если ResetGateMode
свойством является 'recurrent-bias-after-multiplication'
, затем логический элемент и вычисления состояния требуют двух наборов значений смещения. Матрицы W и R являются конкатенациями входных весов и текущих весов каждого компонента, соответственно. Эти матрицы конкатенированы можно следующим образом:
где r, z, и обозначьте логический элемент сброса, логический элемент обновления и состояние кандидата, соответственно.
Вектор смещения зависит от ResetGateMode
свойство. Если ResetGateMode
'after-mutliplication'
или 'before-multiplication'
, затем вектор смещения является конкатенацией трех векторов:
где индекс, W указывает, что это - смещение, соответствующее входному умножению весов.
Если ResetGateMode
'recurrent-bias-after-multiplication'
, затем вектор смещения является конкатенацией шести векторов:
где индекс, R указывает, что это - смещение, соответствующее текущему умножению весов.
Скрытым состоянием на временном шаге t дают
Следующие формулы описывают компоненты на временном шаге t.
Компонент | ResetGateMode | Формула | |
---|---|---|---|
Сбросьте логический элемент | 'after-multiplication' | ||
'before-multiplication' | |||
'recurrent-bias-after-multiplication' | |||
Обновите логический элемент | 'after-multiplication' | ||
'before-multiplication' | |||
'recurrent-bias-after-multiplication' | |||
Состояние кандидата | 'after-multiplication' | ||
'before-multiplication' | |||
'recurrent-bias-after-multiplication' |
В этих вычислениях, и обозначает логический элемент и функции активации состояния, соответственно. gruLayer
функция, по умолчанию, использует сигмоидальную функцию, данную чтобы вычислить активацию логического элемента функционируют и гиперболическая функция тангенса (tanh), чтобы вычислить функцию активации состояния. Чтобы задать состояние и функции активации логического элемента, используйте StateActivationFunction
и GateActivationFunction
свойства, соответственно.
[1] Чо, Kyunghyun, Барт Ван Мерриенбоер, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Хольгер Швенк и Иосуа Бенхио. "Изучая представления фразы с помощью декодера энкодера RNN для статистического машинного перевода". arXiv предварительно распечатывают arXiv:1406.1078 (2014).
[2] Glorot, Ксавьер и Иосуа Бенхио. "Изучая трудность учебных глубоких нейронных сетей прямого распространения". В Продолжениях тринадцатой международной конференции по вопросам искусственного интеллекта и статистики, стр 249-256. 2010.
[3] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь глубоко в выпрямителях: Превосходная эффективность человеческого уровня на imagenet классификации". В Продолжениях международной конференции IEEE по вопросам компьютерного зрения, стр 1026-1034. 2015.
[4] Saxe, Эндрю М., Джеймс Л. Макклеллэнд и Сурья Гэнгули. "Точные решения нелинейной динамики изучения в глубоких линейных нейронных сетях". arXiv предварительно распечатывают arXiv:1312.6120 (2013).
Указания и ограничения по применению:
Для генерации кода, ResetGateMode
свойство должно быть установлено в 'after-multiplication'
или 'recurrent-bias-after-multiplication'
.
bilstmLayer
| classifyAndUpdateState
| flattenLayer
| lstmLayer
| predictAndUpdateState
| resetState
| sequenceFoldingLayer
| sequenceInputLayer
| sequenceUnfoldingLayer
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.