Уровень стробированной рекуррентной установки (ГРУ)
Уровень GRU распознает зависимости между временными шагами во временных рядах и данными последовательности.
создает слой 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 + | x |.
Для обновления скрытого состояния слой использует эту опцию в качестве функции
GateActivationFunction - Функция активации, применяемая к воротам'sigmoid' (по умолчанию) | 'hard-sigmoid'Функция активации, применяемая к затворам, определяемая одним из следующих параметров:
'sigmoid' - Использовать сигмоидную функцию − x) − 1.
'hard-sigmoid' - Использовать жесткую сигмоидальную функцию
x > 2,5.
Слой использует эту опцию в качестве функции в вычислениях для литников слоя.
HiddenState - Начальное значение скрытого состоянияНачальное значение скрытого состояния, указанное как NumHiddenUnits-по-1 числовой вектор. Это значение соответствует скрытому состоянию на временном шаге 0.
После установки этого свойства вызывает resetState установите это значение в скрытое состояние.
InputWeightsInitializer - Функция инициализации входных весов'glorot' (по умолчанию) | 'he' | 'orthogonal' | 'narrow-normal' | 'zeros' | 'ones' | дескриптор функцииФункция инициализации входных весов, указанных как одно из следующих:
'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
RecurrentWeightsInitializer - Функция инициализации повторяющихся весов'orthogonal' (по умолчанию) | 'glorot' | 'he' | 'narrow-normal' | 'zeros' | 'ones' | дескриптор функцииФункция для инициализации повторяющихся весов, указанных как одно из следующих:
'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
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 - Смещения слоев[] (по умолчанию) | числовой векторСмещения слоев для уровня GRU, заданные как числовой вектор.
Если ResetGateMode является 'after-multiplication' или 'before-multiplication', то вектор смещения представляет собой конкатенацию трех векторов смещения для компонентов в слое GRU. Три вектора соединены вертикально в следующем порядке:
Сбросить затвор
Обновить шейку питателя
Состояние кандидата
В этом случае во время обучения Bias является 3*NumHiddenUnits-по-1 числовой вектор.
Если ResetGateMode является recurrent-bias-after-multiplication', то вектор смещения представляет собой конкатенацию шести векторов смещения для компонентов в слое GRU. Шесть векторов соединены вертикально в следующем порядке:
Сбросить затвор
Обновить шейку питателя
Состояние кандидата
Затвор сброса (повторяющееся смещение)
Затвор обновления (повторяющееся смещение)
Состояние кандидата (повторяющееся смещение)
В этом случае во время обучения 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
Создание слоя 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
Уровень GRU распознает зависимости между временными шагами во временных рядах и данными последовательности.
Скрытое состояние слоя на временном шаге t содержит выходные данные уровня GRU для этого временного шага. На каждом шаге времени слой добавляет или удаляет информацию из состояния. Слой управляет этими обновлениями с помощью литников.
Скрытым состоянием слоя управляют следующие компоненты.
| Компонент | Цель |
|---|---|
| Сбросить затвор (r) | Уровень управления сбросом состояния |
| Обновить литник (z) | Уровень управления обновлением состояния |
| Состояние кандидата () | Уровень управления обновлением, добавленным в скрытое состояние |
Поддающиеся изучению веса уровня GRU являются входными весами 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 задается
⊙h˜t+zt⊙ht−1.
Следующие формулы описывают компоненты на временном шаге t.
| Компонент | ResetGateMode | Формула | |
|---|---|---|---|
| Сбросить затвор | 'after-multiplication' | Rrht − 1) | |
'before-multiplication' | |||
'recurrent-bias-after-multiplication' | Rrht − 1 + bRr) | ||
| Обновить шейку питателя | 'after-multiplication' | Rzht − 1) | |
'before-multiplication' | |||
'recurrent-bias-after-multiplication' | Rzht − 1 + bRz) | ||
| Состояние кандидата | 'after-multiplication' | )) | |
'before-multiplication' | )) | ||
'recurrent-bias-after-multiplication' | )) | ||
В этих расчётах и обозначает функции активации затвора и состояния соответственно. gruLayer функция по умолчанию использует сигмоидную функцию, заданную ( − x) − 1, для вычисления функции активации затвора и гиперболическую касательную функцию (tanh) для вычисления функции активации состояния. Для определения состояния и функций активации затвора используйтеStateActivationFunction и GateActivationFunction соответственно.
[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).
Примечания и ограничения по использованию:
StateActivationFunction свойство должно иметь значение 'tanh'.
GateActivationFunction свойство должно иметь значение 'sigmoid'.
ResetGateMode свойство должно иметь значение 'after-multiplication' или 'recurrent-bias-after-multiplication'.
Примечания и ограничения по использованию:
StateActivationFunction свойство должно иметь значение 'tanh'.
GateActivationFunction свойство должно иметь значение 'sigmoid'.
ResetGateMode свойство должно иметь значение 'after-multiplication' или 'recurrent-bias-after-multiplication'.
bilstmLayer | classifyAndUpdateState | flattenLayer | lstmLayer | predictAndUpdateState | resetState | sequenceFoldingLayer | sequenceInputLayer | sequenceUnfoldingLayer
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.